ARMMachineFunctionInfo.h revision 6f0d024a534af18d9e60b3ea757376cd8a3a980e
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
90a8e2989ece6dc46df59b0768184028257f913843Evan Chengpublic:
91a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  ARMFunctionInfo() :
92bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    isThumb(false),
93bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    Align(2U),
948bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng    VarArgsRegSaveSize(0), HasStackFrame(false),
95f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    LRSpilledForFarJump(false), R3IsLiveIn(false),
9678268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng    FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
97cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
98f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    GPRCS1Frames(0), GPRCS2Frames(0), DPRCSFrames(0),
99cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    JumpTableUId(0) {}
100a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
101a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  ARMFunctionInfo(MachineFunction &MF) :
102a8e2989ece6dc46df59b0768184028257f913843Evan Cheng    isThumb(MF.getTarget().getSubtarget<ARMSubtarget>().isThumb()),
103bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen    Align(isThumb ? 1U : 2U),
1048bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng    VarArgsRegSaveSize(0), HasStackFrame(false),
105f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    LRSpilledForFarJump(false), R3IsLiveIn(false),
10678268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng    FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
107cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Size(0), GPRCS2Size(0), DPRCSSize(0),
108cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    GPRCS1Frames(32), GPRCS2Frames(32), DPRCSFrames(32),
109f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    SpilledCSRegs(MF.getTarget().getRegisterInfo()->getNumRegs()),
110cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng    JumpTableUId(0) {}
111a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
112a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  bool isThumbFunction() const { return isThumb; }
113a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
114bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  unsigned getAlign() const { return Align; }
115bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen  void setAlign(unsigned a) { Align = a; }
116bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen
117a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; }
118a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; }
119a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
12075e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng  bool hasStackFrame() const { return HasStackFrame; }
12175e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng  void setHasStackFrame(bool s) { HasStackFrame = s; }
12278268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng
123f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool isLRSpilledForFarJump() const { return LRSpilledForFarJump; }
124f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  void setLRIsSpilledForFarJump(bool s) { LRSpilledForFarJump = s; }
12578268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng
126f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  // FIXME: Remove when register scavenger for Thumb is done.
127f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool isR3LiveIn() const { return R3IsLiveIn; }
1288bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng  void setR3IsLiveIn(bool l) { R3IsLiveIn = l; }
1298bed6c968fd7164222bc0cf4b86686c88381c3b8Evan Cheng
130a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; }
131a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; }
132a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
133a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; }
134a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; }
135a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getDPRCalleeSavedAreaOffset()  const { return DPRCSOffset; }
136a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
137a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; }
138a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; }
139a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setDPRCalleeSavedAreaOffset(unsigned o)  { DPRCSOffset = o; }
140a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
141a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; }
142a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; }
143a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned getDPRCalleeSavedAreaSize()  const { return DPRCSSize; }
144a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
145a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; }
146a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; }
147a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  void setDPRCalleeSavedAreaSize(unsigned s)  { DPRCSSize = s; }
148a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
1496318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isGPRCalleeSavedArea1Frame(int fi) const {
1506318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)GPRCS1Frames.size())
1516318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1526318ffd7361677e3b4487025538997ee01304452Evan Cheng    return GPRCS1Frames[fi];
153a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1546318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isGPRCalleeSavedArea2Frame(int fi) const {
1556318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)GPRCS2Frames.size())
1566318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1576318ffd7361677e3b4487025538997ee01304452Evan Cheng    return GPRCS2Frames[fi];
158a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1596318ffd7361677e3b4487025538997ee01304452Evan Cheng  bool isDPRCalleeSavedAreaFrame(int fi) const {
1606318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi < 0 || fi >= (int)DPRCSFrames.size())
1616318ffd7361677e3b4487025538997ee01304452Evan Cheng      return false;
1626318ffd7361677e3b4487025538997ee01304452Evan Cheng    return DPRCSFrames[fi];
163a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
164a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
1656318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addGPRCalleeSavedArea1Frame(int fi) {
1666318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
167cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = GPRCS1Frames.size();
168cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
169cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
170cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
171cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
172cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        GPRCS1Frames.resize(Size);
173cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
1746318ffd7361677e3b4487025538997ee01304452Evan Cheng      GPRCS1Frames[fi] = true;
1756318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
176a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1776318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addGPRCalleeSavedArea2Frame(int fi) {
1786318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
179cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = GPRCS2Frames.size();
180cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
181cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
182cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
183cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
184cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        GPRCS2Frames.resize(Size);
185cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
1866318ffd7361677e3b4487025538997ee01304452Evan Cheng      GPRCS2Frames[fi] = true;
1876318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
188a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
1896318ffd7361677e3b4487025538997ee01304452Evan Cheng  void addDPRCalleeSavedAreaFrame(int fi) {
1906318ffd7361677e3b4487025538997ee01304452Evan Cheng    if (fi >= 0) {
191cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      int Size = DPRCSFrames.size();
192cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      if (fi >= Size) {
193cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        Size *= 2;
194cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        if (fi >= Size)
195cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng          Size = fi+1;
196cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng        DPRCSFrames.resize(Size);
197cda067bad95654d970e14d3555f4aa685e5ebcaeEvan Cheng      }
1986318ffd7361677e3b4487025538997ee01304452Evan Cheng      DPRCSFrames[fi] = true;
1996318ffd7361677e3b4487025538997ee01304452Evan Cheng    }
200a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
201a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
202f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  void setCSRegisterIsSpilled(unsigned Reg) {
203f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    SpilledCSRegs.set(Reg);
204f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
205f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
206f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  bool isCSRegisterSpilled(unsigned Reg) {
207f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    return SpilledCSRegs[Reg];
208f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
209f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
210f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  const BitVector &getSpilledCSRegisters() const {
211f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng    return SpilledCSRegs;
212f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng  }
213f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng
214a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  unsigned createJumpTableUId() {
215a8e2989ece6dc46df59b0768184028257f913843Evan Cheng    return JumpTableUId++;
216a8e2989ece6dc46df59b0768184028257f913843Evan Cheng  }
217a8e2989ece6dc46df59b0768184028257f913843Evan Cheng};
218a8e2989ece6dc46df59b0768184028257f913843Evan Cheng} // End llvm namespace
219a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
220a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#endif // ARMMACHINEFUNCTIONINFO_H
221