[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp

Jim Laskey jlaskey at apple.com
Tue Aug 29 09:24:40 PDT 2006



Changes in directory llvm/lib/Target/PowerPC:

PPCRegisterInfo.cpp updated: 1.74 -> 1.75
---
Log message:

Handle callee saved registers in dwarf frame info (lead up to exception
handling.)


---
Diffs of the changes:  (+13 -6)

 PPCRegisterInfo.cpp |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
diff -u llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.74 llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.75
--- llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.74	Fri Aug 25 14:40:59 2006
+++ llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp	Tue Aug 29 11:24:26 2006
@@ -668,15 +668,22 @@
     std::vector<MachineMove *> &Moves = DebugInfo->getFrameMoves();
     unsigned LabelID = DebugInfo->NextLabelID();
     
-    // Show update of SP.
-    MachineLocation Dst(MachineLocation::VirtualFP);
-    MachineLocation Src(MachineLocation::VirtualFP, NegNumbytes);
-    Moves.push_back(new MachineMove(LabelID, Dst, Src));
-
     // Mark effective beginning of when frame pointer becomes valid.
     BuildMI(MBB, MBBI, PPC::DWARF_LABEL, 1).addImm(LabelID);
     
-    
+    // Show update of SP.
+    MachineLocation SPDst(MachineLocation::VirtualFP);
+    MachineLocation SPSrc(MachineLocation::VirtualFP, NegNumbytes);
+    Moves.push_back(new MachineMove(LabelID, SPDst, SPSrc));
+
+    // Add callee saved registers to move list.
+    const std::vector<CalleeSavedInfo> &CSI = MFI->getCalleeSavedInfo();
+    for (unsigned I = 0, E = CSI.size(); I != E; ++I) {
+      MachineLocation CSDst(MachineLocation::VirtualFP,
+                            MFI->getObjectOffset(CSI[I].getFrameIdx()));
+      MachineLocation CSSrc(CSI[I].getReg());
+      Moves.push_back(new MachineMove(LabelID, CSDst, CSSrc));
+    }
   }
   
   // If there is a frame pointer, copy R1 (SP) into R31 (FP)






More information about the llvm-commits mailing list