summaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMMachineFunctionInfo.h
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2010-09-20 19:32:20 +0000
committerJim Grosbach <grosbach@apple.com>2010-09-20 19:32:20 +0000
commit1dc335a79f5e899aacc6710dfe08ef20abb6a6c0 (patch)
tree2a952221adb0cbe9554337d02f93d4e0cb3712ce /lib/Target/ARM/ARMMachineFunctionInfo.h
parent43779dcfef7f4e921c6fc12bb5394a1b2efcd81d (diff)
downloadllvm-1dc335a79f5e899aacc6710dfe08ef20abb6a6c0.tar.gz
llvm-1dc335a79f5e899aacc6710dfe08ef20abb6a6c0.tar.bz2
llvm-1dc335a79f5e899aacc6710dfe08ef20abb6a6c0.tar.xz
Simplify ARM callee-saved register handling by removing the distinction
between the high and low registers for prologue/epilogue code. This was a Darwin-only thing that wasn't providing a realistic benefit anymore. Combining the save areas simplifies the compiler code and results in better ARM/Thumb2 codegen. For example, previously we would generate code like: push {r4, r5, r6, r7, lr} add r7, sp, #12 stmdb sp!, {r8, r10, r11} With this change, we combine the register saves and generate: push {r4, r5, r6, r7, r8, r10, r11, lr} add r7, sp, #12 rdar://8445635 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114340 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMMachineFunctionInfo.h')
-rw-r--r--lib/Target/ARM/ARMMachineFunctionInfo.h76
1 files changed, 25 insertions, 51 deletions
diff --git a/lib/Target/ARM/ARMMachineFunctionInfo.h b/lib/Target/ARM/ARMMachineFunctionInfo.h
index 514c26b4da..22f3750a42 100644
--- a/lib/Target/ARM/ARMMachineFunctionInfo.h
+++ b/lib/Target/ARM/ARMMachineFunctionInfo.h
@@ -55,28 +55,23 @@ class ARMFunctionInfo : public MachineFunctionInfo {
/// spill stack offset.
unsigned FramePtrSpillOffset;
- /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved
- /// register spills areas. For Mac OS X:
+ /// GPRCSOffset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved
+ /// register spills areas (excluding R9 for Mac OS X):
///
- /// GPR callee-saved (1) : r4, r5, r6, r7, lr
- /// --------------------------------------------
- /// GPR callee-saved (2) : r8, r10, r11
+ /// GPR callee-saved (1) : r4, r5, r6, r7, r8, r9, r10, r11, lr
/// --------------------------------------------
/// DPR callee-saved : d8 - d15
- unsigned GPRCS1Offset;
- unsigned GPRCS2Offset;
+ unsigned GPRCSOffset;
unsigned DPRCSOffset;
- /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills
+ /// GPRCSSize, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills
/// areas.
- unsigned GPRCS1Size;
- unsigned GPRCS2Size;
+ unsigned GPRCSSize;
unsigned DPRCSSize;
- /// GPRCS1Frames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices
+ /// GPRCSFrames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices
/// which belong to these spill areas.
- BitVector GPRCS1Frames;
- BitVector GPRCS2Frames;
+ BitVector GPRCSFrames;
BitVector DPRCSFrames;
/// SpilledCSRegs - A BitVector mask of all spilled callee-saved registers.
@@ -101,9 +96,9 @@ public:
hasThumb2(false),
VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false),
LRSpilledForFarJump(false),
- FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
- GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
- GPRCS1Frames(0), GPRCS2Frames(0), DPRCSFrames(0),
+ FramePtrSpillOffset(0), GPRCSOffset(0), DPRCSOffset(0),
+ GPRCSSize(0), DPRCSSize(0),
+ GPRCSFrames(0), DPRCSFrames(0),
JumpTableUId(0), ConstPoolEntryUId(0), VarArgsFrameIndex(0),
HasITBlocks(false) {}
@@ -112,9 +107,9 @@ public:
hasThumb2(MF.getTarget().getSubtarget<ARMSubtarget>().hasThumb2()),
VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false),
LRSpilledForFarJump(false),
- FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
- GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
- GPRCS1Frames(32), GPRCS2Frames(32), DPRCSFrames(32),
+ FramePtrSpillOffset(0), GPRCSOffset(0), DPRCSOffset(0),
+ GPRCSSize(0), DPRCSSize(0),
+ GPRCSFrames(32), DPRCSFrames(32),
SpilledCSRegs(MF.getTarget().getRegisterInfo()->getNumRegs()),
JumpTableUId(0), ConstPoolEntryUId(0), VarArgsFrameIndex(0),
HasITBlocks(false) {}
@@ -138,31 +133,22 @@ public:
unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; }
void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; }
- unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; }
- unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; }
+ unsigned getGPRCalleeSavedAreaOffset() const { return GPRCSOffset; }
unsigned getDPRCalleeSavedAreaOffset() const { return DPRCSOffset; }
- void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; }
- void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; }
+ void setGPRCalleeSavedAreaOffset(unsigned o) { GPRCSOffset = o; }
void setDPRCalleeSavedAreaOffset(unsigned o) { DPRCSOffset = o; }
- unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; }
- unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; }
+ unsigned getGPRCalleeSavedAreaSize() const { return GPRCSSize; }
unsigned getDPRCalleeSavedAreaSize() const { return DPRCSSize; }
- void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; }
- void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; }
+ void setGPRCalleeSavedAreaSize(unsigned s) { GPRCSSize = s; }
void setDPRCalleeSavedAreaSize(unsigned s) { DPRCSSize = s; }
- 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())
+ bool isGPRCalleeSavedAreaFrame(int fi) const {
+ if (fi < 0 || fi >= (int)GPRCSFrames.size())
return false;
- return GPRCS2Frames[fi];
+ return GPRCSFrames[fi];
}
bool isDPRCalleeSavedAreaFrame(int fi) const {
if (fi < 0 || fi >= (int)DPRCSFrames.size())
@@ -170,28 +156,16 @@ public:
return DPRCSFrames[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) {
+ void addGPRCalleeSavedAreaFrame(int fi) {
if (fi >= 0) {
- int Size = GPRCS2Frames.size();
+ int Size = GPRCSFrames.size();
if (fi >= Size) {
Size *= 2;
if (fi >= Size)
Size = fi+1;
- GPRCS2Frames.resize(Size);
+ GPRCSFrames.resize(Size);
}
- GPRCS2Frames[fi] = true;
+ GPRCSFrames[fi] = true;
}
}
void addDPRCalleeSavedAreaFrame(int fi) {