diff options
author | Dale Johannesen <dalej@apple.com> | 2008-05-12 22:53:12 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2008-05-12 22:53:12 +0000 |
commit | 30562b7d4403414936da0661d7c6bda392f26c59 (patch) | |
tree | f497b39654063d9af4559f1c2db82a56210efcbf | |
parent | ae94dda61a045cb77681940ecc25aba0d2763f74 (diff) | |
download | external_llvm-30562b7d4403414936da0661d7c6bda392f26c59.zip external_llvm-30562b7d4403414936da0661d7c6bda392f26c59.tar.gz external_llvm-30562b7d4403414936da0661d7c6bda392f26c59.tar.bz2 |
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
-rw-r--r-- | lib/CodeGen/BranchFolding.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index a8fee1c..1807f98 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; |