10 #ifndef LLVM_CODEGEN_BRANCHFOLDING_HPP
11 #define LLVM_CODEGEN_BRANCHFOLDING_HPP
18 class MachineFunction;
19 class MachineModuleInfo;
21 class TargetInstrInfo;
22 class TargetRegisterInfo;
26 explicit BranchFolder(
bool defaultEnableTailMerge,
bool CommonHoist);
33 class MergePotentialsElt {
38 : Hash(h), Block(b) {}
40 unsigned getHash()
const {
return Hash; }
47 bool operator<(
const MergePotentialsElt &)
const;
49 typedef std::vector<MergePotentialsElt>::iterator MPIterator;
50 std::vector<MergePotentialsElt> MergePotentials;
58 : MPIter(mp), TailStartPos(tsp) {}
60 MPIterator getMPIter()
const {
63 MergePotentialsElt &getMergePotentialsElt()
const {
70 return getMergePotentialsElt().getHash();
73 return getMergePotentialsElt().getBlock();
75 bool tailIsWholeBlock()
const {
76 return TailStartPos == getBlock()->
begin();
80 getMergePotentialsElt().setBlock(MBB);
86 std::vector<SameTailElt> SameTails;
89 bool EnableHoistCommonCode;
105 unsigned ComputeSameTails(
unsigned CurHash,
unsigned minCommonTailLength,
112 unsigned maxCommonTailLength,
113 unsigned &commonTailIndex);
void operator<(const Optional< T > &X, const Optional< U > &Y)
Poison comparison between two Optional objects. Clients needs to explicitly compare the underlying va...
BranchFolder(bool defaultEnableTailMerge, bool CommonHoist)
bundle_iterator< MachineInstr, instr_iterator > iterator
LLVM Basic Block Representation.
static unsigned getHash(const void *V)
bool OptimizeFunction(MachineFunction &MF, const TargetInstrInfo *tii, const TargetRegisterInfo *tri, MachineModuleInfo *mmi)