MRegisterInfo::getLocation() is a really bad idea. Its function is to calculate the...
authorEvan Cheng <evan.cheng@apple.com>
Thu, 31 Jan 2008 03:37:28 +0000 (03:37 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 31 Jan 2008 03:37:28 +0000 (03:37 +0000)
Replace getLocation() with getFrameIndexOffset() which returns the delta from frame pointer to stack slot. Dwarf writer can then use the information for whatever it wants.

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

include/llvm/Target/MRegisterInfo.h
lib/CodeGen/DwarfWriter.cpp
lib/Target/MRegisterInfo.cpp

index 671ce0a197953a0718210d2cdb6061ec61172e38..8a90f50c06de341e0a025dfd4a91e80df3db9e16 100644 (file)
@@ -27,7 +27,6 @@ namespace llvm {
 class BitVector;
 class MachineFunction;
 class MachineInstr;
-class MachineLocation;
 class MachineMove;
 class RegScavenger;
 class SDNode;
@@ -586,18 +585,15 @@ public:
   /// getFrameRegister - This method should return the register used as a base
   /// for values allocated in the current stack frame.
   virtual unsigned getFrameRegister(MachineFunction &MF) const = 0;
-  
+
+  /// getFrameIndexOffset - Returns the displacement from the frame register to
+  /// the stack frame of the specified index.
+  virtual int getFrameIndexOffset(MachineFunction &MF, unsigned FI) const;
+                           
   /// getRARegister - This method should return the register where the return
   /// address can be found.
   virtual unsigned getRARegister() const = 0;
   
-  /// getLocation - This method should return the actual location of a frame
-  /// variable given the frame index.  The location is returned in ML.
-  /// Subclasses should override this method for special handling of frame
-  /// variables and call MRegisterInfo::getLocation for the default action.
-  virtual void getLocation(MachineFunction &MF, unsigned Index,
-                           MachineLocation &ML) const;
-                           
   /// getInitialFrameState - Returns a list of machine moves that are assumed
   /// on entry to all functions.  Note that LabelID is ignored (assumed to be
   /// the beginning of the function.)
index 1068f6899128534c305cdac95a6b309823f806cb..de5709622bf83aaf31b2bb089d68d6907838ec8d 100644 (file)
@@ -1875,7 +1875,8 @@ private:
     
     // Add variable address.
     MachineLocation Location;
-    RI->getLocation(*MF, DV->getFrameIndex(), Location);
+    Location.set(RI->getFrameRegister(*MF),
+                 RI->getFrameIndexOffset(*MF, DV->getFrameIndex()));
     AddAddress(VariableDie, DW_AT_location, Location);
 
     return VariableDie;
index d7e161107edafe4f53ee9723d5ba68d641dffde6..0d14aeea55acfd0bd6c9bd768246ca5e91d96027 100644 (file)
@@ -16,7 +16,6 @@
 #include "llvm/Target/TargetFrameInfo.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/MachineLocation.h"
 #include "llvm/ADT/BitVector.h"
 
 using namespace llvm;
@@ -72,19 +71,14 @@ BitVector MRegisterInfo::getAllocatableSet(MachineFunction &MF,
   return Allocatable;
 }
 
-/// getLocation - This method should return the actual location of a frame
-/// variable given the frame index.  The location is returned in ML.
-/// Subclasses should override this method for special handling of frame
-/// variables and then call MRegisterInfo::getLocation for the default action.
-void MRegisterInfo::getLocation(MachineFunction &MF, unsigned Index,
-                        MachineLocation &ML) const {
+/// getFrameIndexOffset - Returns the displacement from the frame register to
+/// the stack frame of the specified index. This is the default implementation
+/// which is likely incorrect for the target.
+int MRegisterInfo::getFrameIndexOffset(MachineFunction &MF, unsigned FI) const {
   const TargetFrameInfo &TFI = *MF.getTarget().getFrameInfo();
   MachineFrameInfo *MFI = MF.getFrameInfo();
-  ML.set(getFrameRegister(MF),
-         MFI->getObjectOffset(Index) +
-         MFI->getStackSize() -
-         TFI.getOffsetOfLocalArea() +
-         MFI->getOffsetAdjustment());
+  return MFI->getObjectOffset(FI) + MFI->getStackSize() -
+    TFI.getOffsetOfLocalArea() + MFI->getOffsetAdjustment();
 }
 
 /// getInitialFrameState - Returns a list of machine moves that are assumed