xref: /aosp_15_r20/external/llvm/unittests/IR/DominatorTreeTest.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittests/IR/DominatorTreeTest.cpp - Constants unit tests -----===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Dominators.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/Analysis/PostDominators.h"
12*9880d681SAndroid Build Coastguard Worker #include "llvm/AsmParser/Parser.h"
13*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Constants.h"
14*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Instructions.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/LLVMContext.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Module.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/LegacyPassManager.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/SourceMgr.h"
19*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
20*9880d681SAndroid Build Coastguard Worker 
21*9880d681SAndroid Build Coastguard Worker using namespace llvm;
22*9880d681SAndroid Build Coastguard Worker 
23*9880d681SAndroid Build Coastguard Worker namespace llvm {
24*9880d681SAndroid Build Coastguard Worker   void initializeDPassPass(PassRegistry&);
25*9880d681SAndroid Build Coastguard Worker 
26*9880d681SAndroid Build Coastguard Worker   namespace {
27*9880d681SAndroid Build Coastguard Worker     struct DPass : public FunctionPass {
28*9880d681SAndroid Build Coastguard Worker       static char ID;
runOnFunctionllvm::__anon899d76eb0111::DPass29*9880d681SAndroid Build Coastguard Worker       bool runOnFunction(Function &F) override {
30*9880d681SAndroid Build Coastguard Worker         DominatorTree *DT =
31*9880d681SAndroid Build Coastguard Worker             &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
32*9880d681SAndroid Build Coastguard Worker         PostDominatorTree *PDT =
33*9880d681SAndroid Build Coastguard Worker             &getAnalysis<PostDominatorTreeWrapperPass>().getPostDomTree();
34*9880d681SAndroid Build Coastguard Worker         Function::iterator FI = F.begin();
35*9880d681SAndroid Build Coastguard Worker 
36*9880d681SAndroid Build Coastguard Worker         BasicBlock *BB0 = &*FI++;
37*9880d681SAndroid Build Coastguard Worker         BasicBlock::iterator BBI = BB0->begin();
38*9880d681SAndroid Build Coastguard Worker         Instruction *Y1 = &*BBI++;
39*9880d681SAndroid Build Coastguard Worker         Instruction *Y2 = &*BBI++;
40*9880d681SAndroid Build Coastguard Worker         Instruction *Y3 = &*BBI++;
41*9880d681SAndroid Build Coastguard Worker 
42*9880d681SAndroid Build Coastguard Worker         BasicBlock *BB1 = &*FI++;
43*9880d681SAndroid Build Coastguard Worker         BBI = BB1->begin();
44*9880d681SAndroid Build Coastguard Worker         Instruction *Y4 = &*BBI++;
45*9880d681SAndroid Build Coastguard Worker 
46*9880d681SAndroid Build Coastguard Worker         BasicBlock *BB2 = &*FI++;
47*9880d681SAndroid Build Coastguard Worker         BBI = BB2->begin();
48*9880d681SAndroid Build Coastguard Worker         Instruction *Y5 = &*BBI++;
49*9880d681SAndroid Build Coastguard Worker 
50*9880d681SAndroid Build Coastguard Worker         BasicBlock *BB3 = &*FI++;
51*9880d681SAndroid Build Coastguard Worker         BBI = BB3->begin();
52*9880d681SAndroid Build Coastguard Worker         Instruction *Y6 = &*BBI++;
53*9880d681SAndroid Build Coastguard Worker         Instruction *Y7 = &*BBI++;
54*9880d681SAndroid Build Coastguard Worker 
55*9880d681SAndroid Build Coastguard Worker         BasicBlock *BB4 = &*FI++;
56*9880d681SAndroid Build Coastguard Worker         BBI = BB4->begin();
57*9880d681SAndroid Build Coastguard Worker         Instruction *Y8 = &*BBI++;
58*9880d681SAndroid Build Coastguard Worker         Instruction *Y9 = &*BBI++;
59*9880d681SAndroid Build Coastguard Worker 
60*9880d681SAndroid Build Coastguard Worker         // Reachability
61*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->isReachableFromEntry(BB0));
62*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->isReachableFromEntry(BB1));
63*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->isReachableFromEntry(BB2));
64*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->isReachableFromEntry(BB3));
65*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->isReachableFromEntry(BB4));
66*9880d681SAndroid Build Coastguard Worker 
67*9880d681SAndroid Build Coastguard Worker         // BB dominance
68*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB0, BB0));
69*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB0, BB1));
70*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB0, BB2));
71*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB0, BB3));
72*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB0, BB4));
73*9880d681SAndroid Build Coastguard Worker 
74*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB1, BB0));
75*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB1, BB1));
76*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB1, BB2));
77*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB1, BB3));
78*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB1, BB4));
79*9880d681SAndroid Build Coastguard Worker 
80*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB2, BB0));
81*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB2, BB1));
82*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB2, BB2));
83*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB2, BB3));
84*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB2, BB4));
85*9880d681SAndroid Build Coastguard Worker 
86*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB3, BB0));
87*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB3, BB1));
88*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB3, BB2));
89*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(BB3, BB3));
90*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(BB3, BB4));
91*9880d681SAndroid Build Coastguard Worker 
92*9880d681SAndroid Build Coastguard Worker         // BB proper dominance
93*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB0, BB0));
94*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->properlyDominates(BB0, BB1));
95*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->properlyDominates(BB0, BB2));
96*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->properlyDominates(BB0, BB3));
97*9880d681SAndroid Build Coastguard Worker 
98*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB1, BB0));
99*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB1, BB1));
100*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB1, BB2));
101*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->properlyDominates(BB1, BB3));
102*9880d681SAndroid Build Coastguard Worker 
103*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB2, BB0));
104*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB2, BB1));
105*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB2, BB2));
106*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->properlyDominates(BB2, BB3));
107*9880d681SAndroid Build Coastguard Worker 
108*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB3, BB0));
109*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB3, BB1));
110*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB3, BB2));
111*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->properlyDominates(BB3, BB3));
112*9880d681SAndroid Build Coastguard Worker 
113*9880d681SAndroid Build Coastguard Worker         // Instruction dominance in the same reachable BB
114*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y1, Y1));
115*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, Y2));
116*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y2, Y1));
117*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y2, Y2));
118*9880d681SAndroid Build Coastguard Worker 
119*9880d681SAndroid Build Coastguard Worker         // Instruction dominance in the same unreachable BB
120*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y6, Y6));
121*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y6, Y7));
122*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y7, Y6));
123*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y7, Y7));
124*9880d681SAndroid Build Coastguard Worker 
125*9880d681SAndroid Build Coastguard Worker         // Invoke
126*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y3, Y4));
127*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y3, Y5));
128*9880d681SAndroid Build Coastguard Worker 
129*9880d681SAndroid Build Coastguard Worker         // Phi
130*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y2, Y9));
131*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y3, Y9));
132*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y8, Y9));
133*9880d681SAndroid Build Coastguard Worker 
134*9880d681SAndroid Build Coastguard Worker         // Anything dominates unreachable
135*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, Y6));
136*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y3, Y6));
137*9880d681SAndroid Build Coastguard Worker 
138*9880d681SAndroid Build Coastguard Worker         // Unreachable doesn't dominate reachable
139*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y6, Y1));
140*9880d681SAndroid Build Coastguard Worker 
141*9880d681SAndroid Build Coastguard Worker         // Instruction, BB dominance
142*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y1, BB0));
143*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, BB1));
144*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, BB2));
145*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, BB3));
146*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y1, BB4));
147*9880d681SAndroid Build Coastguard Worker 
148*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y3, BB0));
149*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y3, BB1));
150*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y3, BB2));
151*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y3, BB3));
152*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(DT->dominates(Y3, BB4));
153*9880d681SAndroid Build Coastguard Worker 
154*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(DT->dominates(Y6, BB3));
155*9880d681SAndroid Build Coastguard Worker 
156*9880d681SAndroid Build Coastguard Worker         // Post dominance.
157*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(PDT->dominates(BB0, BB0));
158*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(PDT->dominates(BB1, BB0));
159*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(PDT->dominates(BB2, BB0));
160*9880d681SAndroid Build Coastguard Worker         EXPECT_FALSE(PDT->dominates(BB3, BB0));
161*9880d681SAndroid Build Coastguard Worker         EXPECT_TRUE(PDT->dominates(BB4, BB1));
162*9880d681SAndroid Build Coastguard Worker 
163*9880d681SAndroid Build Coastguard Worker         // Dominance descendants.
164*9880d681SAndroid Build Coastguard Worker         SmallVector<BasicBlock *, 8> DominatedBBs, PostDominatedBBs;
165*9880d681SAndroid Build Coastguard Worker 
166*9880d681SAndroid Build Coastguard Worker         DT->getDescendants(BB0, DominatedBBs);
167*9880d681SAndroid Build Coastguard Worker         PDT->getDescendants(BB0, PostDominatedBBs);
168*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DominatedBBs.size(), 4UL);
169*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(PostDominatedBBs.size(), 1UL);
170*9880d681SAndroid Build Coastguard Worker 
171*9880d681SAndroid Build Coastguard Worker         // BB3 is unreachable. It should have no dominators nor postdominators.
172*9880d681SAndroid Build Coastguard Worker         DominatedBBs.clear();
173*9880d681SAndroid Build Coastguard Worker         PostDominatedBBs.clear();
174*9880d681SAndroid Build Coastguard Worker         DT->getDescendants(BB3, DominatedBBs);
175*9880d681SAndroid Build Coastguard Worker         DT->getDescendants(BB3, PostDominatedBBs);
176*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DominatedBBs.size(), 0UL);
177*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(PostDominatedBBs.size(), 0UL);
178*9880d681SAndroid Build Coastguard Worker 
179*9880d681SAndroid Build Coastguard Worker         // Check DFS Numbers before
180*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB0)->getDFSNumIn(), 0UL);
181*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB0)->getDFSNumOut(), 7UL);
182*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB1)->getDFSNumIn(), 1UL);
183*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB1)->getDFSNumOut(), 2UL);
184*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB2)->getDFSNumIn(), 5UL);
185*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB2)->getDFSNumOut(), 6UL);
186*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB4)->getDFSNumIn(), 3UL);
187*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB4)->getDFSNumOut(), 4UL);
188*9880d681SAndroid Build Coastguard Worker 
189*9880d681SAndroid Build Coastguard Worker         // Reattach block 3 to block 1 and recalculate
190*9880d681SAndroid Build Coastguard Worker         BB1->getTerminator()->eraseFromParent();
191*9880d681SAndroid Build Coastguard Worker         BranchInst::Create(BB4, BB3, ConstantInt::getTrue(F.getContext()), BB1);
192*9880d681SAndroid Build Coastguard Worker         DT->recalculate(F);
193*9880d681SAndroid Build Coastguard Worker 
194*9880d681SAndroid Build Coastguard Worker         // Check DFS Numbers after
195*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB0)->getDFSNumIn(), 0UL);
196*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB0)->getDFSNumOut(), 9UL);
197*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB1)->getDFSNumIn(), 1UL);
198*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB1)->getDFSNumOut(), 4UL);
199*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB2)->getDFSNumIn(), 7UL);
200*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB2)->getDFSNumOut(), 8UL);
201*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB3)->getDFSNumIn(), 2UL);
202*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB3)->getDFSNumOut(), 3UL);
203*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB4)->getDFSNumIn(), 5UL);
204*9880d681SAndroid Build Coastguard Worker         EXPECT_EQ(DT->getNode(BB4)->getDFSNumOut(), 6UL);
205*9880d681SAndroid Build Coastguard Worker 
206*9880d681SAndroid Build Coastguard Worker         return false;
207*9880d681SAndroid Build Coastguard Worker       }
getAnalysisUsagellvm::__anon899d76eb0111::DPass208*9880d681SAndroid Build Coastguard Worker       void getAnalysisUsage(AnalysisUsage &AU) const override {
209*9880d681SAndroid Build Coastguard Worker         AU.addRequired<DominatorTreeWrapperPass>();
210*9880d681SAndroid Build Coastguard Worker         AU.addRequired<PostDominatorTreeWrapperPass>();
211*9880d681SAndroid Build Coastguard Worker       }
DPassllvm::__anon899d76eb0111::DPass212*9880d681SAndroid Build Coastguard Worker       DPass() : FunctionPass(ID) {
213*9880d681SAndroid Build Coastguard Worker         initializeDPassPass(*PassRegistry::getPassRegistry());
214*9880d681SAndroid Build Coastguard Worker       }
215*9880d681SAndroid Build Coastguard Worker     };
216*9880d681SAndroid Build Coastguard Worker     char DPass::ID = 0;
217*9880d681SAndroid Build Coastguard Worker 
makeLLVMModule(LLVMContext & Context,DPass * P)218*9880d681SAndroid Build Coastguard Worker     std::unique_ptr<Module> makeLLVMModule(LLVMContext &Context, DPass *P) {
219*9880d681SAndroid Build Coastguard Worker       const char *ModuleStrig =
220*9880d681SAndroid Build Coastguard Worker         "declare i32 @g()\n" \
221*9880d681SAndroid Build Coastguard Worker         "define void @f(i32 %x) personality i32 ()* @g {\n" \
222*9880d681SAndroid Build Coastguard Worker         "bb0:\n" \
223*9880d681SAndroid Build Coastguard Worker         "  %y1 = add i32 %x, 1\n" \
224*9880d681SAndroid Build Coastguard Worker         "  %y2 = add i32 %x, 1\n" \
225*9880d681SAndroid Build Coastguard Worker         "  %y3 = invoke i32 @g() to label %bb1 unwind label %bb2\n" \
226*9880d681SAndroid Build Coastguard Worker         "bb1:\n" \
227*9880d681SAndroid Build Coastguard Worker         "  %y4 = add i32 %x, 1\n" \
228*9880d681SAndroid Build Coastguard Worker         "  br label %bb4\n" \
229*9880d681SAndroid Build Coastguard Worker         "bb2:\n" \
230*9880d681SAndroid Build Coastguard Worker         "  %y5 = landingpad i32\n" \
231*9880d681SAndroid Build Coastguard Worker         "          cleanup\n" \
232*9880d681SAndroid Build Coastguard Worker         "  br label %bb4\n" \
233*9880d681SAndroid Build Coastguard Worker         "bb3:\n" \
234*9880d681SAndroid Build Coastguard Worker         "  %y6 = add i32 %x, 1\n" \
235*9880d681SAndroid Build Coastguard Worker         "  %y7 = add i32 %x, 1\n" \
236*9880d681SAndroid Build Coastguard Worker         "  ret void\n" \
237*9880d681SAndroid Build Coastguard Worker         "bb4:\n" \
238*9880d681SAndroid Build Coastguard Worker         "  %y8 = phi i32 [0, %bb2], [%y4, %bb1]\n"
239*9880d681SAndroid Build Coastguard Worker         "  %y9 = phi i32 [0, %bb2], [%y4, %bb1]\n"
240*9880d681SAndroid Build Coastguard Worker         "  ret void\n" \
241*9880d681SAndroid Build Coastguard Worker         "}\n";
242*9880d681SAndroid Build Coastguard Worker       SMDiagnostic Err;
243*9880d681SAndroid Build Coastguard Worker       return parseAssemblyString(ModuleStrig, Err, Context);
244*9880d681SAndroid Build Coastguard Worker     }
245*9880d681SAndroid Build Coastguard Worker 
TEST(DominatorTree,Unreachable)246*9880d681SAndroid Build Coastguard Worker     TEST(DominatorTree, Unreachable) {
247*9880d681SAndroid Build Coastguard Worker       DPass *P = new DPass();
248*9880d681SAndroid Build Coastguard Worker       LLVMContext Context;
249*9880d681SAndroid Build Coastguard Worker       std::unique_ptr<Module> M = makeLLVMModule(Context, P);
250*9880d681SAndroid Build Coastguard Worker       legacy::PassManager Passes;
251*9880d681SAndroid Build Coastguard Worker       Passes.add(P);
252*9880d681SAndroid Build Coastguard Worker       Passes.run(*M);
253*9880d681SAndroid Build Coastguard Worker     }
254*9880d681SAndroid Build Coastguard Worker   }
255*9880d681SAndroid Build Coastguard Worker }
256*9880d681SAndroid Build Coastguard Worker 
257*9880d681SAndroid Build Coastguard Worker INITIALIZE_PASS_BEGIN(DPass, "dpass", "dpass", false, false)
258*9880d681SAndroid Build Coastguard Worker INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
259*9880d681SAndroid Build Coastguard Worker INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)
260*9880d681SAndroid Build Coastguard Worker INITIALIZE_PASS_END(DPass, "dpass", "dpass", false, false)
261