X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FARM%2FARMMachineFunctionInfo.h;h=514c26b4daf038e3bf6777b4455221f07bd1c8f9;hp=3b34a23774df6edff747ab515543ef00d5e89463;hb=ab3d00e5350fd4c097e2a5b077da7584692029a7;hpb=3b5aec67ef174c74ff6620ddd71ad3b0cb39030c diff --git a/lib/Target/ARM/ARMMachineFunctionInfo.h b/lib/Target/ARM/ARMMachineFunctionInfo.h index 3b34a23774d..514c26b4daf 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().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) {