summaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMMachineFunctionInfo.h
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2010-11-02 17:35:25 +0000
committerJim Grosbach <grosbach@apple.com>2010-11-02 17:35:25 +0000
commitab3d00e5350fd4c097e2a5b077da7584692029a7 (patch)
tree192b087ccc06b70ce5032173db5861f1bc2404e4 /lib/Target/ARM/ARMMachineFunctionInfo.h
parent3b5aec67ef174c74ff6620ddd71ad3b0cb39030c (diff)
downloadllvm-ab3d00e5350fd4c097e2a5b077da7584692029a7.tar.gz
llvm-ab3d00e5350fd4c097e2a5b077da7584692029a7.tar.bz2
llvm-ab3d00e5350fd4c097e2a5b077da7584692029a7.tar.xz
Revert r114340 (improvements in Darwin function prologue/epilogue), as it broke
assumptions about stack layout. Specifically, LR must be saved next to FP. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118026 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMMachineFunctionInfo.h')
-rw-r--r--lib/Target/ARM/ARMMachineFunctionInfo.h79
1 files changed, 53 insertions, 26 deletions
diff --git a/lib/Target/ARM/ARMMachineFunctionInfo.h b/lib/Target/ARM/ARMMachineFunctionInfo.h
index 3b34a23774..514c26b4da 100644
--- a/lib/Target/ARM/ARMMachineFunctionInfo.h
+++ b/lib/Target/ARM/ARMMachineFunctionInfo.h
@@ -55,22 +55,28 @@ class ARMFunctionInfo : public MachineFunctionInfo {
/// spill stack offset.
unsigned FramePtrSpillOffset;
- /// GPRCSOffset, DPRCSOffset - Starting offset of callee saved register
- /// spills areas (excluding R9 for Mac OS X):
+ /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved
+ /// register spills areas. For Mac OS X:
///
- /// GPR callee-saved (1) : r4, r5, r6, r7, r8, r9, r10, r11, lr
+ /// GPR callee-saved (1) : r4, r5, r6, r7, lr
+ /// --------------------------------------------
+ /// GPR callee-saved (2) : r8, r10, r11
/// --------------------------------------------
/// DPR callee-saved : d8 - d15
- unsigned GPRCSOffset;
+ unsigned GPRCS1Offset;
+ unsigned GPRCS2Offset;
unsigned DPRCSOffset;
- /// GPRCSSize, DPRCSSize - Sizes of callee saved register spills areas.
- unsigned GPRCSSize;
+ /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills
+ /// areas.
+ unsigned GPRCS1Size;
+ unsigned GPRCS2Size;
unsigned DPRCSSize;
- /// GPRCSFrames, DPRCSFrames - Keeps track of frame indices which belong
- /// to these spill areas.
- BitVector GPRCSFrames;
+ /// GPRCS1Frames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices
+ /// which belong to these spill areas.
+ BitVector GPRCS1Frames;
+ BitVector GPRCS2Frames;
BitVector DPRCSFrames;
/// SpilledCSRegs - A BitVector mask of all spilled callee-saved registers.
@@ -95,9 +101,9 @@ public:
hasThumb2(false),
VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false),
LRSpilledForFarJump(false),
- FramePtrSpillOffset(0), GPRCSOffset(0), DPRCSOffset(0),
- GPRCSSize(0), DPRCSSize(0),
- GPRCSFrames(0), DPRCSFrames(0),
+ FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
+ GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
+ GPRCS1Frames(0), GPRCS2Frames(0), DPRCSFrames(0),
JumpTableUId(0), ConstPoolEntryUId(0), VarArgsFrameIndex(0),
HasITBlocks(false) {}
@@ -106,9 +112,9 @@ public:
hasThumb2(MF.getTarget().getSubtarget<ARMSubtarget>().hasThumb2()),
VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false),
LRSpilledForFarJump(false),
- FramePtrSpillOffset(0), GPRCSOffset(0), DPRCSOffset(0),
- GPRCSSize(0), DPRCSSize(0),
- GPRCSFrames(32), DPRCSFrames(32),
+ FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
+ GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
+ GPRCS1Frames(32), GPRCS2Frames(32), DPRCSFrames(32),
SpilledCSRegs(MF.getTarget().getRegisterInfo()->getNumRegs()),
JumpTableUId(0), ConstPoolEntryUId(0), VarArgsFrameIndex(0),
HasITBlocks(false) {}
@@ -132,22 +138,31 @@ public:
unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; }
void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; }
- unsigned getGPRCalleeSavedAreaOffset() const { return GPRCSOffset; }
+ unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; }
+ unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; }
unsigned getDPRCalleeSavedAreaOffset() const { return DPRCSOffset; }
- void setGPRCalleeSavedAreaOffset(unsigned o) { GPRCSOffset = o; }
+ void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; }
+ void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; }
void setDPRCalleeSavedAreaOffset(unsigned o) { DPRCSOffset = o; }
- unsigned getGPRCalleeSavedAreaSize() const { return GPRCSSize; }
+ unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; }
+ unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; }
unsigned getDPRCalleeSavedAreaSize() const { return DPRCSSize; }
- void setGPRCalleeSavedAreaSize(unsigned s) { GPRCSSize = s; }
+ void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; }
+ void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; }
void setDPRCalleeSavedAreaSize(unsigned s) { DPRCSSize = s; }
- bool isGPRCalleeSavedAreaFrame(int fi) const {
- if (fi < 0 || fi >= (int)GPRCSFrames.size())
+ bool isGPRCalleeSavedArea1Frame(int fi) const {
+ if (fi < 0 || fi >= (int)GPRCS1Frames.size())
+ return false;
+ return GPRCS1Frames[fi];
+ }
+ bool isGPRCalleeSavedArea2Frame(int fi) const {
+ if (fi < 0 || fi >= (int)GPRCS2Frames.size())
return false;
- return GPRCSFrames[fi];
+ return GPRCS2Frames[fi];
}
bool isDPRCalleeSavedAreaFrame(int fi) const {
if (fi < 0 || fi >= (int)DPRCSFrames.size())
@@ -155,16 +170,28 @@ public:
return DPRCSFrames[fi];
}
- void addGPRCalleeSavedAreaFrame(int fi) {
+ void addGPRCalleeSavedArea1Frame(int fi) {
+ if (fi >= 0) {
+ int Size = GPRCS1Frames.size();
+ if (fi >= Size) {
+ Size *= 2;
+ if (fi >= Size)
+ Size = fi+1;
+ GPRCS1Frames.resize(Size);
+ }
+ GPRCS1Frames[fi] = true;
+ }
+ }
+ void addGPRCalleeSavedArea2Frame(int fi) {
if (fi >= 0) {
- int Size = GPRCSFrames.size();
+ int Size = GPRCS2Frames.size();
if (fi >= Size) {
Size *= 2;
if (fi >= Size)
Size = fi+1;
- GPRCSFrames.resize(Size);
+ GPRCS2Frames.resize(Size);
}
- GPRCSFrames[fi] = true;
+ GPRCS2Frames[fi] = true;
}
}
void addDPRCalleeSavedAreaFrame(int fi) {