#ifndef LLVM_CODEGEN_MACHINEDOMINATORS_H
#define LLVM_CODEGEN_MACHINEDOMINATORS_H
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBundleIterator.h"
#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/Support/GenericDomTree.h"
#include <cassert>
#include <memory>
#include <optional>
namespace llvm {
class AnalysisUsage;
class MachineFunction;
class Module;
class raw_ostream;
template <>
inline void DominatorTreeBase<MachineBasicBlock, false>::addRoot(
MachineBasicBlock *MBB) { … }
extern template class DomTreeNodeBase<MachineBasicBlock>;
extern template class DominatorTreeBase<MachineBasicBlock, false>;
MachineDomTreeNode;
namespace DomTreeBuilder {
MBBDomTree;
MBBUpdates;
MBBDomTreeGraphDiff;
extern template void Calculate<MBBDomTree>(MBBDomTree &DT);
extern template void CalculateWithUpdates<MBBDomTree>(MBBDomTree &DT,
MBBUpdates U);
extern template void InsertEdge<MBBDomTree>(MBBDomTree &DT,
MachineBasicBlock *From,
MachineBasicBlock *To);
extern template void DeleteEdge<MBBDomTree>(MBBDomTree &DT,
MachineBasicBlock *From,
MachineBasicBlock *To);
extern template void ApplyUpdates<MBBDomTree>(MBBDomTree &DT,
MBBDomTreeGraphDiff &,
MBBDomTreeGraphDiff *);
extern template bool Verify<MBBDomTree>(const MBBDomTree &DT,
MBBDomTree::VerificationLevel VL);
}
class MachineDominatorTree : public DomTreeBase<MachineBasicBlock> { … };
class MachineDominatorTreeAnalysis
: public AnalysisInfoMixin<MachineDominatorTreeAnalysis> { … };
class MachineDominatorTreePrinterPass
: public PassInfoMixin<MachineDominatorTreePrinterPass> { … };
class MachineDominatorTreeWrapperPass : public MachineFunctionPass { … };
template <class Node, class ChildIterator>
struct MachineDomTreeGraphTraitsBase { … };
template <class T> struct GraphTraits;
template <>
struct GraphTraits<MachineDomTreeNode *>
: public MachineDomTreeGraphTraitsBase<MachineDomTreeNode,
MachineDomTreeNode::const_iterator> { … };
template <>
struct GraphTraits<const MachineDomTreeNode *>
: public MachineDomTreeGraphTraitsBase<const MachineDomTreeNode,
MachineDomTreeNode::const_iterator> { … };
template <> struct GraphTraits<MachineDominatorTree*>
: public GraphTraits<MachineDomTreeNode *> { … };
}
#endif