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;
105a8e2989ece6dc46df59b0768184028257f913843Evan Cheng};
1065be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng
1075be59eace58e5a92bb851c4885f9cea7236ac30fEvan Chenginline raw_ostream &operator<<(raw_ostream &O, const ARMConstantPoolValue &V) {
1085be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng  V.print(O);
1095be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng  return O;
110a8e2989ece6dc46df59b0768184028257f913843Evan Cheng}
111a8e2989ece6dc46df59b0768184028257f913843Evan Cheng
112f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling/// ARMConstantPoolConstant - ARM-specific constant pool values for Constants,
113f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling/// Functions, and BlockAddresses.
114f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendlingclass ARMConstantPoolConstant : public ARMConstantPoolValue {
115f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  const Constant *CVal;         // Constant being loaded.
116f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
117f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  ARMConstantPoolConstant(const Constant *C,
118f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling                          unsigned ID,
119f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling                          ARMCP::ARMCPKind Kind,
120f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling                          unsigned char PCAdj,
121f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling                          ARMCP::ARMCPModifier Modifier,
122f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling                          bool AddCurrentAddress);
1233e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling  ARMConstantPoolConstant(Type *Ty, const Constant *C,
1243e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                          unsigned ID,
1253e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                          ARMCP::ARMCPKind Kind,
1263e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                          unsigned char PCAdj,
1273e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                          ARMCP::ARMCPModifier Modifier,
1283e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                          bool AddCurrentAddress);
1293e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling
130f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendlingpublic:
131f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID);
1323e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling  static ARMConstantPoolConstant *Create(const GlobalValue *GV,
1333e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                         ARMCP::ARMCPModifier Modifier);
134029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling  static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID,
135029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling                                         ARMCP::ARMCPKind Kind,
136029e93888d2ce07f4a81d2a927fd2e3cfe673afdBill Wendling                                         unsigned char PCAdj);
1373e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling  static ARMConstantPoolConstant *Create(const Constant *C, unsigned ID,
1383e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                         ARMCP::ARMCPKind Kind,
1393e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                         unsigned char PCAdj,
1403e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                         ARMCP::ARMCPModifier Modifier,
1413e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                         bool AddCurrentAddress);
142f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
143f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  const GlobalValue *getGV() const;
1443e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling  const BlockAddress *getBlockAddress() const;
1453e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling
1463e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling  virtual int getExistingMachineCPValue(MachineConstantPool *CP,
1473e944e38ea2d7585d2ccbf1557746d6cf7132b23Bill Wendling                                        unsigned Alignment);
148f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
149f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  /// hasSameValue - Return true if this ARM constpool value can share the same
150f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  /// constantpool entry as another ARM constpool value.
151f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  virtual bool hasSameValue(ARMConstantPoolValue *ACPV);
152f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
153f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID);
154f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
155f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  virtual void print(raw_ostream &O) const;
156f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  static bool classof(const ARMConstantPoolValue *APV) {
157f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling    return APV->isGlobalValue() || APV->isBlockAddress() || APV->isLSDA();
158f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling  }
159f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling};
160f2b76aae2beec4780c271984070ad15a07bd2d50Bill Wendling
161ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling/// ARMConstantPoolSymbol - ARM-specific constantpool values for external
162ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling/// symbols.
163ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendlingclass ARMConstantPoolSymbol : public ARMConstantPoolValue {
164791dbb3e5fbe5910b84e3f2bd26cf272e2bde128Benjamin Kramer  const std::string S;          // ExtSymbol being loaded.
165ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
166ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  ARMConstantPoolSymbol(LLVMContext &C, const char *s, unsigned id,
167ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling                        unsigned char PCAdj, ARMCP::ARMCPModifier Modifier,
168ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling                        bool AddCurrentAddress);
169ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
170ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendlingpublic:
171ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  static ARMConstantPoolSymbol *Create(LLVMContext &C, const char *s,
172fe31e673506ef9a1080eaa684b43b34178c6f447Bill Wendling                                       unsigned ID, unsigned char PCAdj);
173fe31e673506ef9a1080eaa684b43b34178c6f447Bill Wendling
174791dbb3e5fbe5910b84e3f2bd26cf272e2bde128Benjamin Kramer  const char *getSymbol() const { return S.c_str(); }
175ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
176ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  virtual int getExistingMachineCPValue(MachineConstantPool *CP,
177ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling                                        unsigned Alignment);
178ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
179ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID);
180ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
181ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  /// hasSameValue - Return true if this ARM constpool value can share the same
182ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  /// constantpool entry as another ARM constpool value.
183ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  virtual bool hasSameValue(ARMConstantPoolValue *ACPV);
184ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
185ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  virtual void print(raw_ostream &O) const;
186ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
187ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  static bool classof(const ARMConstantPoolValue *ACPV) {
188ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling    return ACPV->isExtSymbol();
189ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling  }
190ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling};
191ff4a8023ecf328047c8f98c7f42bf5e8b46b2f11Bill Wendling
1929c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling/// ARMConstantPoolMBB - ARM-specific constantpool value of a machine basic
1939c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling/// block.
1949c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendlingclass ARMConstantPoolMBB : public ARMConstantPoolValue {
1953320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling  const MachineBasicBlock *MBB; // Machine basic block.
1969c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
1973320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling  ARMConstantPoolMBB(LLVMContext &C, const MachineBasicBlock *mbb, unsigned id,
1989c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling                     unsigned char PCAdj, ARMCP::ARMCPModifier Modifier,
1999c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling                     bool AddCurrentAddress);
2009c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2019c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendlingpublic:
2023320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling  static ARMConstantPoolMBB *Create(LLVMContext &C,
2033320f2a3bfd4daec23ba7ceb50525140cc6316daBill Wendling                                    const MachineBasicBlock *mbb,
2049c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling                                    unsigned ID, unsigned char PCAdj);
2059c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2069c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  const MachineBasicBlock *getMBB() const { return MBB; }
2079c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2089c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  virtual int getExistingMachineCPValue(MachineConstantPool *CP,
2099c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling                                        unsigned Alignment);
2109c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2119c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  virtual void addSelectionDAGCSEId(FoldingSetNodeID &ID);
2129c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2139c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  /// hasSameValue - Return true if this ARM constpool value can share the same
2149c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  /// constantpool entry as another ARM constpool value.
2159c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  virtual bool hasSameValue(ARMConstantPoolValue *ACPV);
2169c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2179c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  virtual void print(raw_ostream &O) const;
2189c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2199c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  static bool classof(const ARMConstantPoolValue *ACPV) {
2209c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling    return ACPV->isMachineBasicBlock();
2219c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling  }
2229c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling};
2239c18f51daaf89b9c706aa0557bede2cbb0debb69Bill Wendling
2245be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng} // End llvm namespace
2255be59eace58e5a92bb851c4885f9cea7236ac30fEvan Cheng
226a8e2989ece6dc46df59b0768184028257f913843Evan Cheng#endif
227