131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- ARMConstantPoolValue.h - ARM constantpool value ---------*- 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 implements the ARM specific constantpool value class. 11a8e2989ece6dc46df59b0768184028257f913843Evan Cheng// 12a8e2989ece6dc46df59b0768184028257f913843Evan Cheng//===----------------------------------------------------------------------===// 13a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 14a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#ifndef LLVM_TARGET_ARM_CONSTANTPOOLVALUE_H 15a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#define LLVM_TARGET_ARM_CONSTANTPOOLVALUE_H 16a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 17a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#include "llvm/CodeGen/MachineConstantPool.h" 183a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach#include "llvm/Support/ErrorHandling.h" 19f4a7bf4ec3faf80a9c890408d574a3d2e7ed1e1eDaniel Dunbar#include <cstddef> 20a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 21a8e2989ece6dc46df59b0768184028257f913843Evan Chengnamespace llvm { 22a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 2328989a8ddc665dce4dde368e8c000a5769871b63Bob Wilsonclass BlockAddress; 244dd9b091cceaa62f72ed8370f8a946fbe474d8a2Bill Wendlingclass Constant; 25dc2fbddd9d204e904b8e61d1da1428579e7c55afDan Gohmanclass GlobalValue; 261d0be15f89cb5056e20e2d24faa8d6afb1573bcaOwen Andersonclass LLVMContext; 274dd9b091cceaa62f72ed8370f8a946fbe474d8a2Bill Wendlingclass MachineBasicBlock; 28dc2fbddd9d204e904b8e61d1da1428579e7c55afDan Gohman 293fb2b1ede30193b59a651328a946174196b20610Jim Grosbachnamespace ARMCP { 303fb2b1ede30193b59a651328a946174196b20610Jim Grosbach enum ARMCPKind { 313fb2b1ede30193b59a651328a946174196b20610Jim Grosbach CPValue, 3228989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson CPExtSymbol, 3328989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson CPBlockAddress, 344dd9b091cceaa62f72ed8370f8a946fbe474d8a2Bill Wendling CPLSDA, 354dd9b091cceaa62f72ed8370f8a946fbe474d8a2Bill Wendling CPMachineBasicBlock 363fb2b1ede30193b59a651328a946174196b20610Jim Grosbach }; 373a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach 383a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach enum ARMCPModifier { 393a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach no_modifier, 403a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach TLSGD, 413a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach GOT, 423a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach GOTOFF, 433a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach GOTTPOFF, 443a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach TPOFF 453a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach }; 463fb2b1ede30193b59a651328a946174196b20610Jim Grosbach} 473fb2b1ede30193b59a651328a946174196b20610Jim Grosbach 48a8e2989ece6dc46df59b0768184028257f913843Evan Cheng/// ARMConstantPoolValue - ARM specific constantpool value. This is used to 4931ba10b7431de1c320c6027d86d4592d6fde4a8fBob Wilson/// represent PC-relative displacement between the address of the load 5028989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson/// instruction and the constant being loaded, i.e. (&GV-(LPIC+8)). 51a8e2989ece6dc46df59b0768184028257f913843Evan Chengclass ARMConstantPoolValue : public MachineConstantPoolValue { 52a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned LabelId; // Label id of the load. 5328989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson ARMCP::ARMCPKind Kind; // Kind of constant. 5431ba10b7431de1c320c6027d86d4592d6fde4a8fBob Wilson unsigned char PCAdjust; // Extra adjustment if constantpool is pc-relative. 55a8e2989ece6dc46df59b0768184028257f913843Evan Cheng // 8 for ARM, 4 for Thumb. 563a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach ARMCP::ARMCPModifier Modifier; // GV modifier i.e. (&GV(modifier)-(LPIC+8)) 5764f4fa5e0eb505eec3a72041bec6b3a7f7739dedLauro Ramos Venancio bool AddCurrentAddress; 58a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 59f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendlingprotected: 60f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling ARMConstantPoolValue(Type *Ty, unsigned id, ARMCP::ARMCPKind Kind, 61f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling unsigned char PCAdj, ARMCP::ARMCPModifier Modifier, 62f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling bool AddCurrentAddress); 63f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 64ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling ARMConstantPoolValue(LLVMContext &C, unsigned id, ARMCP::ARMCPKind Kind, 65ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling unsigned char PCAdj, ARMCP::ARMCPModifier Modifier, 66ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling bool AddCurrentAddress); 67a8e2989ece6dc46df59b0768184028257f913843Evan Chengpublic: 68ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling virtual ~ARMConstantPoolValue(); 690ae4a3357a556261f25b1584a2d9914637c69e65Lauro Ramos Venancio 703a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach ARMCP::ARMCPModifier getModifier() const { return Modifier; } 71d98f838284b7c539f274bb21820b2df3588a295eBill Wendling const char *getModifierText() const; 723a2429a86c50a89c3321c741b85fa7d1fe668b38Jim Grosbach bool hasModifier() const { return Modifier != ARMCP::no_modifier; } 73d98f838284b7c539f274bb21820b2df3588a295eBill Wendling 7464f4fa5e0eb505eec3a72041bec6b3a7f7739dedLauro Ramos Venancio bool mustAddCurrentAddress() const { return AddCurrentAddress; } 75d98f838284b7c539f274bb21820b2df3588a295eBill Wendling 76a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned getLabelId() const { return LabelId; } 77a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned char getPCAdjustment() const { return PCAdjust; } 78d98f838284b7c539f274bb21820b2df3588a295eBill Wendling 7928989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson bool isGlobalValue() const { return Kind == ARMCP::CPValue; } 8028989a8ddc665dce4dde368e8c000a5769871b63Bob Wilson bool isExtSymbol() const { return Kind == ARMCP::CPExtSymbol; } 81f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling bool isBlockAddress() const { return Kind == ARMCP::CPBlockAddress; } 82d98f838284b7c539f274bb21820b2df3588a295eBill Wendling bool isLSDA() const { return Kind == ARMCP::CPLSDA; } 839c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling bool isMachineBasicBlock() const{ return Kind == ARMCP::CPMachineBasicBlock; } 84a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 85cd3c7cb9159bf80e6847c6d3c182ee4ae5e02281Jim Grosbach virtual unsigned getRelocationInfo() const { return 2; } 86cb4596364369ea36ff5675eb12fc62d0c6f1f0ddChris Lattner 87a8e2989ece6dc46df59b0768184028257f913843Evan Cheng virtual int getExistingMachineCPValue(MachineConstantPool *CP, 88a8e2989ece6dc46df59b0768184028257f913843Evan Cheng unsigned Alignment); 89a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 905405d58e21402a8ba3aaaa580ca65155bee00443Jim Grosbach virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID); 91a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 92f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling /// hasSameValue - Return true if this ARM constpool value can share the same 93f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling /// constantpool entry as another ARM constpool value. 94f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling virtual bool hasSameValue(ARMConstantPoolValue *ACPV); 9578e5c1140adc926e7c004748c1c912bfddd875b4Evan Cheng 96405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling bool equals(const ARMConstantPoolValue *A) const { 97405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling return this->LabelId == A->LabelId && 98405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling this->PCAdjust == A->PCAdjust && 99405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling this->Modifier == A->Modifier; 100405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling } 101405ca137a1bf5b08fbda3ba086fb013537ce8662Bill Wendling 102f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling virtual void print(raw_ostream &O) const; 1035be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng void print(raw_ostream *O) const { if (O) print(*O); } 1045be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng void dump() const; 105f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 106f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling static bool classof(const ARMConstantPoolValue *) { return true; } 107a8e2989ece6dc46df59b0768184028257f913843Evan Cheng}; 1085be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng 1095be59eace58e5a92bb851c4885f9cea7236ac30fEvan Chenginline raw_ostream &operator<<(raw_ostream &O, const ARMConstantPoolValue &V) { 1105be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng V.print(O); 1115be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng return O; 112a8e2989ece6dc46df59b0768184028257f913843Evan Cheng} 113a8e2989ece6dc46df59b0768184028257f913843Evan Cheng 114f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling/// ARMConstantPoolConstant - ARM-specific constant pool values for Constants, 115f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling/// Functions, and BlockAddresses. 116f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendlingclass ARMConstantPoolConstant : public ARMConstantPoolValue { 117f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling const Constant *CVal; // Constant being loaded. 118f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 119f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling ARMConstantPoolConstant(const Constant *C, 120f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling unsigned ID, 121f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling ARMCP::ARMCPKind Kind, 122f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling unsigned char PCAdj, 123f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling ARMCP::ARMCPModifier Modifier, 124f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling bool AddCurrentAddress); 1253e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMConstantPoolConstant(Type *Ty, const Constant *C, 1263e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling unsigned ID, 1273e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMCP::ARMCPKind Kind, 1283e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling unsigned char PCAdj, 1293e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMCP::ARMCPModifier Modifier, 1303e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling bool AddCurrentAddress); 1313e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling 132f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendlingpublic: 133f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID); 1343e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling static ARMConstantPoolConstant *Create(const GlobalValue *GV, 1353e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMCP::ARMCPModifier Modifier); 136029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID, 137029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling ARMCP::ARMCPKind Kind, 138029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling unsigned char PCAdj); 1393e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID, 1403e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMCP::ARMCPKind Kind, 1413e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling unsigned char PCAdj, 1423e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling ARMCP::ARMCPModifier Modifier, 1433e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling bool AddCurrentAddress); 144f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 145f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling const GlobalValue *getGV() const; 1463e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling const BlockAddress *getBlockAddress() const; 1473e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling 1483e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling virtual int getExistingMachineCPValue(MachineConstantPool *CP, 1493e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling unsigned Alignment); 150f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 151f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling /// hasSameValue - Return true if this ARM constpool value can share the same 152f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling /// constantpool entry as another ARM constpool value. 153f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling virtual bool hasSameValue(ARMConstantPoolValue *ACPV); 154f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 155f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID); 156f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 157f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling virtual void print(raw_ostream &O) const; 158f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling static bool classof(const ARMConstantPoolValue *APV) { 159f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling return APV->isGlobalValue() || APV->isBlockAddress() || APV->isLSDA(); 160f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling } 161f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling static bool classof(const ARMConstantPoolConstant *) { return true; } 162f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling}; 163f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling 164ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling/// ARMConstantPoolSymbol - ARM-specific constantpool values for external 165ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling/// symbols. 166ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendlingclass ARMConstantPoolSymbol : public ARMConstantPoolValue { 167ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling const char *S; // ExtSymbol being loaded. 168ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 169ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling ARMConstantPoolSymbol(LLVMContext &C, const char *s, unsigned id, 170ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling unsigned char PCAdj, ARMCP::ARMCPModifier Modifier, 171ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling bool AddCurrentAddress); 172ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 173ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendlingpublic: 174ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling ~ARMConstantPoolSymbol(); 175ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 176ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling static ARMConstantPoolSymbol *Create(LLVMContext &C, const char *s, 177fe31e673506ef9a1080eaa684b43b34178c6f447Bill Wendling unsigned ID, unsigned char PCAdj); 178fe31e673506ef9a1080eaa684b43b34178c6f447Bill Wendling 179ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling const char *getSymbol() const { return S; } 180ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 181ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling virtual int getExistingMachineCPValue(MachineConstantPool *CP, 182ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling unsigned Alignment); 183ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 184ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID); 185ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 186ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling /// hasSameValue - Return true if this ARM constpool value can share the same 187ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling /// constantpool entry as another ARM constpool value. 188ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling virtual bool hasSameValue(ARMConstantPoolValue *ACPV); 189ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 190ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling virtual void print(raw_ostream &O) const; 191ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 192ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling static bool classof(const ARMConstantPoolValue *ACPV) { 193ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling return ACPV->isExtSymbol(); 194ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling } 195ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling static bool classof(const ARMConstantPoolSymbol *) { return true; } 196ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling}; 197ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling 1989c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling/// ARMConstantPoolMBB - ARM-specific constantpool value of a machine basic 1999c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling/// block. 2009c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendlingclass ARMConstantPoolMBB : public ARMConstantPoolValue { 2013320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling const MachineBasicBlock *MBB; // Machine basic block. 2029c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2033320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling ARMConstantPoolMBB(LLVMContext &C, const MachineBasicBlock *mbb, unsigned id, 2049c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling unsigned char PCAdj, ARMCP::ARMCPModifier Modifier, 2059c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling bool AddCurrentAddress); 2069c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2079c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendlingpublic: 2083320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling static ARMConstantPoolMBB *Create(LLVMContext &C, 2093320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling const MachineBasicBlock *mbb, 2109c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling unsigned ID, unsigned char PCAdj); 2119c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2129c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling const MachineBasicBlock *getMBB() const { return MBB; } 2139c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2149c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling virtual int getExistingMachineCPValue(MachineConstantPool *CP, 2159c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling unsigned Alignment); 2169c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2179c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID); 2189c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2199c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling /// hasSameValue - Return true if this ARM constpool value can share the same 2209c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling /// constantpool entry as another ARM constpool value. 2219c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling virtual bool hasSameValue(ARMConstantPoolValue *ACPV); 2229c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2239c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling virtual void print(raw_ostream &O) const; 2249c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2259c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling static bool classof(const ARMConstantPoolValue *ACPV) { 2269c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling return ACPV->isMachineBasicBlock(); 2279c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling } 2289c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling static bool classof(const ARMConstantPoolMBB *) { return true; } 2299c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling}; 2309c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling 2315be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng} // End llvm namespace 2325be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng 233a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#endif 234