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
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp
index d344af0..94bfb72 100644
--- a/lib/CodeGen/BranchFolding.cpp
+++ b/lib/CodeGen/BranchFolding.cpp
@@ -1033,12 +1033,13 @@
   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.