From 834b08af8d3d8fc6c76ac6ca40674565689e8d7f Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Wed, 18 Nov 2009 03:34:27 +0000 Subject: 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 --- lib/CodeGen/BranchFolding.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'lib/CodeGen/BranchFolding.cpp') diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index d344af06fd..94bfb7204b 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -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. -- cgit v1.2.3