OSDN Git Service

Don't skip over all "terminator" instructions when determining where to put the
authorBill Wendling <isanbard@gmail.com>
Fri, 31 Oct 2008 04:00:23 +0000 (04:00 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 31 Oct 2008 04:00:23 +0000 (04:00 +0000)
callee-saved restore code. It could skip over conditional jumps
accidentally. Instead, just skip the "return" instructions.

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

lib/CodeGen/PrologEpilogInserter.cpp
lib/Target/X86/X86RegisterInfo.cpp

index d3b0b11..2469c8e 100644 (file)
@@ -273,10 +273,10 @@ void PEI::saveCalleeSavedRegisters(MachineFunction &Fn) {
       MBB = FI;
       I = MBB->end(); --I;
 
-      // Skip over all terminator instructions, which are part of the return
+      // Skip over all "return" instructions, which are part of the return
       // sequence.
       MachineBasicBlock::iterator I2 = I;
-      while (I2 != MBB->begin() && (--I2)->getDesc().isTerminator())
+      while (I2 != MBB->begin() && (--I2)->getDesc().isReturn())
         I = I2;
 
       bool AtStart = I == MBB->begin();
index 97e1de7..9e9495d 100644 (file)
@@ -850,8 +850,7 @@ void X86RegisterInfo::emitEpilogue(MachineFunction &MF,
   while (MBBI != MBB.begin()) {
     MachineBasicBlock::iterator PI = prior(MBBI);
     unsigned Opc = PI->getOpcode();
-    if (Opc != X86::POP32r && Opc != X86::POP64r &&
-        !PI->getDesc().isTerminator())
+    if (Opc != X86::POP32r && Opc != X86::POP64r && !PI->getDesc().isReturn())
       break;
     --MBBI;
   }