1f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===-- ARMMachineFunctionInfo.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 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_ARM_ARMMACHINEFUNCTIONINFO_H 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_ARM_ARMMACHINEFUNCTIONINFO_H 16a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 17a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "ARMSubtarget.h" 18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/ADT/DenseMap.h" 19a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "llvm/CodeGen/MachineFunction.h" 20a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "llvm/Target/TargetMachine.h" 21a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "llvm/Target/TargetRegisterInfo.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 { 282d24e2a396a1d211baaeedf32148a3b657240170David Blaikie virtual void anchor(); 29a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 30a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// isThumb - True if this function is compiled under Thumb mode. 31bd24f3f398bc26d686836dc412f3c1997953f427Dale Johannesen /// Used to initialized Align, so must precede it. 32a8e2989ece6dc46df59b0768184028257f913843Evan Cheng bool isThumb; 33a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 345e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// hasThumb2 - True if the target architecture supports Thumb2. Do not use 355e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// to determine if function is compiled under Thumb mode, for that use 365e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin /// 'isThumb'. 375e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin bool hasThumb2; 385e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin 39083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy /// StByValParamsPadding - For parameter that is split between 40083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy /// GPRs and memory; while recovering GPRs part, when 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// StackAlignment > 4, and GPRs-part-size mod StackAlignment != 0, 42083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy /// we need to insert gap before parameter start address. It allows to 43083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy /// "attach" GPR-part to the part that was passed via stack. 44083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy unsigned StByValParamsPadding; 45083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy 46a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// VarArgsRegSaveSize - Size of the register save area for vararg functions. 47a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// 48f65e4932f83ac0c36594d97fca73dc9a9fd26672Stepan Dyatkovskiy unsigned ArgRegsSaveSize; 49a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 5037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// ReturnRegsCount - Number of registers used up in the return. 5137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unsigned ReturnRegsCount; 5237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5375e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng /// HasStackFrame - True if this function has a stack frame. Set by 54f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar /// determineCalleeSaves(). 5575e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng bool HasStackFrame; 56a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 57ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng /// RestoreSPFromFP - True if epilogue should restore SP from FP. Set by 58ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng /// emitPrologue. 59ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng bool RestoreSPFromFP; 60ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng 61f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// LRSpilledForFarJump - True if the LR register has been for spilled to 62f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng /// enable far jump. 63f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng bool LRSpilledForFarJump; 6478268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 6575e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng /// FramePtrSpillOffset - If HasStackFrame, this records the frame pointer 66a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// spill stack offset. 67a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned FramePtrSpillOffset; 68a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 69ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPRCS1Offset, GPRCS2Offset, DPRCSOffset - Starting offset of callee saved 70ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// register spills areas. For Mac OS X: 71a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// 72ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPR callee-saved (1) : r4, r5, r6, r7, lr 73ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// -------------------------------------------- 74ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPR callee-saved (2) : r8, r10, r11 75a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// -------------------------------------------- 76a8e2989ece6dc46df59b0768184028257f913843Evan Cheng /// DPR callee-saved : d8 - d15 77f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// 78f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// Also see AlignedDPRCSRegs below. Not all D-regs need to go in area 3. 79f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// Some may be spilled after the stack has been realigned. 80ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS1Offset; 81ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS2Offset; 82a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned DPRCSOffset; 83a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 84ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// GPRCS1Size, GPRCS2Size, DPRCSSize - Sizes of callee saved register spills 85ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach /// areas. 86ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS1Size; 87ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned GPRCS2Size; 8837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unsigned DPRCSAlignGapSize; 89a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned DPRCSSize; 90a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 91f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// NumAlignedDPRCS2Regs - The number of callee-saved DPRs that are saved in 92f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// the aligned portion of the stack frame. This is always a contiguous 93f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// sequence of D-registers starting from d8. 94f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// 95f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// We do not keep track of the frame indices used for these registers - they 96f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// behave like any other frame index in the aligned stack frame. These 97f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen /// registers also aren't included in DPRCSSize above. 98f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen unsigned NumAlignedDPRCS2Regs; 99f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen 1005de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned PICLabelUId; 101f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 1021e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman /// VarArgsFrameIndex - FrameIndex for start of varargs area. 1031e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman int VarArgsFrameIndex; 1041e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman 10586050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng /// HasITBlocks - True if IT blocks have been inserted. 10686050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng bool HasITBlocks; 10786050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng 10898b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov /// CPEClones - Track constant pool entries clones created by Constant Island 10998b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov /// pass. 11098b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov DenseMap<unsigned, unsigned> CPEClones; 11198b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// ArgumentStackSize - amount of bytes on stack consumed by the arguments 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines /// being passed on the stack 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned ArgumentStackSize; 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 11637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// CoalescedWeights - mapping of basic blocks to the rolling counter of 11737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines /// coalesced weights. 11837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines DenseMap<const MachineBasicBlock*, unsigned> CoalescedWeights; 11937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar /// True if this function has a subset of CSRs that is handled explicitly via 121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar /// copies. 122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool IsSplitCSR; 123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 124a8e2989ece6dc46df59b0768184028257f913843Evan Chengpublic: 125a8e2989ece6dc46df59b0768184028257f913843Evan Cheng ARMFunctionInfo() : 1265e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin isThumb(false), 1275e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin hasThumb2(false), 12837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines ArgRegsSaveSize(0), ReturnRegsCount(0), HasStackFrame(false), 12937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines RestoreSPFromFP(false), 1301f30dcbd8dcf18cabb4be780fcf492869d5dcab9Jim Grosbach LRSpilledForFarJump(false), 131ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0), 13237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines GPRCS1Size(0), GPRCS2Size(0), DPRCSAlignGapSize(0), DPRCSSize(0), 1336948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar NumAlignedDPRCS2Regs(0), PICLabelUId(0), 134de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar VarArgsFrameIndex(0), HasITBlocks(false), IsSplitCSR(false) {} 135a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 136c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines explicit ARMFunctionInfo(MachineFunction &MF); 137a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 138a8e2989ece6dc46df59b0768184028257f913843Evan Cheng bool isThumbFunction() const { return isThumb; } 139f1daf7d8abebd6e0104a6b41a774ccbb19a51c60David Goodwin bool isThumb1OnlyFunction() const { return isThumb && !hasThumb2; } 1405e47a9a6e46bd271eba058fb831da1a1edf8707cDavid Goodwin bool isThumb2Function() const { return isThumb && hasThumb2; } 141a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 142083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy unsigned getStoredByValParamsPadding() const { return StByValParamsPadding; } 143083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy void setStoredByValParamsPadding(unsigned p) { StByValParamsPadding = p; } 144083bc97344d618884ef04bc1ba1fc4ddf14d867dStepan Dyatkovskiy 1454c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar unsigned getArgRegsSaveSize() const { return ArgRegsSaveSize; } 146f65e4932f83ac0c36594d97fca73dc9a9fd26672Stepan Dyatkovskiy void setArgRegsSaveSize(unsigned s) { ArgRegsSaveSize = s; } 147a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 14837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unsigned getReturnRegsCount() const { return ReturnRegsCount; } 14937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines void setReturnRegsCount(unsigned s) { ReturnRegsCount = s; } 15037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 15175e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng bool hasStackFrame() const { return HasStackFrame; } 15275e18c403e4046057cb99accb3afc7cdf6fadd61Evan Cheng void setHasStackFrame(bool s) { HasStackFrame = s; } 15378268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 154ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng bool shouldRestoreSPFromFP() const { return RestoreSPFromFP; } 155ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng void setShouldRestoreSPFromFP(bool s) { RestoreSPFromFP = s; } 156ac096808a3accc516ae7c193c9a2c1392bf3301aEvan Cheng 157f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng bool isLRSpilledForFarJump() const { return LRSpilledForFarJump; } 158f49407b790d8664d8ff9c103931b115ebe9cc96eEvan Cheng void setLRIsSpilledForFarJump(bool s) { LRSpilledForFarJump = s; } 15978268b943669cd0c0e1e874e2a329fcf200bd59bEvan Cheng 160a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getFramePtrSpillOffset() const { return FramePtrSpillOffset; } 161a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setFramePtrSpillOffset(unsigned o) { FramePtrSpillOffset = o; } 162764ab52dd80310a205c9888bf166d09dab858f90Jim Grosbach 163f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen unsigned getNumAlignedDPRCS2Regs() const { return NumAlignedDPRCS2Regs; } 164f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen void setNumAlignedDPRCS2Regs(unsigned n) { NumAlignedDPRCS2Regs = n; } 165f06f6f50e9844b88cfbb9fb896fff9c3a752966bJakob Stoklund Olesen 166ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea1Offset() const { return GPRCS1Offset; } 167ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea2Offset() const { return GPRCS2Offset; } 168a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getDPRCalleeSavedAreaOffset() const { return DPRCSOffset; } 169a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 170ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea1Offset(unsigned o) { GPRCS1Offset = o; } 171ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea2Offset(unsigned o) { GPRCS2Offset = o; } 172a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setDPRCalleeSavedAreaOffset(unsigned o) { DPRCSOffset = o; } 173a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 174ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea1Size() const { return GPRCS1Size; } 175ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach unsigned getGPRCalleeSavedArea2Size() const { return GPRCS2Size; } 17637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unsigned getDPRCalleeSavedGapSize() const { return DPRCSAlignGapSize; } 177a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getDPRCalleeSavedAreaSize() const { return DPRCSSize; } 178a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 179ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea1Size(unsigned s) { GPRCS1Size = s; } 180ab3d00e5350fd4c097e2a5b077da7584692029a7Jim Grosbach void setGPRCalleeSavedArea2Size(unsigned s) { GPRCS2Size = s; } 18137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines void setDPRCalleeSavedGapSize(unsigned s) { DPRCSAlignGapSize = s; } 182a8e2989ece6dc46df59b0768184028257f913843Evan Cheng void setDPRCalleeSavedAreaSize(unsigned s) { DPRCSSize = s; } 183a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 18436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned getArgumentStackSize() const { return ArgumentStackSize; } 18536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void setArgumentStackSize(unsigned size) { ArgumentStackSize = size; } 18636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1875de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng void initPICLabelUId(unsigned UId) { 1885de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng PICLabelUId = UId; 189f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 190f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 1915de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned getNumPICLabels() const { 1925de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng return PICLabelUId; 193f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 194f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng 1955de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng unsigned createPICLabelUId() { 1965de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng return PICLabelUId++; 197f1bbb9577a42cf7dc3079412f1dd7683e3a03665Evan Cheng } 1981e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman 1991e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } 2001e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } 20186050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng 20286050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng bool hasITBlocks() const { return HasITBlocks; } 20386050dc8cc0aaea8c9dfeb89de02cafbd7f48d92Evan Cheng void setHasITBlocks(bool h) { HasITBlocks = h; } 20498b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool isSplitCSR() const { return IsSplitCSR; } 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void setIsSplitCSR(bool s) { IsSplitCSR = s; } 207de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 20898b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov void recordCPEClone(unsigned CPIdx, unsigned CPCloneIdx) { 20998b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov if (!CPEClones.insert(std::make_pair(CPCloneIdx, CPIdx)).second) 210c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines llvm_unreachable("Duplicate entries!"); 21198b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov } 21298b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov 21398b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov unsigned getOriginalCPIdx(unsigned CloneIdx) const { 21498b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov DenseMap<unsigned, unsigned>::const_iterator I = CPEClones.find(CloneIdx); 21598b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov if (I != CPEClones.end()) 21698b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov return I->second; 21798b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov else 21898b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov return -1U; 21998b928ea71576c243bdb203879d966be9cde5f3cAnton Korobeynikov } 22037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 22137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines DenseMap<const MachineBasicBlock*, unsigned>::iterator getCoalescedWeight( 22237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines MachineBasicBlock* MBB) { 22337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines auto It = CoalescedWeights.find(MBB); 22437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines if (It == CoalescedWeights.end()) { 22537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines It = CoalescedWeights.insert(std::make_pair(MBB, 0)).first; 22637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 22737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return It; 22837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 229a8e2989ece6dc46df59b0768184028257f913843Evan Cheng}; 230a8e2989ece6dc46df59b0768184028257f913843Evan Cheng} // End llvm namespace 231a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 23237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif 233