20#define DEBUG_TYPE "funclet-layout"
37char FuncletLayout::ID = 0;
40 "Contiguously Lay Out Funclets",
false,
false)
48 if (FuncletMembership.
empty())
52 auto FuncletX = FuncletMembership.
find(&
X);
53 auto FuncletY = FuncletMembership.
find(&
Y);
54 assert(FuncletX != FuncletMembership.
end());
55 assert(FuncletY != FuncletMembership.
end());
56 return FuncletX->second < FuncletY->second;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
iterator find(const_arg_type_t< KeyT > Val)
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
Properties which a MachineFunction may have at a given point in time.
static LLVM_ABI PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI void initializeFuncletLayoutPass(PassRegistry &)
LLVM_ABI char & FuncletLayoutID
This pass lays out funclets contiguously.
DenseMap< const MachineBasicBlock *, int > getEHScopeMembership(const MachineFunction &MF)