summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorKyle Butt <kyle+llvm@iteratee.net>2016-08-17 21:07:35 +0000
committerKyle Butt <kyle+llvm@iteratee.net>2016-08-17 21:07:35 +0000
commitdb3391ebe0eaaad8973090cade201478632b72cd (patch)
treede26c128bfda263027a646124d75f443d937855f /llvm
parentfeafec588fcb7d6fbfec6002ea353dc05cdd0aab (diff)
downloadbcm5719-llvm-db3391ebe0eaaad8973090cade201478632b72cd.tar.gz
bcm5719-llvm-db3391ebe0eaaad8973090cade201478632b72cd.zip
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
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/CodeGen/TailDuplicator.h6
-rw-r--r--llvm/lib/CodeGen/TailDuplicator.cpp12
2 files changed, 13 insertions, 5 deletions
diff --git a/llvm/include/llvm/CodeGen/TailDuplicator.h b/llvm/include/llvm/CodeGen/TailDuplicator.h
index 6e2860d3ff2..17412f1b022 100644
--- a/llvm/include/llvm/CodeGen/TailDuplicator.h
+++ b/llvm/include/llvm/CodeGen/TailDuplicator.h
@@ -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,
diff --git a/llvm/lib/CodeGen/TailDuplicator.cpp b/llvm/lib/CodeGen/TailDuplicator.cpp
index ec8e48d0de0..a93d13c65ce 100644
--- a/llvm/lib/CodeGen/TailDuplicator.cpp
+++ b/llvm/lib/CodeGen/TailDuplicator.cpp
@@ -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.
OpenPOWER on IntegriCloud