From: Dale Johannesen Date: Mon, 12 May 2008 22:53:12 +0000 (+0000) Subject: Be more aggressive about tail-merging small blocks X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=30562b7d4403414936da0661d7c6bda392f26c59;p=oota-llvm.git Be more aggressive about tail-merging small blocks 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 --- diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index a8fee1c9ac3..1807f98cb13 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -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;