diff options
-rw-r--r-- | include/llvm/Target/MRegisterInfo.h | 14 | ||||
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 3 | ||||
-rw-r--r-- | lib/Target/MRegisterInfo.cpp | 18 |
3 files changed, 13 insertions, 22 deletions
diff --git a/include/llvm/Target/MRegisterInfo.h b/include/llvm/Target/MRegisterInfo.h index 671ce0a197..8a90f50c06 100644 --- a/include/llvm/Target/MRegisterInfo.h +++ b/include/llvm/Target/MRegisterInfo.h @@ -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.) diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 1068f68991..de5709622b 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -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; diff --git a/lib/Target/MRegisterInfo.cpp b/lib/Target/MRegisterInfo.cpp index d7e161107e..0d14aeea55 100644 --- a/lib/Target/MRegisterInfo.cpp +++ b/lib/Target/MRegisterInfo.cpp @@ -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 |