[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