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