diff options
author | Dale Johannesen <dalej@apple.com> | 2010-03-10 19:57:56 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2010-03-10 19:57:56 +0000 |
commit | 2cd9ffef6e74febd727f0b548c21ba3f4e5cd26f (patch) | |
tree | 6ec50135711e4202ac7539dfeb90d96a98ec202b | |
parent | bbf81d88116d23fb0776412b5916f7d0b8b3ca7e (diff) | |
download | external_llvm-2cd9ffef6e74febd727f0b548c21ba3f4e5cd26f.zip external_llvm-2cd9ffef6e74febd727f0b548c21ba3f4e5cd26f.tar.gz external_llvm-2cd9ffef6e74febd727f0b548c21ba3f4e5cd26f.tar.bz2 |
Fix another place where DEBUG_VALUE affected codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98181 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 889763a..7e27bf5 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -984,6 +984,17 @@ static bool IsEmptyBlock(MachineBasicBlock *MBB) { return true; } +// Blocks with only debug info and branches should be considered the same +// as blocks with only branches. +static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) { + MachineBasicBlock::iterator MBBI, MBBE; + for (MBBI = MBB->begin(), MBBE = MBB->end(); MBBI!=MBBE; ++MBBI) { + if (!MBBI->isDebugValue()) + break; + } + return (MBBI->getDesc().isBranch()); +} + /// IsBetterFallthrough - Return true if it would be clearly better to /// fall-through to MBB1 than to fall through into MBB2. This has to return /// a strict ordering, returning true for both (MBB1,MBB2) and (MBB2,MBB1) will @@ -1206,7 +1217,7 @@ ReoptimizeBlock: // If this branch is the only thing in its block, see if we can forward // other blocks across it. if (CurTBB && CurCond.empty() && CurFBB == 0 && - MBB->begin()->getDesc().isBranch() && CurTBB != MBB && + IsBranchOnlyBlock(MBB) && CurTBB != MBB && !MBB->hasAddressTaken()) { // This block may contain just an unconditional branch. Because there can // be 'non-branch terminators' in the block, try removing the branch and |