Be more aggressive about tail-merging small blocks
authorDale Johannesen <dalej@apple.com>
Mon, 12 May 2008 22:53:12 +0000 (22:53 +0000)
committerDale Johannesen <dalej@apple.com>
Mon, 12 May 2008 22:53:12 +0000 (22:53 +0000)
if those blocks consist entirely of common instructions;
merging will not add an extra branch in this case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51006 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/BranchFolding.cpp

index a8fee1c9ac360f6ca51720c0db37a86c9c8472ad..1807f98cb139f3844efe4581219ee05e5a1c78af 100644 (file)
@@ -495,7 +495,18 @@ unsigned BranchFolder::ComputeSameTails(unsigned CurHash,
                                         CurMPIter->second,
                                         I->second,
                                         TrialBBI1, TrialBBI2);
-      if (CommonTailLen >= minCommonTailLength) {
+      // If we will have to split a block, there should be at least
+      // minCommonTailLength instructions in common; if not, at worst
+      // we will be replacing a fallthrough into the common tail with a
+      // branch, which at worst breaks even with falling through into
+      // the duplicated common tail, so 1 instruction in common is enough.
+      // We will always pick a block we do not have to split as the common
+      // tail if there is one.
+      // (Empty blocks will get forwarded and need not be considered.)
+      if (CommonTailLen >= minCommonTailLength ||
+          (CommonTailLen > 0 &&
+           (TrialBBI1==CurMPIter->second->begin() ||
+            TrialBBI2==I->second->begin()))) {
         if (CommonTailLen > maxCommonTailLength) {
           SameTails.clear();
           maxCommonTailLength = CommonTailLen;