15 #ifndef LLVM_CODEGEN_TAILDUPLICATOR_H 16 #define LLVM_CODEGEN_TAILDUPLICATOR_H 28 class MachineBasicBlock;
29 class MachineBranchProbabilityInfo;
30 class MachineFunction;
32 class MachineModuleInfo;
33 class MachineRegisterInfo;
34 class TargetRegisterInfo;
53 using AvailableValsTy = std::vector<std::pair<MachineBasicBlock *, unsigned>>;
69 bool LayoutMode,
unsigned TailDupSize = 0);
93 void addSSAUpdateEntry(
unsigned OrigReg,
unsigned NewReg,
112 bool tailDuplicate(
bool IsSimple,
121 void removeDeadBlock(
128 #endif // LLVM_CODEGEN_TAILDUPLICATOR_H bool shouldTailDuplicate(bool IsSimple, MachineBasicBlock &TailBB)
Determine if it is profitable to duplicate this block.
This class represents lattice values for constants.
An efficient, type-erasing, non-owning reference to a callable.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
bool tailDuplicateBlocks()
Look for small blocks that are unconditionally branched to and do not fall through.
void initMF(MachineFunction &MF, bool PreRegAlloc, const MachineBranchProbabilityInfo *MBPI, bool LayoutMode, unsigned TailDupSize=0)
Prepare to run on a specific machine function.
TargetInstrInfo - Interface to description of machine instruction set.
static bool isSimpleBB(MachineBasicBlock *TailBB)
True if this BB has only one unconditional jump.
TargetInstrInfo::RegSubRegPair RegSubRegPair
bool tailDuplicateAndUpdate(bool IsSimple, MachineBasicBlock *MBB, MachineBasicBlock *ForcedLayoutPred, SmallVectorImpl< MachineBasicBlock *> *DuplicatedPreds=nullptr, function_ref< void(MachineBasicBlock *)> *RemovalCallback=nullptr)
Tail duplicate a single basic block into its predecessors, and then clean up.
bool canTailDuplicate(MachineBasicBlock *TailBB, MachineBasicBlock *PredBB)
Returns true if TailBB can successfully be duplicated into PredBB.
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
A SetVector that performs no allocations if smaller than a certain size.
A pair composed of a register and a sub-register index.
MachineRegisterInfo - Keep track of information for virtual and physical registers, including vreg register classes, use/def chains for registers, etc.
Representation of each machine instruction.
Utility class to perform tail duplication.
This class contains meta information specific to a module.