OSDN Git Service

Fix PEI to not walk off the start of a block when an updated instruction
authorChris Lattner <sabre@nondot.org>
Thu, 19 Mar 2009 17:15:43 +0000 (17:15 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 19 Mar 2009 17:15:43 +0000 (17:15 +0000)
is the first in its block.  This is PR3842.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67304 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/PrologEpilogInserter.cpp

index 39f9613..ab63f49 100644 (file)
@@ -533,11 +533,15 @@ void PEI::replaceFrameIndices(MachineFunction &Fn) {
 
         SPAdj += Size;
 
-        MachineBasicBlock::iterator PrevI = prior(I);
+        MachineBasicBlock::iterator PrevI = BB->end();
+        if (I != BB->begin()) PrevI = prior(I);
         TRI.eliminateCallFramePseudoInstr(Fn, *BB, I);
 
         // Visit the instructions created by eliminateCallFramePseudoInstr().
-        I = next(PrevI);
+        if (PrevI == BB->end())
+          I = BB->begin();     // The replaced instr was the first in the block.
+        else
+          I = next(PrevI);
         continue;
       }