1 //===- Dominators.cpp - Dominator Calculation -----------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements simple dominator construction algorithms for finding
11 // forward dominators.  Postdominators are available in libanalysis, but are not
12 // included in libvmcore, because it's not needed.  Forward dominators are
13 // needed to support the Verifier pass.
14 //
15 //===----------------------------------------------------------------------===//
16 
17 #include "llvm/IR/Dominators.h"
18 #include "llvm/ADT/DepthFirstIterator.h"
19 #include "llvm/ADT/SmallPtrSet.h"
20 #include "llvm/IR/CFG.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/Instructions.h"
23 #include "llvm/IR/PassManager.h"
24 #include "llvm/Support/CommandLine.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/GenericDomTreeConstruction.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include <algorithm>
29 using namespace llvm;
30 
31 bool llvm::VerifyDomInfo = false;
32 static cl::opt<bool, true>
33     VerifyDomInfoX("verify-dom-info", cl::location(VerifyDomInfo), cl::Hidden,
34                    cl::desc("Verify dominator info (time consuming)"));
35 
36 #ifdef EXPENSIVE_CHECKS
37 static constexpr bool ExpensiveChecksEnabled = true;
38 #else
39 static constexpr bool ExpensiveChecksEnabled = false;
40 #endif
41 
42 bool BasicBlockEdge::isSingleEdge() const {
43   const TerminatorInst *TI = Start->getTerminator();
44   unsigned NumEdgesToEnd = 0;
45   for (unsigned int i = 0, n = TI->getNumSuccessors(); i < n; ++i) {
46     if (TI->getSuccessor(i) == End)
47       ++NumEdgesToEnd;
48     if (NumEdgesToEnd >= 2)
49       return false;
50   }
51   assert(NumEdgesToEnd == 1);
52   return true;
53 }
54 
55 //===----------------------------------------------------------------------===//
56 //  DominatorTree Implementation
57 //===----------------------------------------------------------------------===//
58 //
59 // Provide public access to DominatorTree information.  Implementation details
60 // can be found in Dominators.h, GenericDomTree.h, and
61 // GenericDomTreeConstruction.h.
62 //
63 //===----------------------------------------------------------------------===//
64 
65 template class llvm::DomTreeNodeBase<BasicBlock>;
66 template class llvm::DominatorTreeBase<BasicBlock, false>; // DomTreeBase
67 template class llvm::DominatorTreeBase<BasicBlock, true>; // PostDomTreeBase
68 
69 template struct llvm::DomTreeBuilder::Update<BasicBlock *>;
70 
71 template void llvm::DomTreeBuilder::Calculate<DomTreeBuilder::BBDomTree>(
72     DomTreeBuilder::BBDomTree &DT);
73 template void llvm::DomTreeBuilder::Calculate<DomTreeBuilder::BBPostDomTree>(
74     DomTreeBuilder::BBPostDomTree &DT);
75 
76 template void llvm::DomTreeBuilder::InsertEdge<DomTreeBuilder::BBDomTree>(
77     DomTreeBuilder::BBDomTree &DT, BasicBlock *From, BasicBlock *To);
78 template void llvm::DomTreeBuilder::InsertEdge<DomTreeBuilder::BBPostDomTree>(
79     DomTreeBuilder::BBPostDomTree &DT, BasicBlock *From, BasicBlock *To);
80 
81 template void llvm::DomTreeBuilder::DeleteEdge<DomTreeBuilder::BBDomTree>(
82     DomTreeBuilder::BBDomTree &DT, BasicBlock *From, BasicBlock *To);
83 template void llvm::DomTreeBuilder::DeleteEdge<DomTreeBuilder::BBPostDomTree>(
84     DomTreeBuilder::BBPostDomTree &DT, BasicBlock *From, BasicBlock *To);
85 
86 template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBDomTree>(
87     DomTreeBuilder::BBDomTree &DT, DomTreeBuilder::BBUpdates);
88 template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBPostDomTree>(
89     DomTreeBuilder::BBPostDomTree &DT, DomTreeBuilder::BBUpdates);
90 
91 template bool llvm::DomTreeBuilder::Verify<DomTreeBuilder::BBDomTree>(
92     const DomTreeBuilder::BBDomTree &DT,
93     DomTreeBuilder::BBDomTree::VerificationLevel VL);
94 template bool llvm::DomTreeBuilder::Verify<DomTreeBuilder::BBPostDomTree>(
95     const DomTreeBuilder::BBPostDomTree &DT,
96     DomTreeBuilder::BBPostDomTree::VerificationLevel VL);
97 
98 bool DominatorTree::invalidate(Function &F, const PreservedAnalyses &PA,
99                                FunctionAnalysisManager::Invalidator &) {
100   // Check whether the analysis, all analyses on functions, or the function's
101   // CFG have been preserved.
102   auto PAC = PA.getChecker<DominatorTreeAnalysis>();
103   return !(PAC.preserved() || PAC.preservedSet<AllAnalysesOn<Function>>() ||
104            PAC.preservedSet<CFGAnalyses>());
105 }
106 
107 // dominates - Return true if Def dominates a use in User. This performs
108 // the special checks necessary if Def and User are in the same basic block.
109 // Note that Def doesn't dominate a use in Def itself!
110 bool DominatorTree::dominates(const Instruction *Def,
111                               const Instruction *User) const {
112   const BasicBlock *UseBB = User->getParent();
113   const BasicBlock *DefBB = Def->getParent();
114 
115   // Any unreachable use is dominated, even if Def == User.
116   if (!isReachableFromEntry(UseBB))
117     return true;
118 
119   // Unreachable definitions don't dominate anything.
120   if (!isReachableFromEntry(DefBB))
121     return false;
122 
123   // An instruction doesn't dominate a use in itself.
124   if (Def == User)
125     return false;
126 
127   // The value defined by an invoke dominates an instruction only if it
128   // dominates every instruction in UseBB.
129   // A PHI is dominated only if the instruction dominates every possible use in
130   // the UseBB.
131   if (isa<InvokeInst>(Def) || isa<PHINode>(User))
132     return dominates(Def, UseBB);
133 
134   if (DefBB != UseBB)
135     return dominates(DefBB, UseBB);
136 
137   // Loop through the basic block until we find Def or User.
138   BasicBlock::const_iterator I = DefBB->begin();
139   for (; &*I != Def && &*I != User; ++I)
140     /*empty*/;
141 
142   return &*I == Def;
143 }
144 
145 // true if Def would dominate a use in any instruction in UseBB.
146 // note that dominates(Def, Def->getParent()) is false.
147 bool DominatorTree::dominates(const Instruction *Def,
148                               const BasicBlock *UseBB) const {
149   const BasicBlock *DefBB = Def->getParent();
150 
151   // Any unreachable use is dominated, even if DefBB == UseBB.
152   if (!isReachableFromEntry(UseBB))
153     return true;
154 
155   // Unreachable definitions don't dominate anything.
156   if (!isReachableFromEntry(DefBB))
157     return false;
158 
159   if (DefBB == UseBB)
160     return false;
161 
162   // Invoke results are only usable in the normal destination, not in the
163   // exceptional destination.
164   if (const auto *II = dyn_cast<InvokeInst>(Def)) {
165     BasicBlock *NormalDest = II->getNormalDest();
166     BasicBlockEdge E(DefBB, NormalDest);
167     return dominates(E, UseBB);
168   }
169 
170   return dominates(DefBB, UseBB);
171 }
172 
173 bool DominatorTree::dominates(const BasicBlockEdge &BBE,
174                               const BasicBlock *UseBB) const {
175   // If the BB the edge ends in doesn't dominate the use BB, then the
176   // edge also doesn't.
177   const BasicBlock *Start = BBE.getStart();
178   const BasicBlock *End = BBE.getEnd();
179   if (!dominates(End, UseBB))
180     return false;
181 
182   // Simple case: if the end BB has a single predecessor, the fact that it
183   // dominates the use block implies that the edge also does.
184   if (End->getSinglePredecessor())
185     return true;
186 
187   // The normal edge from the invoke is critical. Conceptually, what we would
188   // like to do is split it and check if the new block dominates the use.
189   // With X being the new block, the graph would look like:
190   //
191   //        DefBB
192   //          /\      .  .
193   //         /  \     .  .
194   //        /    \    .  .
195   //       /      \   |  |
196   //      A        X  B  C
197   //      |         \ | /
198   //      .          \|/
199   //      .      NormalDest
200   //      .
201   //
202   // Given the definition of dominance, NormalDest is dominated by X iff X
203   // dominates all of NormalDest's predecessors (X, B, C in the example). X
204   // trivially dominates itself, so we only have to find if it dominates the
205   // other predecessors. Since the only way out of X is via NormalDest, X can
206   // only properly dominate a node if NormalDest dominates that node too.
207   int IsDuplicateEdge = 0;
208   for (const_pred_iterator PI = pred_begin(End), E = pred_end(End);
209        PI != E; ++PI) {
210     const BasicBlock *BB = *PI;
211     if (BB == Start) {
212       // If there are multiple edges between Start and End, by definition they
213       // can't dominate anything.
214       if (IsDuplicateEdge++)
215         return false;
216       continue;
217     }
218 
219     if (!dominates(End, BB))
220       return false;
221   }
222   return true;
223 }
224 
225 bool DominatorTree::dominates(const BasicBlockEdge &BBE, const Use &U) const {
226   Instruction *UserInst = cast<Instruction>(U.getUser());
227   // A PHI in the end of the edge is dominated by it.
228   PHINode *PN = dyn_cast<PHINode>(UserInst);
229   if (PN && PN->getParent() == BBE.getEnd() &&
230       PN->getIncomingBlock(U) == BBE.getStart())
231     return true;
232 
233   // Otherwise use the edge-dominates-block query, which
234   // handles the crazy critical edge cases properly.
235   const BasicBlock *UseBB;
236   if (PN)
237     UseBB = PN->getIncomingBlock(U);
238   else
239     UseBB = UserInst->getParent();
240   return dominates(BBE, UseBB);
241 }
242 
243 bool DominatorTree::dominates(const Instruction *Def, const Use &U) const {
244   Instruction *UserInst = cast<Instruction>(U.getUser());
245   const BasicBlock *DefBB = Def->getParent();
246 
247   // Determine the block in which the use happens. PHI nodes use
248   // their operands on edges; simulate this by thinking of the use
249   // happening at the end of the predecessor block.
250   const BasicBlock *UseBB;
251   if (PHINode *PN = dyn_cast<PHINode>(UserInst))
252     UseBB = PN->getIncomingBlock(U);
253   else
254     UseBB = UserInst->getParent();
255 
256   // Any unreachable use is dominated, even if Def == User.
257   if (!isReachableFromEntry(UseBB))
258     return true;
259 
260   // Unreachable definitions don't dominate anything.
261   if (!isReachableFromEntry(DefBB))
262     return false;
263 
264   // Invoke instructions define their return values on the edges to their normal
265   // successors, so we have to handle them specially.
266   // Among other things, this means they don't dominate anything in
267   // their own block, except possibly a phi, so we don't need to
268   // walk the block in any case.
269   if (const InvokeInst *II = dyn_cast<InvokeInst>(Def)) {
270     BasicBlock *NormalDest = II->getNormalDest();
271     BasicBlockEdge E(DefBB, NormalDest);
272     return dominates(E, U);
273   }
274 
275   // If the def and use are in different blocks, do a simple CFG dominator
276   // tree query.
277   if (DefBB != UseBB)
278     return dominates(DefBB, UseBB);
279 
280   // Ok, def and use are in the same block. If the def is an invoke, it
281   // doesn't dominate anything in the block. If it's a PHI, it dominates
282   // everything in the block.
283   if (isa<PHINode>(UserInst))
284     return true;
285 
286   // Otherwise, just loop through the basic block until we find Def or User.
287   BasicBlock::const_iterator I = DefBB->begin();
288   for (; &*I != Def && &*I != UserInst; ++I)
289     /*empty*/;
290 
291   return &*I != UserInst;
292 }
293 
294 bool DominatorTree::isReachableFromEntry(const Use &U) const {
295   Instruction *I = dyn_cast<Instruction>(U.getUser());
296 
297   // ConstantExprs aren't really reachable from the entry block, but they
298   // don't need to be treated like unreachable code either.
299   if (!I) return true;
300 
301   // PHI nodes use their operands on their incoming edges.
302   if (PHINode *PN = dyn_cast<PHINode>(I))
303     return isReachableFromEntry(PN->getIncomingBlock(U));
304 
305   // Everything else uses their operands in their own block.
306   return isReachableFromEntry(I->getParent());
307 }
308 
309 void DominatorTree::verifyDomTree() const {
310   // Perform the expensive checks only when VerifyDomInfo is set.
311   VerificationLevel VL = VerificationLevel::Fast;
312   if (VerifyDomInfo)
313     VL = VerificationLevel::Full;
314   else if (ExpensiveChecksEnabled)
315     VL = VerificationLevel::Basic;
316 
317   if (!verify(VL)) {
318     errs() << "\n~~~~~~~~~~~\n\t\tDomTree verification failed!\n~~~~~~~~~~~\n";
319     errs() << "\nCFG:\n";
320     getRoot()->getParent()->print(errs());
321     errs().flush();
322     abort();
323   }
324 }
325 
326 //===----------------------------------------------------------------------===//
327 //  DominatorTreeAnalysis and related pass implementations
328 //===----------------------------------------------------------------------===//
329 //
330 // This implements the DominatorTreeAnalysis which is used with the new pass
331 // manager. It also implements some methods from utility passes.
332 //
333 //===----------------------------------------------------------------------===//
334 
335 DominatorTree DominatorTreeAnalysis::run(Function &F,
336                                          FunctionAnalysisManager &) {
337   DominatorTree DT;
338   DT.recalculate(F);
339   return DT;
340 }
341 
342 AnalysisKey DominatorTreeAnalysis::Key;
343 
344 DominatorTreePrinterPass::DominatorTreePrinterPass(raw_ostream &OS) : OS(OS) {}
345 
346 PreservedAnalyses DominatorTreePrinterPass::run(Function &F,
347                                                 FunctionAnalysisManager &AM) {
348   OS << "DominatorTree for function: " << F.getName() << "\n";
349   AM.getResult<DominatorTreeAnalysis>(F).print(OS);
350 
351   return PreservedAnalyses::all();
352 }
353 
354 PreservedAnalyses DominatorTreeVerifierPass::run(Function &F,
355                                                  FunctionAnalysisManager &AM) {
356   AM.getResult<DominatorTreeAnalysis>(F).verifyDomTree();
357 
358   return PreservedAnalyses::all();
359 }
360 
361 //===----------------------------------------------------------------------===//
362 //  DominatorTreeWrapperPass Implementation
363 //===----------------------------------------------------------------------===//
364 //
365 // The implementation details of the wrapper pass that holds a DominatorTree
366 // suitable for use with the legacy pass manager.
367 //
368 //===----------------------------------------------------------------------===//
369 
370 char DominatorTreeWrapperPass::ID = 0;
371 INITIALIZE_PASS(DominatorTreeWrapperPass, "domtree",
372                 "Dominator Tree Construction", true, true)
373 
374 bool DominatorTreeWrapperPass::runOnFunction(Function &F) {
375   DT.recalculate(F);
376   return false;
377 }
378 
379 void DominatorTreeWrapperPass::verifyAnalysis() const {
380   if (ExpensiveChecksEnabled || VerifyDomInfo)
381     DT.verifyDomTree();
382 }
383 
384 void DominatorTreeWrapperPass::print(raw_ostream &OS, const Module *) const {
385   DT.print(OS);
386 }
387 
388 //===----------------------------------------------------------------------===//
389 //  DeferredDominance Implementation
390 //===----------------------------------------------------------------------===//
391 //
392 // The implementation details of the DeferredDominance class which allows
393 // one to queue updates to a DominatorTree.
394 //
395 //===----------------------------------------------------------------------===//
396 
397 /// \brief Queues multiple updates and discards duplicates.
398 void DeferredDominance::applyUpdates(
399     ArrayRef<DominatorTree::UpdateType> Updates) {
400   SmallVector<DominatorTree::UpdateType, 8> Seen;
401   for (auto U : Updates)
402     // Avoid duplicates to applyUpdate() to save on analysis.
403     if (std::none_of(Seen.begin(), Seen.end(),
404                      [U](DominatorTree::UpdateType S) { return S == U; })) {
405       Seen.push_back(U);
406       applyUpdate(U.getKind(), U.getFrom(), U.getTo());
407     }
408 }
409 
410 /// \brief Helper method for a single edge insertion. It's almost always better
411 /// to batch updates and call applyUpdates to quickly remove duplicate edges.
412 /// This is best used when there is only a single insertion needed to update
413 /// Dominators.
414 void DeferredDominance::insertEdge(BasicBlock *From, BasicBlock *To) {
415   applyUpdate(DominatorTree::Insert, From, To);
416 }
417 
418 /// \brief Helper method for a single edge deletion. It's almost always better
419 /// to batch updates and call applyUpdates to quickly remove duplicate edges.
420 /// This is best used when there is only a single deletion needed to update
421 /// Dominators.
422 void DeferredDominance::deleteEdge(BasicBlock *From, BasicBlock *To) {
423   applyUpdate(DominatorTree::Delete, From, To);
424 }
425 
426 /// \brief Delays the deletion of a basic block until a flush() event.
427 void DeferredDominance::deleteBB(BasicBlock *DelBB) {
428   assert(DelBB && "Invalid push_back of nullptr DelBB.");
429   assert(pred_empty(DelBB) && "DelBB has one or more predecessors.");
430   // DelBB is unreachable and all its instructions are dead.
431   while (!DelBB->empty()) {
432     Instruction &I = DelBB->back();
433     // Replace used instructions with an arbitrary value (undef).
434     if (!I.use_empty())
435       I.replaceAllUsesWith(llvm::UndefValue::get(I.getType()));
436     DelBB->getInstList().pop_back();
437   }
438   // Make sure DelBB has a valid terminator instruction. As long as DelBB is a
439   // Child of Function F it must contain valid IR.
440   new UnreachableInst(DelBB->getContext(), DelBB);
441   DeletedBBs.insert(DelBB);
442 }
443 
444 /// \brief Returns true if DelBB is awaiting deletion at a flush() event.
445 bool DeferredDominance::pendingDeletedBB(BasicBlock *DelBB) {
446   if (DeletedBBs.empty())
447     return false;
448   return DeletedBBs.count(DelBB) != 0;
449 }
450 
451 /// \brief Flushes all pending updates and block deletions. Returns a
452 /// correct DominatorTree reference to be used by the caller for analysis.
453 DominatorTree &DeferredDominance::flush() {
454   // Updates to DT must happen before blocks are deleted below. Otherwise the
455   // DT traversal will encounter badref blocks and assert.
456   if (!PendUpdates.empty()) {
457     DT.applyUpdates(PendUpdates);
458     PendUpdates.clear();
459   }
460   flushDelBB();
461   return DT;
462 }
463 
464 /// \brief Drops all internal state and forces a (slow) recalculation of the
465 /// DominatorTree based on the current state of the LLVM IR in F. This should
466 /// only be used in corner cases such as the Entry block of F being deleted.
467 void DeferredDominance::recalculate(Function &F) {
468   // flushDelBB must be flushed before the recalculation. The state of the IR
469   // must be consistent before the DT traversal algorithm determines the
470   // actual DT.
471   if (flushDelBB() || !PendUpdates.empty()) {
472     DT.recalculate(F);
473     PendUpdates.clear();
474   }
475 }
476 
477 /// \brief Debug method to help view the state of pending updates.
478 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
479 LLVM_DUMP_METHOD void DeferredDominance::dump() const {
480   raw_ostream &OS = llvm::dbgs();
481   OS << "PendUpdates:\n";
482   int I = 0;
483   for (auto U : PendUpdates) {
484     OS << "  " << I << " : ";
485     ++I;
486     if (U.getKind() == DominatorTree::Insert)
487       OS << "Insert, ";
488     else
489       OS << "Delete, ";
490     BasicBlock *From = U.getFrom();
491     if (From) {
492       auto S = From->getName();
493       if (!From->hasName())
494         S = "(no name)";
495       OS << S << "(" << From << "), ";
496     } else {
497       OS << "(badref), ";
498     }
499     BasicBlock *To = U.getTo();
500     if (To) {
501       auto S = To->getName();
502       if (!To->hasName())
503         S = "(no_name)";
504       OS << S << "(" << To << ")\n";
505     } else {
506       OS << "(badref)\n";
507     }
508   }
509   OS << "DeletedBBs:\n";
510   I = 0;
511   for (auto BB : DeletedBBs) {
512     OS << "  " << I << " : ";
513     ++I;
514     if (BB->hasName())
515       OS << BB->getName() << "(";
516     else
517       OS << "(no_name)(";
518     OS << BB << ")\n";
519   }
520 }
521 #endif
522 
523 /// Apply an update (Kind, From, To) to the internal queued updates. The
524 /// update is only added when determined to be necessary. Checks for
525 /// self-domination, unnecessary updates, duplicate requests, and balanced
526 /// pairs of requests are all performed. Returns true if the update is
527 /// queued and false if it is discarded.
528 bool DeferredDominance::applyUpdate(DominatorTree::UpdateKind Kind,
529                                     BasicBlock *From, BasicBlock *To) {
530   if (From == To)
531     return false; // Cannot dominate self; discard update.
532 
533   // Discard updates by inspecting the current state of successors of From.
534   // Since applyUpdate() must be called *after* the Terminator of From is
535   // altered we can determine if the update is unnecessary.
536   bool HasEdge = std::any_of(succ_begin(From), succ_end(From),
537                              [To](BasicBlock *B) { return B == To; });
538   if (Kind == DominatorTree::Insert && !HasEdge)
539     return false; // Unnecessary Insert: edge does not exist in IR.
540   if (Kind == DominatorTree::Delete && HasEdge)
541     return false; // Unnecessary Delete: edge still exists in IR.
542 
543   // Analyze pending updates to determine if the update is unnecessary.
544   DominatorTree::UpdateType Update = {Kind, From, To};
545   DominatorTree::UpdateType Invert = {Kind != DominatorTree::Insert
546                                           ? DominatorTree::Insert
547                                           : DominatorTree::Delete,
548                                       From, To};
549   for (auto I = PendUpdates.begin(), E = PendUpdates.end(); I != E; ++I) {
550     if (Update == *I)
551       return false; // Discard duplicate updates.
552     if (Invert == *I) {
553       // Update and Invert are both valid (equivalent to a no-op). Remove
554       // Invert from PendUpdates and discard the Update.
555       PendUpdates.erase(I);
556       return false;
557     }
558   }
559   PendUpdates.push_back(Update); // Save the valid update.
560   return true;
561 }
562 
563 /// Performs all pending basic block deletions. We have to defer the deletion
564 /// of these blocks until after the DominatorTree updates are applied. The
565 /// internal workings of the DominatorTree code expect every update's From
566 /// and To blocks to exist and to be a member of the same Function.
567 bool DeferredDominance::flushDelBB() {
568   if (DeletedBBs.empty())
569     return false;
570   for (auto *BB : DeletedBBs)
571     BB->eraseFromParent();
572   DeletedBBs.clear();
573   return true;
574 }
575