[llvm-commits] [llvm] r125523 - /llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp
Evan Cheng
evan.cheng at apple.com
Mon Feb 14 13:50:37 PST 2011
Author: evancheng
Date: Mon Feb 14 15:50:37 2011
New Revision: 125523
URL: http://llvm.org/viewvc/llvm-project?rev=125523&view=rev
Log:
Fix PR8854. Track inserted copies to avoid read before write. Sorry, it's hard to reduce a sensible small test case.
Modified:
llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp
Modified: llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp?rev=125523&r1=125522&r2=125523&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp (original)
+++ llvm/trunk/lib/CodeGen/PeepholeOptimizer.cpp Mon Feb 14 15:50:37 2011
@@ -331,25 +331,37 @@
ImmDefRegs.clear();
ImmDefMIs.clear();
+ MachineBasicBlock::iterator PMII = I->begin();
for (MachineBasicBlock::iterator
MII = I->begin(), MIE = I->end(); MII != MIE; ) {
- MachineInstr *MI = &*MII++;
+ MachineInstr *MI = &*MII;
LocalMIs.insert(MI);
if (MI->isLabel() || MI->isPHI() || MI->isImplicitDef() ||
MI->isKill() || MI->isInlineAsm() || MI->isDebugValue() ||
- MI->hasUnmodeledSideEffects())
+ MI->hasUnmodeledSideEffects()) {
+ ++MII;
continue;
+ }
if (MI->getDesc().isCompare()) {
- Changed |= OptimizeCmpInstr(MI, MBB);
- } else if (isMoveImmediate(MI, ImmDefRegs, ImmDefMIs)) {
+ if (OptimizeCmpInstr(MI, MBB)) {
+ // MI is deleted.
+ Changed = true;
+ MII = llvm::next(PMII);
+ continue;
+ }
+ }
+
+ if (isMoveImmediate(MI, ImmDefRegs, ImmDefMIs)) {
SeenMoveImm = true;
} else {
Changed |= OptimizeExtInstr(MI, MBB, LocalMIs);
if (SeenMoveImm)
Changed |= FoldImmediate(MI, MBB, ImmDefRegs, ImmDefMIs);
}
+ PMII = MII;
+ ++MII;
}
}
More information about the llvm-commits
mailing list