Add a target hook to allow changing the tail duplication limit based on the

contents of the block to be duplicated.  Use this for ARM Cortex A8/9 to
be more aggressive tail duplicating indirect branches, since it makes it
much more likely that they will be predicted in the branch target buffer.
Testcase coming soon.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89187 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bob Wilson
2009-11-18 03:34:27 +00:00
parent 5eea342673
commit 834b08af8d
6 changed files with 32 additions and 4 deletions

View File

@@ -1033,12 +1033,13 @@ bool BranchFolder::TailDuplicate(MachineBasicBlock *TailBB,
if (TailBB->isSuccessor(TailBB))
return false;
// Duplicate up to one less than the tail-merge threshold. When optimizing
// for size, duplicate only one, because one branch instruction can be
// eliminated to compensate for the duplication.
// Set the limit on the number of instructions to duplicate, with a default
// of one less than the tail-merge threshold. When optimizing for size,
// duplicate only one, because one branch instruction can be eliminated to
// compensate for the duplication.
unsigned MaxDuplicateCount =
MF.getFunction()->hasFnAttr(Attribute::OptimizeForSize) ?
1 : (TailMergeSize - 1);
1 : TII->TailDuplicationLimit(*TailBB, TailMergeSize - 1);
// Check the instructions in the block to determine whether tail-duplication
// is invalid or unlikely to be profitable.