#include "llvm/IR/Dominators.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/PassManager.h"
#include "llvm/InitializePasses.h"
#include "llvm/PassRegistry.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/GenericDomTreeConstruction.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
namespace llvm {
class Argument;
class Constant;
class Value;
}
usingnamespacellvm;
bool llvm::VerifyDomInfo = …;
static cl::opt<bool, true>
VerifyDomInfoX("verify-dom-info", cl::location(VerifyDomInfo), cl::Hidden,
cl::desc("Verify dominator info (time consuming)"));
#ifdef EXPENSIVE_CHECKS
static constexpr bool ExpensiveChecksEnabled = true;
#else
static constexpr bool ExpensiveChecksEnabled = …;
#endif
bool BasicBlockEdge::isSingleEdge() const { … }
template class llvm::DomTreeNodeBase<BasicBlock>;
template class llvm::DominatorTreeBase<BasicBlock, false>;
template class llvm::DominatorTreeBase<BasicBlock, true>;
template class llvm::cfg::Update<BasicBlock *>;
template void llvm::DomTreeBuilder::Calculate<DomTreeBuilder::BBDomTree>(
DomTreeBuilder::BBDomTree &DT);
template void
llvm::DomTreeBuilder::CalculateWithUpdates<DomTreeBuilder::BBDomTree>(
DomTreeBuilder::BBDomTree &DT, BBUpdates U);
template void llvm::DomTreeBuilder::Calculate<DomTreeBuilder::BBPostDomTree>(
DomTreeBuilder::BBPostDomTree &DT);
template void llvm::DomTreeBuilder::InsertEdge<DomTreeBuilder::BBDomTree>(
DomTreeBuilder::BBDomTree &DT, BasicBlock *From, BasicBlock *To);
template void llvm::DomTreeBuilder::InsertEdge<DomTreeBuilder::BBPostDomTree>(
DomTreeBuilder::BBPostDomTree &DT, BasicBlock *From, BasicBlock *To);
template void llvm::DomTreeBuilder::DeleteEdge<DomTreeBuilder::BBDomTree>(
DomTreeBuilder::BBDomTree &DT, BasicBlock *From, BasicBlock *To);
template void llvm::DomTreeBuilder::DeleteEdge<DomTreeBuilder::BBPostDomTree>(
DomTreeBuilder::BBPostDomTree &DT, BasicBlock *From, BasicBlock *To);
template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBDomTree>(
DomTreeBuilder::BBDomTree &DT, DomTreeBuilder::BBDomTreeGraphDiff &,
DomTreeBuilder::BBDomTreeGraphDiff *);
template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBPostDomTree>(
DomTreeBuilder::BBPostDomTree &DT, DomTreeBuilder::BBPostDomTreeGraphDiff &,
DomTreeBuilder::BBPostDomTreeGraphDiff *);
template bool llvm::DomTreeBuilder::Verify<DomTreeBuilder::BBDomTree>(
const DomTreeBuilder::BBDomTree &DT,
DomTreeBuilder::BBDomTree::VerificationLevel VL);
template bool llvm::DomTreeBuilder::Verify<DomTreeBuilder::BBPostDomTree>(
const DomTreeBuilder::BBPostDomTree &DT,
DomTreeBuilder::BBPostDomTree::VerificationLevel VL);
bool DominatorTree::invalidate(Function &F, const PreservedAnalyses &PA,
FunctionAnalysisManager::Invalidator &) { … }
bool DominatorTree::dominates(const BasicBlock *BB, const Use &U) const { … }
bool DominatorTree::dominates(const Value *DefV,
const Instruction *User) const { … }
bool DominatorTree::dominates(const Instruction *Def,
const BasicBlock *UseBB) const { … }
bool DominatorTree::dominates(const BasicBlockEdge &BBE,
const BasicBlock *UseBB) const { … }
bool DominatorTree::dominates(const BasicBlockEdge &BBE, const Use &U) const { … }
bool DominatorTree::dominates(const Value *DefV, const Use &U) const { … }
bool DominatorTree::isReachableFromEntry(const Use &U) const { … }
bool DominatorTree::dominates(const BasicBlockEdge &BBE1,
const BasicBlockEdge &BBE2) const { … }
Instruction *DominatorTree::findNearestCommonDominator(Instruction *I1,
Instruction *I2) const { … }
DominatorTree DominatorTreeAnalysis::run(Function &F,
FunctionAnalysisManager &) { … }
AnalysisKey DominatorTreeAnalysis::Key;
DominatorTreePrinterPass::DominatorTreePrinterPass(raw_ostream &OS) : … { … }
PreservedAnalyses DominatorTreePrinterPass::run(Function &F,
FunctionAnalysisManager &AM) { … }
PreservedAnalyses DominatorTreeVerifierPass::run(Function &F,
FunctionAnalysisManager &AM) { … }
char DominatorTreeWrapperPass::ID = …;
DominatorTreeWrapperPass::DominatorTreeWrapperPass() : … { … }
INITIALIZE_PASS(…)
bool DominatorTreeWrapperPass::runOnFunction(Function &F) { … }
void DominatorTreeWrapperPass::verifyAnalysis() const { … }
void DominatorTreeWrapperPass::print(raw_ostream &OS, const Module *) const { … }