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