[llvm] [SandboxIR] Add RegionPass/RegionPassManager (PR #110933)
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 2 15:43:59 PDT 2024
================
@@ -86,6 +87,68 @@ define void @foo() {
#endif
}
+TEST_F(PassTest, RegionPass) {
+ auto *F = parseFunction(R"IR(
+define i8 @foo(i8 %v0, i8 %v1) {
+ %t0 = add i8 %v0, 1
+ %t1 = add i8 %t0, %v1, !sandboxvec !0
+ %t2 = add i8 %t1, %v1, !sandboxvec !0
+ ret i8 %t1
+}
+
+!0 = distinct !{!"sandboxregion"}
+)IR",
+ "foo");
+
+ class TestPass final : public RegionPass {
+ unsigned &InstCount;
+
+ public:
+ TestPass(unsigned &InstCount)
+ : RegionPass("test-pass"), InstCount(InstCount) {}
+ bool runOnRegion(Region &R) final {
+ for ([[maybe_unused]] auto &Inst : R) {
+ ++InstCount;
+ }
+ return false;
+ }
+ };
+ unsigned InstCount = 0;
+ TestPass TPass(InstCount);
+ // Check getName(),
+ EXPECT_EQ(TPass.getName(), "test-pass");
+ // Check runOnRegion();
+ llvm::SmallVector<std::unique_ptr<Region>> Regions =
+ Region::createRegionsFromMD(*F);
+ ASSERT_EQ(Regions.size(), 1u);
+ TPass.runOnRegion(*Regions[0]);
+ EXPECT_EQ(InstCount, 2u);
+#ifndef NDEBUG
+ {
+ // Check print().
+ std::string Buff;
+ llvm::raw_string_ostream SS(Buff);
+ TPass.print(SS);
+ EXPECT_EQ(Buff, "test-pass");
+ }
+ {
+ // Check operator<<().
+ std::string Buff;
+ llvm::raw_string_ostream SS(Buff);
+ SS << TPass;
+ EXPECT_EQ(Buff, "test-pass");
+ }
+ // Check pass name assertions.
+ class TestNamePass final : public RegionPass {
+ public:
+ TestNamePass(llvm::StringRef Name) : RegionPass(Name) {}
+ bool runOnRegion(Region &F) { return false; }
+ };
+ EXPECT_DEATH(TestNamePass("white space"), ".*whitespace.*");
----------------
aeubanks wrote:
I feel like the asserts are pretty self-explanatory and easy to fix if someone hits them. Maybe adding the reasoning behind those restrictions in comments around the asserts is good
https://github.com/llvm/llvm-project/pull/110933
More information about the llvm-commits
mailing list