forked from OSchip/llvm-project
Tail Duplication: Accept explicit threshold for duplicating.
This will allow tail duplication and tail merging during layout to have a shared threshold to make sure that they don't overlap. No observable change intended. llvm-svn: 278981
This commit is contained in:
parent
feafec588f
commit
db3391ebe0
|
@ -34,6 +34,7 @@ class TailDuplicator {
|
|||
const MachineModuleInfo *MMI;
|
||||
MachineRegisterInfo *MRI;
|
||||
bool PreRegAlloc;
|
||||
unsigned TailDupSize;
|
||||
|
||||
// A list of virtual registers for which to update SSA form.
|
||||
SmallVector<unsigned, 16> SSAUpdateVRs;
|
||||
|
@ -45,8 +46,11 @@ class TailDuplicator {
|
|||
DenseMap<unsigned, AvailableValsTy> SSAUpdateVals;
|
||||
|
||||
public:
|
||||
/// Prepare to run on a specific machine function.
|
||||
/// @param TailDupSize - Maxmimum size of blocks to tail-duplicate.
|
||||
void initMF(MachineFunction &MF, const MachineModuleInfo *MMI,
|
||||
const MachineBranchProbabilityInfo *MBPI);
|
||||
const MachineBranchProbabilityInfo *MBPI,
|
||||
unsigned TailDupSize = 0);
|
||||
bool tailDuplicateBlocks(MachineFunction &MF);
|
||||
static bool isSimpleBB(MachineBasicBlock *TailBB);
|
||||
bool shouldTailDuplicate(const MachineFunction &MF, bool IsSimple,
|
||||
|
|
|
@ -57,12 +57,14 @@ static cl::opt<unsigned> TailDupLimit("tail-dup-limit", cl::init(~0U),
|
|||
namespace llvm {
|
||||
|
||||
void TailDuplicator::initMF(MachineFunction &MF, const MachineModuleInfo *MMIin,
|
||||
const MachineBranchProbabilityInfo *MBPIin) {
|
||||
const MachineBranchProbabilityInfo *MBPIin,
|
||||
unsigned TailDupSizeIn) {
|
||||
TII = MF.getSubtarget().getInstrInfo();
|
||||
TRI = MF.getSubtarget().getRegisterInfo();
|
||||
MRI = &MF.getRegInfo();
|
||||
MMI = MMIin;
|
||||
MBPI = MBPIin;
|
||||
TailDupSize = TailDupSizeIn;
|
||||
|
||||
assert(MBPI != nullptr && "Machine Branch Probability Info required");
|
||||
|
||||
|
@ -511,12 +513,14 @@ bool TailDuplicator::shouldTailDuplicate(const MachineFunction &MF,
|
|||
// duplicate only one, because one branch instruction can be eliminated to
|
||||
// compensate for the duplication.
|
||||
unsigned MaxDuplicateCount;
|
||||
if (TailDuplicateSize.getNumOccurrences() == 0 &&
|
||||
// FIXME: Use Function::optForSize().
|
||||
if (TailDupSize == 0 &&
|
||||
TailDuplicateSize.getNumOccurrences() == 0 &&
|
||||
MF.getFunction()->optForSize())
|
||||
MaxDuplicateCount = 1;
|
||||
else
|
||||
else if (TailDupSize == 0)
|
||||
MaxDuplicateCount = TailDuplicateSize;
|
||||
else
|
||||
MaxDuplicateCount = TailDupSize;
|
||||
|
||||
// If the block to be duplicated ends in an unanalyzable fallthrough, don't
|
||||
// duplicate it.
|
||||
|
|
Loading…
Reference in New Issue