@@ -27,6 +27,55 @@ struct DependencyGraphTest : public testing::Test {
27
27
}
28
28
};
29
29
30
+ TEST_F (DependencyGraphTest, DGNode_IsMem) {
31
+ parseIR (C, R"IR(
32
+ declare void @llvm.sideeffect()
33
+ declare void @llvm.pseudoprobe(i64, i64, i32, i64)
34
+ declare void @llvm.fake.use(...)
35
+ declare void @bar()
36
+ define void @foo(i8 %v1, ptr %ptr) {
37
+ store i8 %v1, ptr %ptr
38
+ %ld0 = load i8, ptr %ptr
39
+ %add = add i8 %v1, %v1
40
+ %stacksave = call ptr @llvm.stacksave()
41
+ call void @llvm.stackrestore(ptr %stacksave)
42
+ call void @llvm.sideeffect()
43
+ call void @llvm.pseudoprobe(i64 42, i64 1, i32 0, i64 -1)
44
+ call void @llvm.fake.use(ptr %ptr)
45
+ call void @bar()
46
+ ret void
47
+ }
48
+ )IR" );
49
+ llvm::Function *LLVMF = &*M->getFunction (" foo" );
50
+ sandboxir::Context Ctx (C);
51
+ auto *F = Ctx.createFunction (LLVMF);
52
+ auto *BB = &*F->begin ();
53
+ auto It = BB->begin ();
54
+ auto *Store = cast<sandboxir::StoreInst>(&*It++);
55
+ auto *Load = cast<sandboxir::LoadInst>(&*It++);
56
+ auto *Add = cast<sandboxir::BinaryOperator>(&*It++);
57
+ auto *StackSave = cast<sandboxir::CallInst>(&*It++);
58
+ auto *StackRestore = cast<sandboxir::CallInst>(&*It++);
59
+ auto *SideEffect = cast<sandboxir::CallInst>(&*It++);
60
+ auto *PseudoProbe = cast<sandboxir::CallInst>(&*It++);
61
+ auto *FakeUse = cast<sandboxir::CallInst>(&*It++);
62
+ auto *Call = cast<sandboxir::CallInst>(&*It++);
63
+ auto *Ret = cast<sandboxir::ReturnInst>(&*It++);
64
+
65
+ sandboxir::DependencyGraph DAG;
66
+ DAG.extend ({&*BB->begin (), BB->getTerminator ()});
67
+ EXPECT_TRUE (DAG.getNode (Store)->isMem ());
68
+ EXPECT_TRUE (DAG.getNode (Load)->isMem ());
69
+ EXPECT_FALSE (DAG.getNode (Add)->isMem ());
70
+ EXPECT_TRUE (DAG.getNode (StackSave)->isMem ());
71
+ EXPECT_TRUE (DAG.getNode (StackRestore)->isMem ());
72
+ EXPECT_FALSE (DAG.getNode (SideEffect)->isMem ());
73
+ EXPECT_FALSE (DAG.getNode (PseudoProbe)->isMem ());
74
+ EXPECT_TRUE (DAG.getNode (FakeUse)->isMem ());
75
+ EXPECT_TRUE (DAG.getNode (Call)->isMem ());
76
+ EXPECT_FALSE (DAG.getNode (Ret)->isMem ());
77
+ }
78
+
30
79
TEST_F (DependencyGraphTest, Basic) {
31
80
parseIR (C, R"IR(
32
81
define void @foo(ptr %ptr, i8 %v0, i8 %v1) {
0 commit comments