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