aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Target/MRegisterInfo.h14
-rw-r--r--lib/CodeGen/DwarfWriter.cpp3
-rw-r--r--lib/Target/MRegisterInfo.cpp18
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