[llvm-commits] [llvm] r41104 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86ISelLowering.h X86MachineFunctionInfo.h

Anton Korobeynikov asl at math.spbu.ru
Wed Aug 15 10:12:32 PDT 2007


Author: asl
Date: Wed Aug 15 12:12:32 2007
New Revision: 41104

URL: http://llvm.org/viewvc/llvm-project?rev=41104&view=rev
Log:
Move ReturnAddrIndex variable to X86MachineFunctionInfo structure. This fixed
hard to catch bugs with retaddr lowering

Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/lib/Target/X86/X86ISelLowering.h
    llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h

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

==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Aug 15 12:12:32 2007
@@ -781,12 +781,11 @@
     
     BytesCallerReserves = StackSize;
   }
-  
+    
   RegSaveFrameIndex = 0xAAAAAAA;  // X86-64 only.
-  ReturnAddrIndex = 0;            // No return address slot generated yet.
 
-  MF.getInfo<X86MachineFunctionInfo>()
-    ->setBytesToPopOnReturn(BytesToPopOnReturn);
+  X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
+  FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
 
   // Return the new list of results.
   return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
@@ -1027,12 +1026,11 @@
 
   VarArgsFrameIndex = 0xAAAAAAA;   // fastcc functions can't have varargs.
   RegSaveFrameIndex = 0xAAAAAAA;   // X86-64 only.
-  ReturnAddrIndex = 0;             // No return address slot generated yet.
   BytesToPopOnReturn = StackSize;  // Callee pops all stack arguments.
   BytesCallerReserves = 0;
 
-  MF.getInfo<X86MachineFunctionInfo>()
-    ->setBytesToPopOnReturn(BytesToPopOnReturn);
+  X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
+  FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
 
   // Return the new list of results.
   return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
@@ -1319,10 +1317,12 @@
 
   ArgValues.push_back(Root);
 
-  ReturnAddrIndex = 0;     // No return address slot generated yet.
   BytesToPopOnReturn = 0;  // Callee pops nothing.
   BytesCallerReserves = StackSize;
 
+  X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
+  FuncInfo->setBytesToPopOnReturn(BytesToPopOnReturn);
+
   // Return the new list of results.
   return DAG.getNode(ISD::MERGE_VALUES, Op.Val->getVTList(),
                      &ArgValues[0], ArgValues.size()).getValue(Op.ResNo);
@@ -1471,13 +1471,18 @@
 
 
 SDOperand X86TargetLowering::getReturnAddressFrameIndex(SelectionDAG &DAG) {
+  MachineFunction &MF = DAG.getMachineFunction();
+  X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
+  int ReturnAddrIndex = FuncInfo->getRAIndex();
+
   if (ReturnAddrIndex == 0) {
     // Set up a frame object for the return address.
-    MachineFunction &MF = DAG.getMachineFunction();
     if (Subtarget->is64Bit())
       ReturnAddrIndex = MF.getFrameInfo()->CreateFixedObject(8, -8);
     else
       ReturnAddrIndex = MF.getFrameInfo()->CreateFixedObject(4, -4);
+
+    FuncInfo->setRAIndex(ReturnAddrIndex);
   }
 
   return DAG.getFrameIndex(ReturnAddrIndex, getPointerTy());

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=41104&r1=41103&r2=41104&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Wed Aug 15 12:12:32 2007
@@ -282,7 +282,6 @@
     int RegSaveFrameIndex;            // X86-64 vararg func register save area.
     unsigned VarArgsGPOffset;         // X86-64 vararg func int reg offset.
     unsigned VarArgsFPOffset;         // X86-64 vararg func fp reg offset.
-    int ReturnAddrIndex;              // FrameIndex for return slot.
     int BytesToPopOnReturn;           // Number of arg bytes ret should pop.
     int BytesCallerReserves;          // Number of arg bytes caller makes.
   public:

Modified: llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h?rev=41104&r1=41103&r2=41104&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h Wed Aug 15 12:12:32 2007
@@ -44,17 +44,21 @@
   /// If the function requires additional name decoration, DecorationStyle holds
   /// the right way to do so.
   NameDecorationStyle DecorationStyle;
-  
+
+  // FrameIndex for return slot.
+  int ReturnAddrIndex;
 public:
   X86MachineFunctionInfo() : ForceFramePointer(false),
                              CalleeSavedFrameSize(0),
                              BytesToPopOnReturn(0),
-                             DecorationStyle(None) {}
+                             DecorationStyle(None),
+                             ReturnAddrIndex(0) {}
   
   X86MachineFunctionInfo(MachineFunction &MF) : ForceFramePointer(false),
                                                 CalleeSavedFrameSize(0),
                                                 BytesToPopOnReturn(0),
-                                                DecorationStyle(None) {}
+                                                DecorationStyle(None),
+                                                ReturnAddrIndex(0) {}
   
   bool getForceFramePointer() const { return ForceFramePointer;} 
   void setForceFramePointer(bool forceFP) { ForceFramePointer = forceFP; }
@@ -67,7 +71,9 @@
 
   NameDecorationStyle getDecorationStyle() const { return DecorationStyle; }
   void setDecorationStyle(NameDecorationStyle style) { DecorationStyle = style;}
-  
+
+  int getRAIndex() const { return ReturnAddrIndex; }
+  void setRAIndex(int Index) { ReturnAddrIndex = Index; }
 };
 } // End llvm namespace
 





More information about the llvm-commits mailing list