[llvm-commits] [llvm] r43381 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp

Anton Korobeynikov asl at math.spbu.ru
Fri Oct 26 02:13:24 PDT 2007


Author: asl
Date: Fri Oct 26 04:13:24 2007
New Revision: 43381

URL: http://llvm.org/viewvc/llvm-project?rev=43381&view=rev
Log:
Fix off-by-one stack offset computations (dwarf information) for callee-saved
registers in case, when FP pointer was eliminated. This should fixes misc. random
EH-related crahses, when stuff is compiled with -fomit-frame-pointer.
Thanks Duncan for nailing this bug!

Modified:
    llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp

Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=43381&r1=43380&r2=43381&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Fri Oct 26 04:13:24 2007
@@ -1816,10 +1816,11 @@
                            MFI->getObjectOffset(CSI[I].getFrameIdx()));
 
     // Calculate offsets
+    int64_t saveAreaOffset = (hasFP(MF) ? 3 : 2)*stackGrowth;
     for (unsigned I = 0, E = CSI.size(); I!=E; ++I) {
       int64_t Offset = MFI->getObjectOffset(CSI[I].getFrameIdx());
       unsigned Reg = CSI[I].getReg();
-      Offset = (MaxOffset-Offset+3*stackGrowth);
+      Offset = (MaxOffset-Offset+saveAreaOffset);
       MachineLocation CSDst(MachineLocation::VirtualFP, Offset);
       MachineLocation CSSrc(Reg);
       Moves.push_back(MachineMove(FrameLabelId, CSDst, CSSrc));





More information about the llvm-commits mailing list