summaryrefslogtreecommitdiff
path: root/lib/CodeGen/PHIElimination.cpp
diff options
context:
space:
mode:
authorSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-07 08:04:51 +0000
committerSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-07 08:04:51 +0000
commit1dd35b4c35ef149a48c511283331f49c04351cae (patch)
tree9ee91ff066a9ebf54d78d20af9b157b333a49340 /lib/CodeGen/PHIElimination.cpp
parent40289b041adb299e4474607066b69b89298e5f70 (diff)
downloadllvm-1dd35b4c35ef149a48c511283331f49c04351cae.tar.gz
llvm-1dd35b4c35ef149a48c511283331f49c04351cae.tar.bz2
llvm-1dd35b4c35ef149a48c511283331f49c04351cae.tar.xz
if the terminator is a branch depending upon the side effects of a
previous cmp; a copy can not be inserted here if the copy insn also has side effects. We don't have access to the attributes of copy insn here; so just play safe by finding a safe locations for branch terminators. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74898 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/PHIElimination.cpp')
-rw-r--r--lib/CodeGen/PHIElimination.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/CodeGen/PHIElimination.cpp b/lib/CodeGen/PHIElimination.cpp
index c5c76fc794..9adf97cde5 100644
--- a/lib/CodeGen/PHIElimination.cpp
+++ b/lib/CodeGen/PHIElimination.cpp
@@ -169,9 +169,15 @@ MachineBasicBlock::iterator PNE::FindCopyInsertPoint(MachineBasicBlock &MBB,
return MBB.begin();
// If this basic block does not contain an invoke, then control flow always
- // reaches the end of it, so place the copy there. The logic below works in
- // this case too, but is more expensive.
- if (!isa<InvokeInst>(MBB.getBasicBlock()->getTerminator()))
+ // reaches the end of it, so place the copy there.
+ // If the terminator is a branch depending upon the side effects of a
+ // previous cmp; a copy can not be inserted here if the copy insn also
+ // side effects. We don't have access to the attributes of copy insn here;
+ // so just play safe by finding a safe locations for branch terminators.
+ //
+ // The logic below works in this case too, but is more expensive.
+ const TerminatorInst *TermInst = MBB.getBasicBlock()->getTerminator();
+ if (!(isa<InvokeInst>(TermInst) || isa<BranchInst>(TermInst)))
return MBB.getFirstTerminator();
// Discover any definition/uses in this basic block.