[llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp

Chris Lattner lattner at cs.uiuc.edu
Sat Feb 14 18:16:01 PST 2004


Changes in directory llvm/lib/Target/X86:

X86RegisterInfo.cpp updated: 1.47 -> 1.48

---
Log message:

Fix the 'have a framepointer' case, so that the frame pointer always points 
to the old saved EBP.


---
Diffs of the changes:  (+10 -8)

Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.47 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.48
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.47	Sat Feb 14 14:11:07 2004
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp	Sat Feb 14 18:15:37 2004
@@ -144,6 +144,8 @@
 
   if (!hasFP(MF))
     Offset += MF.getFrameInfo()->getStackSize();
+  else
+    Offset += 4;  // Skip the saved EBP
 
   MI.SetMachineOperandConst(i+3, MachineOperand::MO_SignExtendedImmed, Offset);
 }
@@ -152,9 +154,9 @@
 X86RegisterInfo::processFunctionBeforeFrameFinalized(MachineFunction &MF) const{
   if (hasFP(MF)) {
     // Create a frame entry for the EBP register that must be saved.
-    int FrameIdx = MF.getFrameInfo()->CreateStackObject(4, 4);
-    assert(FrameIdx == MF.getFrameInfo()->getObjectIndexEnd()-1 &&
-	   "Slot for EBP register must be last in order to be found!");
+    int FrameIdx = MF.getFrameInfo()->CreateFixedObject(4, -8);
+    assert(FrameIdx == MF.getFrameInfo()->getObjectIndexBegin() &&
+           "Slot for EBP register must be last in order to be found!");
   }
 }
 
@@ -169,7 +171,7 @@
   if (hasFP(MF)) {
     // Get the offset of the stack slot for the EBP register... which is
     // guaranteed to be the last slot by processFunctionBeforeFrameFinalized.
-    int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexEnd()-1)+4;
+    int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexBegin())+4;
 
     if (NumBytes) {   // adjust stack pointer: ESP -= numbytes
       MI= BuildMI(X86::SUBri32, 1, X86::ESP, MOTy::UseAndDef).addZImm(NumBytes);
@@ -182,10 +184,10 @@
     MBB.insert(MBBI, MI);
 
     // Update EBP with the new base value...
-    if (NumBytes == 0)    // mov EBP, ESP
+    if (NumBytes == 4)    // mov EBP, ESP
       MI = BuildMI(X86::MOVrr32, 2, X86::EBP).addReg(X86::ESP);
     else                  // lea EBP, [ESP+StackSize]
-      MI = addRegOffset(BuildMI(X86::LEAr32, 5, X86::EBP), X86::ESP, NumBytes);
+      MI = addRegOffset(BuildMI(X86::LEAr32, 5, X86::EBP), X86::ESP,NumBytes-4);
 
     MBB.insert(MBBI, MI);
 
@@ -231,8 +233,8 @@
     MI = BuildMI(X86::MOVrr32, 1,X86::ESP).addReg(X86::EBP);
     MBB.insert(MBBI, MI);
 
-    // mov EBP, [ESP-<offset>]
-    MI = addRegOffset(BuildMI(X86::MOVmr32, 5, X86::EBP), X86::ESP, EBPOffset);
+    // pop EBP
+    MI = BuildMI(X86::POPr32, 0, X86::EBP);
     MBB.insert(MBBI, MI);
   } else {
     // Get the number of bytes allocated from the FrameInfo...





More information about the llvm-commits mailing list