[llvm-branch-commits] [llvm] e210421 - Revert "[SandboxVec] Add barebones Region class. (#108899)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Sep 17 15:45:00 PDT 2024
Author: Jorge Gorbe Moya
Date: 2024-09-17T15:44:57-07:00
New Revision: e210421f51e99694bd26c58be2525bc2db8c3146
URL: https://github.com/llvm/llvm-project/commit/e210421f51e99694bd26c58be2525bc2db8c3146
DIFF: https://github.com/llvm/llvm-project/commit/e210421f51e99694bd26c58be2525bc2db8c3146.diff
LOG: Revert "[SandboxVec] Add barebones Region class. (#108899)"
This reverts commit 3aecf41c2b384ab65a327db91632ff0c148df721.
Added:
Modified:
llvm/lib/Transforms/Vectorize/CMakeLists.txt
llvm/unittests/Transforms/Vectorize/SandboxVectorizer/CMakeLists.txt
Removed:
llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Region.h
llvm/lib/Transforms/Vectorize/SandboxVectorizer/Region.cpp
llvm/unittests/Transforms/Vectorize/SandboxVectorizer/RegionTest.cpp
################################################################################
diff --git a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Region.h b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Region.h
deleted file mode 100644
index 71d9ab58250993..00000000000000
--- a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Region.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//===- Region.h -------------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_REGION_H
-#define LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_REGION_H
-
-#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/iterator_range.h"
-#include "llvm/SandboxIR/SandboxIR.h"
-#include "llvm/Support/InstructionCost.h"
-#include "llvm/Support/raw_ostream.h"
-
-namespace llvm::sandboxir {
-
-/// The main job of the Region is to point to new instructions generated by
-/// vectorization passes. It is the unit that RegionPasses operate on with their
-/// runOnRegion() function.
-///
-/// The region allows us to stack transformations horizontally, meaning that
-/// each transformation operates on a single region and the resulting region is
-/// the input to the next transformation, as opposed to vertically, which is the
-/// common way of applying a transformation across the whole BB. This enables us
-/// to check for profitability and decide whether we accept or rollback at a
-/// region granularity, which is much better than doing this at the BB level.
-///
-// Traditional approach: transformations applied vertically for the whole BB
-// BB
-// +----+
-// | |
-// | |
-// | | -> Transform1 -> ... -> TransformN -> Check Cost
-// | |
-// | |
-// +----+
-//
-// Region-based approach: transformations applied horizontally, for each Region
-// BB
-// +----+
-// |Rgn1| -> Transform1 -> ... -> TransformN -> Check Cost
-// | |
-// |Rgn2| -> Transform1 -> ... -> TransformN -> Check Cost
-// | |
-// |Rgn3| -> Transform1 -> ... -> TransformN -> Check Cost
-// +----+
-
-class Region {
- /// All the instructions in the Region. Only new instructions generated during
- /// vectorization are part of the Region.
- SetVector<Instruction *> Insts;
-
- /// A unique ID, used for debugging.
- unsigned RegionID = 0;
-
- Context &Ctx;
-
- /// The basic block containing this region.
- BasicBlock &BB;
-
- // TODO: Add cost modeling.
- // TODO: Add a way to encode/decode region info to/from metadata.
-
-public:
- Region(Context &Ctx, BasicBlock &BB);
- ~Region();
-
- BasicBlock *getParent() const { return &BB; }
- Context &getContext() const { return Ctx; }
- /// Returns the region's unique ID.
- unsigned getID() const { return RegionID; }
-
- /// Adds I to the set.
- void add(Instruction *I);
- /// Removes I from the set.
- void remove(Instruction *I);
- /// Returns true if I is in the Region.
- bool contains(Instruction *I) const { return Insts.contains(I); }
- /// Returns true if the Region has no instructions.
- bool empty() const { return Insts.empty(); }
-
- using iterator = decltype(Insts.begin());
- iterator begin() { return Insts.begin(); }
- iterator end() { return Insts.end(); }
- iterator_range<iterator> insts() { return make_range(begin(), end()); }
-
-#ifndef NDEBUG
- /// This is an expensive check, meant for testing.
- bool operator==(const Region &Other) const;
- bool operator!=(const Region &other) const { return !(*this == other); }
-
- void dump(raw_ostream &OS) const;
- void dump() const;
- friend raw_ostream &operator<<(raw_ostream &OS, const Region &Rgn) {
- Rgn.dump(OS);
- return OS;
- }
-#endif
-};
-
-} // namespace llvm::sandboxir
-
-#endif // LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_REGION_H
diff --git a/llvm/lib/Transforms/Vectorize/CMakeLists.txt b/llvm/lib/Transforms/Vectorize/CMakeLists.txt
index f33906b05fedd1..59d04ac3cecd00 100644
--- a/llvm/lib/Transforms/Vectorize/CMakeLists.txt
+++ b/llvm/lib/Transforms/Vectorize/CMakeLists.txt
@@ -5,7 +5,6 @@ add_llvm_component_library(LLVMVectorize
LoopVectorize.cpp
SandboxVectorizer/DependencyGraph.cpp
SandboxVectorizer/Passes/BottomUpVec.cpp
- SandboxVectorizer/Region.cpp
SandboxVectorizer/SandboxVectorizer.cpp
SLPVectorizer.cpp
Vectorize.cpp
diff --git a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Region.cpp b/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Region.cpp
deleted file mode 100644
index 0c5d66cdeb8f40..00000000000000
--- a/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Region.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//===- Region.cpp ---------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Transforms/Vectorize/SandboxVectorizer/Region.h"
-
-namespace llvm::sandboxir {
-
-Region::Region(Context &Ctx, BasicBlock &BB) : Ctx(Ctx), BB(BB) {
- static unsigned StaticRegionID;
- RegionID = StaticRegionID++;
-}
-
-Region::~Region() {}
-
-void Region::add(Instruction *I) { Insts.insert(I); }
-
-void Region::remove(Instruction *I) { Insts.remove(I); }
-
-#ifndef NDEBUG
-bool Region::operator==(const Region &Other) const {
- if (Insts.size() != Other.Insts.size())
- return false;
- if (!std::is_permutation(Insts.begin(), Insts.end(), Other.Insts.begin()))
- return false;
- return true;
-}
-
-void Region::dump(raw_ostream &OS) const {
- OS << "RegionID: " << getID() << "\n";
- for (auto *I : Insts)
- OS << *I << "\n";
-}
-
-void Region::dump() const {
- dump(dbgs());
- dbgs() << "\n";
-}
-
-} // namespace llvm::sandboxir
-
-#endif // NDEBUG
diff --git a/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/CMakeLists.txt b/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/CMakeLists.txt
index 23dbe7f46bc995..488c9c2344b56c 100644
--- a/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/CMakeLists.txt
+++ b/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/CMakeLists.txt
@@ -9,5 +9,4 @@ set(LLVM_LINK_COMPONENTS
add_llvm_unittest(SandboxVectorizerTests
DependencyGraphTest.cpp
- RegionTest.cpp
)
diff --git a/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/RegionTest.cpp b/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/RegionTest.cpp
deleted file mode 100644
index 85b567ed51cd8a..00000000000000
--- a/llvm/unittests/Transforms/Vectorize/SandboxVectorizer/RegionTest.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-//===- RegionTest.cpp -----------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Transforms/Vectorize/SandboxVectorizer/Region.h"
-#include "llvm/AsmParser/Parser.h"
-#include "llvm/SandboxIR/SandboxIR.h"
-#include "llvm/Support/SourceMgr.h"
-#include "gmock/gmock-matchers.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-
-struct RegionTest : public testing::Test {
- LLVMContext C;
- std::unique_ptr<Module> M;
-
- void parseIR(LLVMContext &C, const char *IR) {
- SMDiagnostic Err;
- M = parseAssemblyString(IR, Err, C);
- if (!M)
- Err.print("RegionTest", errs());
- }
-};
-
-TEST_F(RegionTest, Basic) {
- parseIR(C, R"IR(
-define i8 @foo(i8 %v0, i8 %v1) {
- %t0 = add i8 %v0, 1
- %t1 = add i8 %t0, %v1
- ret i8 %t1
-}
-)IR");
- llvm::Function *LLVMF = &*M->getFunction("foo");
- sandboxir::Context Ctx(C);
- auto *F = Ctx.createFunction(LLVMF);
- auto *BB = &*F->begin();
- auto It = BB->begin();
- auto *T0 = cast<sandboxir::Instruction>(&*It++);
- auto *T1 = cast<sandboxir::Instruction>(&*It++);
- auto *Ret = cast<sandboxir::Instruction>(&*It++);
- sandboxir::Region Rgn(Ctx, *BB);
-
- // Check getters
- EXPECT_EQ(BB, Rgn.getParent());
- EXPECT_EQ(&Ctx, &Rgn.getContext());
- EXPECT_EQ(0U, Rgn.getID());
-
- // Check add / remove / empty.
- EXPECT_TRUE(Rgn.empty());
- Rgn.add(T0);
- EXPECT_FALSE(Rgn.empty());
- Rgn.remove(T0);
- EXPECT_TRUE(Rgn.empty());
-
- // Check iteration.
- Rgn.add(T0);
- Rgn.add(T1);
- Rgn.add(Ret);
- // Use an ordered matcher because we're supposed to preserve the insertion
- // order for determinism.
- EXPECT_THAT(Rgn.insts(), testing::ElementsAre(T0, T1, Ret));
-
- // Check contains
- EXPECT_TRUE(Rgn.contains(T0));
- Rgn.remove(T0);
- EXPECT_FALSE(Rgn.contains(T0));
-
-#ifndef NDEBUG
- // Check equality comparison. Insert in reverse order into `Other` to check
- // that comparison is order-independent.
- sandboxir::Region Other(Ctx, *BB);
- Other.add(Ret);
- EXPECT_NE(Rgn, Other);
- Other.add(T1);
- EXPECT_EQ(Rgn, Other);
-#endif
-}
More information about the llvm-branch-commits
mailing list