ARMMachineFunctionInfo.h revision 5de5d4b6d0eb3fd379fa571d82f6fa764460b3b8
1a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//====- ARMMachineFuctionInfo.h - ARM machine function info -----*- C++ -*-===// 2764ab52dd80310a205c9888bf166d09dab858f90Jim Grosbach// 3a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// The LLVM Compiler Infrastructure 4a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7764ab52dd80310a205c9888bf166d09dab858f90Jim Grosbach// 8a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//===----------------------------------------------------------------------===// 9a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// 10a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// This file declares ARM-specific per-machine-function information. 11a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// 12a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//===----------------------------------------------------------------------===// 13a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 14a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#ifndef ARMMACHINEFUNCTIONINFO_H 15a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#define ARMMACHINEFUNCTIONINFO_H 16a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 17a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "ARMSubtarget.h" 18a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "llvm/CodeGen/MachineFunction.h" 196f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman#include "llvm/Target/TargetRegisterInfo.h" 20a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "llvm/Target/TargetMachine.h" 21cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng#include "llvm/ADT/BitVector.h" 22a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 23a8e2989ece6dc46df59b0768184028257f913843Evan Chengnamespace llvm { 24a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 25ca3f06963c21ee34c7454be807c4d72af3b0f3adBob Wilson/// ARMFunctionInfo - This class is derived from MachineFunctionInfo and 26ca3f06963c21ee34c7454be807c4d72af3b0f3adBob Wilson/// contains private ARM-specific information for each MachineFunction. 27a8e2989ece6dc46df59b0768184028257f913843Evan Chengclass ARMFunctionInfo : public MachineFunctionInfo { 28a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 29a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// isThumb - True if this function is compiled under Thumb mode. 30bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen /// Used to initialized Align, so must precede it. 31a8e2989ece6dc46df59b0768184028257f913843Evan Cheng bool isThumb; 32a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 335e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// hasThumb2 - True if the target architecture supports Thumb2. Do not use 345e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// to determine if function is compiled under Thumb mode, for that use 355e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// 'isThumb'. 365e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin bool hasThumb2; 375e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin 38a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// VarArgsRegSaveSize - Size of the register save area for vararg functions. 39a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// 40a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned VarArgsRegSaveSize; 41a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 4275e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng /// HasStackFrame - True if this function has a stack frame. Set by 43a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// processFunctionBeforeCalleeSavedScan(). 4475e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng bool HasStackFrame; 45a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 46ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng /// RestoreSPFromFP - True if epilogue should restore SP from FP. Set by 47ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng /// emitPrologue. 48ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng bool RestoreSPFromFP; 49ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng 50f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// LRSpilledForFarJump - True if the LR register has been for spilled to 51f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// enable far jump. 52f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng bool LRSpilledForFarJump; 5378268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 5475e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng /// FramePtrSpillOffset - If HasStackFrame, this records the frame pointer 55a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// spill stack offset. 56a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned FramePtrSpillOffset; 57a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 58ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved 59ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// register spills areas. For Mac OS X: 60a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// 61ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPR callee-saved (1) : r4, r5, r6, r7, lr 62ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// -------------------------------------------- 63ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPR callee-saved (2) : r8, r10, r11 64a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// -------------------------------------------- 65a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// DPR callee-saved : d8 - d15 66ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS1Offset; 67ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS2Offset; 68a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned DPRCSOffset; 69a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 70ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills 71ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// areas. 72ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS1Size; 73ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS2Size; 74a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned DPRCSSize; 75a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 76ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPRCS1Frames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices 77ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// which belong to these spill areas. 78ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach BitVector GPRCS1Frames; 79ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach BitVector GPRCS2Frames; 80cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng BitVector DPRCSFrames; 81a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 82f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// SpilledCSRegs - A BitVector mask of all spilled callee-saved registers. 83f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// 84f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng BitVector SpilledCSRegs; 85f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng 86a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// JumpTableUId - Unique id for jumptables. 87a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// 88a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned JumpTableUId; 89a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 905de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned PICLabelUId; 91f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 921e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman /// VarArgsFrameIndex - FrameIndex for start of varargs area. 931e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman int VarArgsFrameIndex; 941e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman 9586050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng /// HasITBlocks - True if IT blocks have been inserted. 9686050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng bool HasITBlocks; 9786050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng 98a8e2989ece6dc46df59b0768184028257f913843Evan Chengpublic: 99a8e2989ece6dc46df59b0768184028257f913843Evan Cheng ARMFunctionInfo() : 1005e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin isThumb(false), 1015e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin hasThumb2(false), 102ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false), 1031f30dcbd8dcf18cabb4be780fcf492869d5dcab9Jim Grosbach LRSpilledForFarJump(false), 104ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0), 105ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0), 106ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Frames(0), GPRCS2Frames(0), DPRCSFrames(0), 1075de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng JumpTableUId(0), PICLabelUId(0), 1085de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng VarArgsFrameIndex(0), HasITBlocks(false) {} 109a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 1102392efef1bd2599231ab659dd6ba4233bf5df94cDan Gohman explicit ARMFunctionInfo(MachineFunction &MF) : 111a8e2989ece6dc46df59b0768184028257f913843Evan Cheng isThumb(MF.getTarget().getSubtarget<ARMSubtarget>().isThumb()), 1125e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin hasThumb2(MF.getTarget().getSubtarget<ARMSubtarget>().hasThumb2()), 113ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng VarArgsRegSaveSize(0), HasStackFrame(false), RestoreSPFromFP(false), 1141f30dcbd8dcf18cabb4be780fcf492869d5dcab9Jim Grosbach LRSpilledForFarJump(false), 115ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0), 116ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0), 117ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Frames(32), GPRCS2Frames(32), DPRCSFrames(32), 118f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng SpilledCSRegs(MF.getTarget().getRegisterInfo()->getNumRegs()), 1195de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng JumpTableUId(0), PICLabelUId(0), 1205de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng VarArgsFrameIndex(0), HasITBlocks(false) {} 121a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 122a8e2989ece6dc46df59b0768184028257f913843Evan Cheng bool isThumbFunction() const { return isThumb; } 123f1daf7d8abebd6e0104a6b41a774ccbb19a51c60David Goodwin bool isThumb1OnlyFunction() const { return isThumb && !hasThumb2; } 1245e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin bool isThumb2Function() const { return isThumb && hasThumb2; } 125a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 126a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; } 127a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; } 128a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 12975e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng bool hasStackFrame() const { return HasStackFrame; } 13075e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng void setHasStackFrame(bool s) { HasStackFrame = s; } 13178268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 132ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng bool shouldRestoreSPFromFP() const { return RestoreSPFromFP; } 133ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng void setShouldRestoreSPFromFP(bool s) { RestoreSPFromFP = s; } 134ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng 135f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng bool isLRSpilledForFarJump() const { return LRSpilledForFarJump; } 136f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng void setLRIsSpilledForFarJump(bool s) { LRSpilledForFarJump = s; } 13778268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 138a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; } 139a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; } 140764ab52dd80310a205c9888bf166d09dab858f90Jim Grosbach 141ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; } 142ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; } 143a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getDPRCalleeSavedAreaOffset() const { return DPRCSOffset; } 144a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 145ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; } 146ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; } 147a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setDPRCalleeSavedAreaOffset(unsigned o) { DPRCSOffset = o; } 148a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 149ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; } 150ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; } 151a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getDPRCalleeSavedAreaSize() const { return DPRCSSize; } 152a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 153ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; } 154ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; } 155a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setDPRCalleeSavedAreaSize(unsigned s) { DPRCSSize = s; } 156a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 157ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach bool isGPRCalleeSavedArea1Frame(int fi) const { 158ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach if (fi < 0 || fi >= (int)GPRCS1Frames.size()) 159ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach return false; 160ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach return GPRCS1Frames[fi]; 161ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach } 162ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach bool isGPRCalleeSavedArea2Frame(int fi) const { 163ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach if (fi < 0 || fi >= (int)GPRCS2Frames.size()) 1646318ffd7361677e3b4487025538997ee01304452Evan Cheng return false; 165ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach return GPRCS2Frames[fi]; 166a8e2989ece6dc46df59b0768184028257f913843Evan Cheng } 1676318ffd7361677e3b4487025538997ee01304452Evan Cheng bool isDPRCalleeSavedAreaFrame(int fi) const { 1686318ffd7361677e3b4487025538997ee01304452Evan Cheng if (fi < 0 || fi >= (int)DPRCSFrames.size()) 1696318ffd7361677e3b4487025538997ee01304452Evan Cheng return false; 1706318ffd7361677e3b4487025538997ee01304452Evan Cheng return DPRCSFrames[fi]; 171a8e2989ece6dc46df59b0768184028257f913843Evan Cheng } 172a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 173ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void addGPRCalleeSavedArea1Frame(int fi) { 174ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach if (fi >= 0) { 175ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach int Size = GPRCS1Frames.size(); 176ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach if (fi >= Size) { 177ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach Size *= 2; 178ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach if (fi >= Size) 179ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach Size = fi+1; 180ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Frames.resize(Size); 181ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach } 182ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS1Frames[fi] = true; 183ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach } 184ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach } 185ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void addGPRCalleeSavedArea2Frame(int fi) { 1866318ffd7361677e3b4487025538997ee01304452Evan Cheng if (fi >= 0) { 187ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach int Size = GPRCS2Frames.size(); 188cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng if (fi >= Size) { 189cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng Size *= 2; 190cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng if (fi >= Size) 191cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng Size = fi+1; 192ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS2Frames.resize(Size); 193cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng } 194ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach GPRCS2Frames[fi] = true; 1956318ffd7361677e3b4487025538997ee01304452Evan Cheng } 196a8e2989ece6dc46df59b0768184028257f913843Evan Cheng } 1976318ffd7361677e3b4487025538997ee01304452Evan Cheng void addDPRCalleeSavedAreaFrame(int fi) { 1986318ffd7361677e3b4487025538997ee01304452Evan Cheng if (fi >= 0) { 199cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng int Size = DPRCSFrames.size(); 200cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng if (fi >= Size) { 201cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng Size *= 2; 202cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng if (fi >= Size) 203cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng Size = fi+1; 204cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng DPRCSFrames.resize(Size); 205cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng } 2066318ffd7361677e3b4487025538997ee01304452Evan Cheng DPRCSFrames[fi] = true; 2076318ffd7361677e3b4487025538997ee01304452Evan Cheng } 208a8e2989ece6dc46df59b0768184028257f913843Evan Cheng } 209a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 210f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng void setCSRegisterIsSpilled(unsigned Reg) { 211f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng SpilledCSRegs.set(Reg); 212f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng } 213f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng 214f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng bool isCSRegisterSpilled(unsigned Reg) const { 215f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng return SpilledCSRegs[Reg]; 216f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng } 217f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng 218f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng const BitVector &getSpilledCSRegisters() const { 219f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng return SpilledCSRegs; 220f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng } 221f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng 222a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned createJumpTableUId() { 223a8e2989ece6dc46df59b0768184028257f913843Evan Cheng return JumpTableUId++; 224a8e2989ece6dc46df59b0768184028257f913843Evan Cheng } 225f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 226f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng unsigned getNumJumpTables() const { 227f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng return JumpTableUId; 228f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 229f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 2305de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng void initPICLabelUId(unsigned UId) { 2315de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng PICLabelUId = UId; 232f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 233f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 2345de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned getNumPICLabels() const { 2355de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng return PICLabelUId; 236f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 237f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 2385de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned createPICLabelUId() { 2395de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng return PICLabelUId++; 240f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 2411e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman 2421e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } 2431e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } 24486050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng 24586050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng bool hasITBlocks() const { return HasITBlocks; } 24686050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng void setHasITBlocks(bool h) { HasITBlocks = h; } 247a8e2989ece6dc46df59b0768184028257f913843Evan Cheng}; 248a8e2989ece6dc46df59b0768184028257f913843Evan Cheng} // End llvm namespace 249a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 250a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#endif // ARMMACHINEFUNCTIONINFO_H 251