ARMMachineFunctionInfo.h revision 2392efef1bd2599231ab659dd6ba4233bf5df94c
1a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//====- ARMMachineFuctionInfo.h - ARM machine function info -----*- C++ -*-===//
2a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//
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.
7a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//
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
25a8e2989ece6dc46df59b0768184028257f913843Evan Cheng/// ARMFunctionInfo - This class is derived from MachineFunction private
26a8e2989ece6dc46df59b0768184028257f913843Evan Cheng/// ARM target-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
33bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  /// Align - required alignment.  ARM functions and Thumb functions with
34bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  /// constant pools require 4-byte alignment; other Thumb functions
35bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  /// require only 2-byte alignment.
36bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  unsigned Align;
37bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen
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
46f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  /// LRSpilledForFarJump - True if the LR register has been for spilled to
47f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  /// enable far jump.
48f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool LRSpilledForFarJump;
4978268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng
508bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng  /// R3IsLiveIn - True if R3 is live in to this function.
51cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng  /// FIXME: Remove when register scavenger for Thumb is done.
528bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng  bool R3IsLiveIn;
538bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng
5475e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng  /// FramePtrSpillOffset - If HasStackFrame, this records the frame pointer
55a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// spill stack offset.
56a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned FramePtrSpillOffset;
57a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
58a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved
59a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// register spills areas. For Mac OS X:
60a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  ///
61a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// GPR callee-saved (1) : r4, r5, r6, r7, lr
62a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// --------------------------------------------
63a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// GPR callee-saved (2) : r8, r10, r11
64a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// --------------------------------------------
65a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// DPR callee-saved : d8 - d15
66a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned GPRCS1Offset;
67a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned GPRCS2Offset;
68a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned DPRCSOffset;
69a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
70a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills
71a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// areas.
72a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned GPRCS1Size;
73a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned GPRCS2Size;
74a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned DPRCSSize;
75a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
76a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// GPRCS1Frames, GPRCS2Frames, DPRCSFrames - Keeps track of frame indices
77a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  /// which belong to these spill areas.
78cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng  BitVector GPRCS1Frames;
79cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng  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
90f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  unsigned ConstPoolEntryUId;
91f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng
92a8e2989ece6dc46df59b0768184028257f913843Evan Chengpublic:
93a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  ARMFunctionInfo() :
94bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    isThumb(false),
95bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    Align(2U),
968bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng    VarArgsRegSaveSize(0), HasStackFrame(false),
97f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    LRSpilledForFarJump(false), R3IsLiveIn(false),
9878268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng    FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
99cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
100f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    GPRCS1Frames(0), GPRCS2Frames(0), DPRCSFrames(0),
101f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    JumpTableUId(0), ConstPoolEntryUId(0) {}
102a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
1032392efef1bd2599231ab659dd6ba4233bf5df94cDan Gohman  explicit ARMFunctionInfo(MachineFunction &MF) :
104a8e2989ece6dc46df59b0768184028257f913843Evan Cheng    isThumb(MF.getTarget().getSubtarget<ARMSubtarget>().isThumb()),
105bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    Align(isThumb ? 1U : 2U),
1068bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng    VarArgsRegSaveSize(0), HasStackFrame(false),
107f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    LRSpilledForFarJump(false), R3IsLiveIn(false),
10878268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng    FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
109cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
110cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Frames(32), GPRCS2Frames(32), DPRCSFrames(32),
111f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    SpilledCSRegs(MF.getTarget().getRegisterInfo()->getNumRegs()),
112f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    JumpTableUId(0), ConstPoolEntryUId(0) {}
113a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
114a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  bool isThumbFunction() const { return isThumb; }
115a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
116bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  unsigned getAlign() const { return Align; }
117bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  void setAlign(unsigned a) { Align = a; }
118bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen
119a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; }
120a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; }
121a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
12275e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng  bool hasStackFrame() const { return HasStackFrame; }
12375e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng  void setHasStackFrame(bool s) { HasStackFrame = s; }
12478268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng
125f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool isLRSpilledForFarJump() const { return LRSpilledForFarJump; }
126f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  void setLRIsSpilledForFarJump(bool s) { LRSpilledForFarJump = s; }
12778268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng
128f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  // FIXME: Remove when register scavenger for Thumb is done.
129f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool isR3LiveIn() const { return R3IsLiveIn; }
1308bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng  void setR3IsLiveIn(bool l) { R3IsLiveIn = l; }
1318bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng
132a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; }
133a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; }
134a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
135a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; }
136a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; }
137a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getDPRCalleeSavedAreaOffset()  const { return DPRCSOffset; }
138a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
139a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; }
140a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; }
141a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setDPRCalleeSavedAreaOffset(unsigned o)  { DPRCSOffset = o; }
142a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
143a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; }
144a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; }
145a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getDPRCalleeSavedAreaSize()  const { return DPRCSSize; }
146a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
147a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; }
148a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; }
149a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setDPRCalleeSavedAreaSize(unsigned s)  { DPRCSSize = s; }
150a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
1516318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isGPRCalleeSavedArea1Frame(int fi) const {
1526318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)GPRCS1Frames.size())
1536318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1546318ffd7361677e3b4487025538997ee01304452Evan Cheng    return GPRCS1Frames[fi];
155a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1566318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isGPRCalleeSavedArea2Frame(int fi) const {
1576318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)GPRCS2Frames.size())
1586318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1596318ffd7361677e3b4487025538997ee01304452Evan Cheng    return GPRCS2Frames[fi];
160a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1616318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isDPRCalleeSavedAreaFrame(int fi) const {
1626318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)DPRCSFrames.size())
1636318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1646318ffd7361677e3b4487025538997ee01304452Evan Cheng    return DPRCSFrames[fi];
165a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
166a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
1676318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addGPRCalleeSavedArea1Frame(int fi) {
1686318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
169cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = GPRCS1Frames.size();
170cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
171cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
172cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
173cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
174cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        GPRCS1Frames.resize(Size);
175cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
1766318ffd7361677e3b4487025538997ee01304452Evan Cheng      GPRCS1Frames[fi] = true;
1776318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
178a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1796318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addGPRCalleeSavedArea2Frame(int fi) {
1806318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
181cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = GPRCS2Frames.size();
182cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
183cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
184cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
185cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
186cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        GPRCS2Frames.resize(Size);
187cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
1886318ffd7361677e3b4487025538997ee01304452Evan Cheng      GPRCS2Frames[fi] = true;
1896318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
190a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1916318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addDPRCalleeSavedAreaFrame(int fi) {
1926318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
193cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = DPRCSFrames.size();
194cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
195cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
196cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
197cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
198cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        DPRCSFrames.resize(Size);
199cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
2006318ffd7361677e3b4487025538997ee01304452Evan Cheng      DPRCSFrames[fi] = true;
2016318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
202a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
203a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
204f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  void setCSRegisterIsSpilled(unsigned Reg) {
205f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    SpilledCSRegs.set(Reg);
206f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
207f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
208f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  bool isCSRegisterSpilled(unsigned Reg) const {
209f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    return SpilledCSRegs[Reg];
210f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
211f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
212f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  const BitVector &getSpilledCSRegisters() const {
213f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    return SpilledCSRegs;
214f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
215f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
216a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned createJumpTableUId() {
217a8e2989ece6dc46df59b0768184028257f913843Evan Cheng    return JumpTableUId++;
218a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
219f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng
220f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  unsigned getNumJumpTables() const {
221f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    return JumpTableUId;
222f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  }
223f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng
224f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  void initConstPoolEntryUId(unsigned UId) {
225f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    ConstPoolEntryUId = UId;
226f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  }
227f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng
228f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  unsigned getNumConstPoolEntries() const {
229f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    return ConstPoolEntryUId;
230f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  }
231f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng
232f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  unsigned createConstPoolEntryUId() {
233f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng    return ConstPoolEntryUId++;
234f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng  }
235a8e2989ece6dc46df59b0768184028257f913843Evan Cheng};
236a8e2989ece6dc46df59b0768184028257f913843Evan Cheng} // End llvm namespace
237a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
238a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#endif // ARMMACHINEFUNCTIONINFO_H
239