#ifndef LLVM_IR_DOMINATORS_H
#define LLVM_IR_DOMINATORS_H
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/ADT/ilist_iterator.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Use.h"
#include "llvm/Pass.h"
#include "llvm/Support/CFGDiff.h"
#include "llvm/Support/CFGUpdate.h"
#include "llvm/Support/GenericDomTree.h"
#include <algorithm>
#include <utility>
namespace llvm {
class Function;
class Instruction;
class Module;
class Value;
class raw_ostream;
template <class GraphType> struct GraphTraits;
extern template class DomTreeNodeBase<BasicBlock>;
extern template class DominatorTreeBase<BasicBlock, false>;
extern template class DominatorTreeBase<BasicBlock, true>;
extern template class cfg::Update<BasicBlock *>;
namespace DomTreeBuilder {
BBDomTree;
BBPostDomTree;
BBUpdates;
BBDomTreeGraphDiff;
BBPostDomTreeGraphDiff;
extern template void Calculate<BBDomTree>(BBDomTree &DT);
extern template void CalculateWithUpdates<BBDomTree>(BBDomTree &DT,
BBUpdates U);
extern template void Calculate<BBPostDomTree>(BBPostDomTree &DT);
extern template void InsertEdge<BBDomTree>(BBDomTree &DT, BasicBlock *From,
BasicBlock *To);
extern template void InsertEdge<BBPostDomTree>(BBPostDomTree &DT,
BasicBlock *From,
BasicBlock *To);
extern template void DeleteEdge<BBDomTree>(BBDomTree &DT, BasicBlock *From,
BasicBlock *To);
extern template void DeleteEdge<BBPostDomTree>(BBPostDomTree &DT,
BasicBlock *From,
BasicBlock *To);
extern template void ApplyUpdates<BBDomTree>(BBDomTree &DT,
BBDomTreeGraphDiff &,
BBDomTreeGraphDiff *);
extern template void ApplyUpdates<BBPostDomTree>(BBPostDomTree &DT,
BBPostDomTreeGraphDiff &,
BBPostDomTreeGraphDiff *);
extern template bool Verify<BBDomTree>(const BBDomTree &DT,
BBDomTree::VerificationLevel VL);
extern template bool Verify<BBPostDomTree>(const BBPostDomTree &DT,
BBPostDomTree::VerificationLevel VL);
}
DomTreeNode;
class BasicBlockEdge { … };
template <> struct DenseMapInfo<BasicBlockEdge> { … };
class DominatorTree : public DominatorTreeBase<BasicBlock, false> { … };
template <class Node, class ChildIterator> struct DomTreeGraphTraitsBase { … };
template <>
struct GraphTraits<DomTreeNode *>
: public DomTreeGraphTraitsBase<DomTreeNode, DomTreeNode::const_iterator> { … };
template <>
struct GraphTraits<const DomTreeNode *>
: public DomTreeGraphTraitsBase<const DomTreeNode,
DomTreeNode::const_iterator> { … };
template <> struct GraphTraits<DominatorTree*>
: public GraphTraits<DomTreeNode*> { … };
class DominatorTreeAnalysis : public AnalysisInfoMixin<DominatorTreeAnalysis> { … };
class DominatorTreePrinterPass
: public PassInfoMixin<DominatorTreePrinterPass> { … };
struct DominatorTreeVerifierPass : PassInfoMixin<DominatorTreeVerifierPass> { … };
extern bool VerifyDomInfo;
class DominatorTreeWrapperPass : public FunctionPass { … };
}
#endif