1076468c0SEugene Zelenko //===- ARMConstantPoolValue.cpp - ARM constantpool value ------------------===//
210043e21SEvan Cheng //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
610043e21SEvan Cheng //
710043e21SEvan Cheng //===----------------------------------------------------------------------===//
810043e21SEvan Cheng //
910043e21SEvan Cheng // This file implements the ARM specific constantpool value class.
1010043e21SEvan Cheng //
1110043e21SEvan Cheng //===----------------------------------------------------------------------===//
1210043e21SEvan Cheng
1310043e21SEvan Cheng #include "ARMConstantPoolValue.h"
1410043e21SEvan Cheng #include "llvm/ADT/FoldingSet.h"
15ed0881b2SChandler Carruth #include "llvm/CodeGen/MachineBasicBlock.h"
16432a3883SNico Weber #include "llvm/Config/llvm-config.h"
179fb823bbSChandler Carruth #include "llvm/IR/Constant.h"
189fb823bbSChandler Carruth #include "llvm/IR/Constants.h"
199fb823bbSChandler Carruth #include "llvm/IR/GlobalValue.h"
201d7b4136SReid Kleckner #include "llvm/IR/GlobalVariable.h"
219fb823bbSChandler Carruth #include "llvm/IR/Type.h"
22e79c077eSEugene Zelenko #include "llvm/Support/Casting.h"
23e79c077eSEugene Zelenko #include "llvm/Support/Compiler.h"
24e79c077eSEugene Zelenko #include "llvm/Support/ErrorHandling.h"
250c19df48SChris Lattner #include "llvm/Support/raw_ostream.h"
26e79c077eSEugene Zelenko
2710043e21SEvan Cheng using namespace llvm;
2810043e21SEvan Cheng
29396c211aSBill Wendling //===----------------------------------------------------------------------===//
30396c211aSBill Wendling // ARMConstantPoolValue
31396c211aSBill Wendling //===----------------------------------------------------------------------===//
32396c211aSBill Wendling
ARMConstantPoolValue(Type * Ty,unsigned id,ARMCP::ARMCPKind kind,unsigned char PCAdj,ARMCP::ARMCPModifier modifier,bool addCurrentAddress)33396c211aSBill Wendling ARMConstantPoolValue::ARMConstantPoolValue(Type *Ty, unsigned id,
34396c211aSBill Wendling ARMCP::ARMCPKind kind,
35396c211aSBill Wendling unsigned char PCAdj,
36396c211aSBill Wendling ARMCP::ARMCPModifier modifier,
37396c211aSBill Wendling bool addCurrentAddress)
384a4772faSBill Wendling : MachineConstantPoolValue(Ty), LabelId(id), Kind(kind),
39f117a35dSBill Wendling PCAdjust(PCAdj), Modifier(modifier),
40f117a35dSBill Wendling AddCurrentAddress(addCurrentAddress) {}
41396c211aSBill Wendling
ARMConstantPoolValue(LLVMContext & C,unsigned id,ARMCP::ARMCPKind kind,unsigned char PCAdj,ARMCP::ARMCPModifier modifier,bool addCurrentAddress)42d7fa0167SBill Wendling ARMConstantPoolValue::ARMConstantPoolValue(LLVMContext &C, unsigned id,
43d7fa0167SBill Wendling ARMCP::ARMCPKind kind,
44d7fa0167SBill Wendling unsigned char PCAdj,
45d7fa0167SBill Wendling ARMCP::ARMCPModifier modifier,
46d7fa0167SBill Wendling bool addCurrentAddress)
47d7fa0167SBill Wendling : MachineConstantPoolValue((Type*)Type::getInt32Ty(C)),
489ff05f74SBill Wendling LabelId(id), Kind(kind), PCAdjust(PCAdj), Modifier(modifier),
49d7fa0167SBill Wendling AddCurrentAddress(addCurrentAddress) {}
50d7fa0167SBill Wendling
51e79c077eSEugene Zelenko ARMConstantPoolValue::~ARMConstantPoolValue() = default;
52d7fa0167SBill Wendling
getModifierText() const535b00770cSMehdi Amini StringRef ARMConstantPoolValue::getModifierText() const {
54e8e4dbf4SBill Wendling switch (Modifier) {
55e8e4dbf4SBill Wendling // FIXME: Are these case sensitive? It'd be nice to lower-case all the
56e8e4dbf4SBill Wendling // strings if that's legal.
57ce4eee49SSaleem Abdulrasool case ARMCP::no_modifier:
58ce4eee49SSaleem Abdulrasool return "none";
59ce4eee49SSaleem Abdulrasool case ARMCP::TLSGD:
60ce4eee49SSaleem Abdulrasool return "tlsgd";
61ce4eee49SSaleem Abdulrasool case ARMCP::GOT_PREL:
62ce4eee49SSaleem Abdulrasool return "GOT_PREL";
63ce4eee49SSaleem Abdulrasool case ARMCP::GOTTPOFF:
64ce4eee49SSaleem Abdulrasool return "gottpoff";
65ce4eee49SSaleem Abdulrasool case ARMCP::TPOFF:
66ce4eee49SSaleem Abdulrasool return "tpoff";
678331aaeeSOliver Stannard case ARMCP::SBREL:
688331aaeeSOliver Stannard return "SBREL";
69532dcbc2SSaleem Abdulrasool case ARMCP::SECREL:
70532dcbc2SSaleem Abdulrasool return "secrel32";
71e8e4dbf4SBill Wendling }
72486df738SDavid Blaikie llvm_unreachable("Unknown modifier!");
73e8e4dbf4SBill Wendling }
74e8e4dbf4SBill Wendling
getExistingMachineCPValue(MachineConstantPool * CP,Align Alignment)7510043e21SEvan Cheng int ARMConstantPoolValue::getExistingMachineCPValue(MachineConstantPool *CP,
76*8c72b027SCraig Topper Align Alignment) {
77e55c556aSCraig Topper llvm_unreachable("Shouldn't be calling this directly!");
7810043e21SEvan Cheng }
7910043e21SEvan Cheng
8010043e21SEvan Cheng void
addSelectionDAGCSEId(FoldingSetNodeID & ID)81af136f71SJim Grosbach ARMConstantPoolValue::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
8210043e21SEvan Cheng ID.AddInteger(LabelId);
8310043e21SEvan Cheng ID.AddInteger(PCAdjust);
8410043e21SEvan Cheng }
8510043e21SEvan Cheng
867ff83196SEvan Cheng bool
hasSameValue(ARMConstantPoolValue * ACPV)877ff83196SEvan Cheng ARMConstantPoolValue::hasSameValue(ARMConstantPoolValue *ACPV) {
887ff83196SEvan Cheng if (ACPV->Kind == Kind &&
897ff83196SEvan Cheng ACPV->PCAdjust == PCAdjust &&
90df43264cSTim Northover ACPV->Modifier == Modifier &&
91df43264cSTim Northover ACPV->LabelId == LabelId &&
92df43264cSTim Northover ACPV->AddCurrentAddress == AddCurrentAddress) {
937ff83196SEvan Cheng // Two PC relative constpool entries containing the same GV address or
947ff83196SEvan Cheng // external symbols. FIXME: What about blockaddress?
957ff83196SEvan Cheng if (Kind == ARMCP::CPValue || Kind == ARMCP::CPExtSymbol)
967ff83196SEvan Cheng return true;
977ff83196SEvan Cheng }
987ff83196SEvan Cheng return false;
997ff83196SEvan Cheng }
1007ff83196SEvan Cheng
101615eb470SAaron Ballman #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
dump() const102eb2a2546SYaron Keren LLVM_DUMP_METHOD void ARMConstantPoolValue::dump() const {
103a6f074fbSChris Lattner errs() << " " << *this;
104de9dbc55SEvan Cheng }
1058c209aa8SMatthias Braun #endif
106de9dbc55SEvan Cheng
print(raw_ostream & O) const1070c19df48SChris Lattner void ARMConstantPoolValue::print(raw_ostream &O) const {
108a942ad42SJim Grosbach if (Modifier) O << "(" << getModifierText() << ")";
109c39c12a3SLauro Ramos Venancio if (PCAdjust != 0) {
1106dd08b66SEvan Cheng O << "-(LPC" << LabelId << "+" << (unsigned)PCAdjust;
1116dd08b66SEvan Cheng if (AddCurrentAddress) O << "-.";
112c39c12a3SLauro Ramos Venancio O << ")";
113c39c12a3SLauro Ramos Venancio }
11410043e21SEvan Cheng }
115396c211aSBill Wendling
116396c211aSBill Wendling //===----------------------------------------------------------------------===//
117396c211aSBill Wendling // ARMConstantPoolConstant
118396c211aSBill Wendling //===----------------------------------------------------------------------===//
119396c211aSBill Wendling
ARMConstantPoolConstant(Type * Ty,const Constant * C,unsigned ID,ARMCP::ARMCPKind Kind,unsigned char PCAdj,ARMCP::ARMCPModifier Modifier,bool AddCurrentAddress)120f117a35dSBill Wendling ARMConstantPoolConstant::ARMConstantPoolConstant(Type *Ty,
121f117a35dSBill Wendling const Constant *C,
122f117a35dSBill Wendling unsigned ID,
123f117a35dSBill Wendling ARMCP::ARMCPKind Kind,
124f117a35dSBill Wendling unsigned char PCAdj,
125f117a35dSBill Wendling ARMCP::ARMCPModifier Modifier,
126f117a35dSBill Wendling bool AddCurrentAddress)
127f117a35dSBill Wendling : ARMConstantPoolValue(Ty, ID, Kind, PCAdj, Modifier, AddCurrentAddress),
128f117a35dSBill Wendling CVal(C) {}
129f117a35dSBill Wendling
ARMConstantPoolConstant(const Constant * C,unsigned ID,ARMCP::ARMCPKind Kind,unsigned char PCAdj,ARMCP::ARMCPModifier Modifier,bool AddCurrentAddress)130396c211aSBill Wendling ARMConstantPoolConstant::ARMConstantPoolConstant(const Constant *C,
131396c211aSBill Wendling unsigned ID,
132396c211aSBill Wendling ARMCP::ARMCPKind Kind,
133396c211aSBill Wendling unsigned char PCAdj,
134396c211aSBill Wendling ARMCP::ARMCPModifier Modifier,
135396c211aSBill Wendling bool AddCurrentAddress)
136396c211aSBill Wendling : ARMConstantPoolValue((Type*)C->getType(), ID, Kind, PCAdj, Modifier,
137396c211aSBill Wendling AddCurrentAddress),
138396c211aSBill Wendling CVal(C) {}
139396c211aSBill Wendling
ARMConstantPoolConstant(const GlobalVariable * GV,const Constant * C)1409abb2fa5SJames Molloy ARMConstantPoolConstant::ARMConstantPoolConstant(const GlobalVariable *GV,
1419abb2fa5SJames Molloy const Constant *C)
1429abb2fa5SJames Molloy : ARMConstantPoolValue((Type *)C->getType(), 0, ARMCP::CPPromotedGlobal, 0,
1435fba8ba9SSaleem Abdulrasool ARMCP::no_modifier, false), CVal(C) {
1445fba8ba9SSaleem Abdulrasool GVars.insert(GV);
1455fba8ba9SSaleem Abdulrasool }
1469abb2fa5SJames Molloy
147396c211aSBill Wendling ARMConstantPoolConstant *
Create(const Constant * C,unsigned ID)148396c211aSBill Wendling ARMConstantPoolConstant::Create(const Constant *C, unsigned ID) {
149396c211aSBill Wendling return new ARMConstantPoolConstant(C, ID, ARMCP::CPValue, 0,
150396c211aSBill Wendling ARMCP::no_modifier, false);
151396c211aSBill Wendling }
152396c211aSBill Wendling
15367225563SBill Wendling ARMConstantPoolConstant *
Create(const GlobalVariable * GVar,const Constant * Initializer)1549abb2fa5SJames Molloy ARMConstantPoolConstant::Create(const GlobalVariable *GVar,
1559abb2fa5SJames Molloy const Constant *Initializer) {
1569abb2fa5SJames Molloy return new ARMConstantPoolConstant(GVar, Initializer);
1579abb2fa5SJames Molloy }
1589abb2fa5SJames Molloy
1599abb2fa5SJames Molloy ARMConstantPoolConstant *
Create(const GlobalValue * GV,ARMCP::ARMCPModifier Modifier)160f117a35dSBill Wendling ARMConstantPoolConstant::Create(const GlobalValue *GV,
161f117a35dSBill Wendling ARMCP::ARMCPModifier Modifier) {
162f117a35dSBill Wendling return new ARMConstantPoolConstant((Type*)Type::getInt32Ty(GV->getContext()),
163f117a35dSBill Wendling GV, 0, ARMCP::CPValue, 0,
164f117a35dSBill Wendling Modifier, false);
165f117a35dSBill Wendling }
166f117a35dSBill Wendling
167f117a35dSBill Wendling ARMConstantPoolConstant *
Create(const Constant * C,unsigned ID,ARMCP::ARMCPKind Kind,unsigned char PCAdj)16867225563SBill Wendling ARMConstantPoolConstant::Create(const Constant *C, unsigned ID,
16967225563SBill Wendling ARMCP::ARMCPKind Kind, unsigned char PCAdj) {
17067225563SBill Wendling return new ARMConstantPoolConstant(C, ID, Kind, PCAdj,
17167225563SBill Wendling ARMCP::no_modifier, false);
17267225563SBill Wendling }
17367225563SBill Wendling
174f117a35dSBill Wendling ARMConstantPoolConstant *
Create(const Constant * C,unsigned ID,ARMCP::ARMCPKind Kind,unsigned char PCAdj,ARMCP::ARMCPModifier Modifier,bool AddCurrentAddress)175f117a35dSBill Wendling ARMConstantPoolConstant::Create(const Constant *C, unsigned ID,
176f117a35dSBill Wendling ARMCP::ARMCPKind Kind, unsigned char PCAdj,
177f117a35dSBill Wendling ARMCP::ARMCPModifier Modifier,
178f117a35dSBill Wendling bool AddCurrentAddress) {
179f117a35dSBill Wendling return new ARMConstantPoolConstant(C, ID, Kind, PCAdj, Modifier,
180f117a35dSBill Wendling AddCurrentAddress);
181f117a35dSBill Wendling }
182f117a35dSBill Wendling
getGV() const183396c211aSBill Wendling const GlobalValue *ARMConstantPoolConstant::getGV() const {
184f117a35dSBill Wendling return dyn_cast_or_null<GlobalValue>(CVal);
185f117a35dSBill Wendling }
186f117a35dSBill Wendling
getBlockAddress() const187f117a35dSBill Wendling const BlockAddress *ARMConstantPoolConstant::getBlockAddress() const {
188f117a35dSBill Wendling return dyn_cast_or_null<BlockAddress>(CVal);
189f117a35dSBill Wendling }
190f117a35dSBill Wendling
getExistingMachineCPValue(MachineConstantPool * CP,Align Alignment)191f117a35dSBill Wendling int ARMConstantPoolConstant::getExistingMachineCPValue(MachineConstantPool *CP,
192*8c72b027SCraig Topper Align Alignment) {
1935fba8ba9SSaleem Abdulrasool int index =
1945fba8ba9SSaleem Abdulrasool getExistingMachineCPValueImpl<ARMConstantPoolConstant>(CP, Alignment);
1955fba8ba9SSaleem Abdulrasool if (index != -1) {
1965fba8ba9SSaleem Abdulrasool auto *CPV = static_cast<ARMConstantPoolValue*>(
1975fba8ba9SSaleem Abdulrasool CP->getConstants()[index].Val.MachineCPVal);
1985fba8ba9SSaleem Abdulrasool auto *Constant = cast<ARMConstantPoolConstant>(CPV);
1995fba8ba9SSaleem Abdulrasool Constant->GVars.insert(GVars.begin(), GVars.end());
2005fba8ba9SSaleem Abdulrasool }
2015fba8ba9SSaleem Abdulrasool return index;
202396c211aSBill Wendling }
203396c211aSBill Wendling
hasSameValue(ARMConstantPoolValue * ACPV)204396c211aSBill Wendling bool ARMConstantPoolConstant::hasSameValue(ARMConstantPoolValue *ACPV) {
205396c211aSBill Wendling const ARMConstantPoolConstant *ACPC = dyn_cast<ARMConstantPoolConstant>(ACPV);
206f117a35dSBill Wendling return ACPC && ACPC->CVal == CVal && ARMConstantPoolValue::hasSameValue(ACPV);
207396c211aSBill Wendling }
208396c211aSBill Wendling
addSelectionDAGCSEId(FoldingSetNodeID & ID)209396c211aSBill Wendling void ARMConstantPoolConstant::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
210396c211aSBill Wendling ID.AddPointer(CVal);
2115fba8ba9SSaleem Abdulrasool for (const auto *GV : GVars)
2125fba8ba9SSaleem Abdulrasool ID.AddPointer(GV);
213396c211aSBill Wendling ARMConstantPoolValue::addSelectionDAGCSEId(ID);
214396c211aSBill Wendling }
215396c211aSBill Wendling
print(raw_ostream & O) const216396c211aSBill Wendling void ARMConstantPoolConstant::print(raw_ostream &O) const {
217396c211aSBill Wendling O << CVal->getName();
218396c211aSBill Wendling ARMConstantPoolValue::print(O);
219396c211aSBill Wendling }
220d7fa0167SBill Wendling
221d7fa0167SBill Wendling //===----------------------------------------------------------------------===//
222d7fa0167SBill Wendling // ARMConstantPoolSymbol
223d7fa0167SBill Wendling //===----------------------------------------------------------------------===//
224d7fa0167SBill Wendling
ARMConstantPoolSymbol(LLVMContext & C,StringRef s,unsigned id,unsigned char PCAdj,ARMCP::ARMCPModifier Modifier,bool AddCurrentAddress)2255b00770cSMehdi Amini ARMConstantPoolSymbol::ARMConstantPoolSymbol(LLVMContext &C, StringRef s,
2265b00770cSMehdi Amini unsigned id, unsigned char PCAdj,
227d7fa0167SBill Wendling ARMCP::ARMCPModifier Modifier,
228d7fa0167SBill Wendling bool AddCurrentAddress)
229d7fa0167SBill Wendling : ARMConstantPoolValue(C, id, ARMCP::CPExtSymbol, PCAdj, Modifier,
230d7fa0167SBill Wendling AddCurrentAddress),
231adcd0268SBenjamin Kramer S(std::string(s)) {}
232d7fa0167SBill Wendling
Create(LLVMContext & C,StringRef s,unsigned ID,unsigned char PCAdj)2335b00770cSMehdi Amini ARMConstantPoolSymbol *ARMConstantPoolSymbol::Create(LLVMContext &C,
2345b00770cSMehdi Amini StringRef s, unsigned ID,
2355b00770cSMehdi Amini unsigned char PCAdj) {
236c214cb05SBill Wendling return new ARMConstantPoolSymbol(C, s, ID, PCAdj, ARMCP::no_modifier, false);
237c214cb05SBill Wendling }
238c214cb05SBill Wendling
getExistingMachineCPValue(MachineConstantPool * CP,Align Alignment)239d7fa0167SBill Wendling int ARMConstantPoolSymbol::getExistingMachineCPValue(MachineConstantPool *CP,
240*8c72b027SCraig Topper Align Alignment) {
2412ef689caSBenjamin Kramer return getExistingMachineCPValueImpl<ARMConstantPoolSymbol>(CP, Alignment);
242d7fa0167SBill Wendling }
243d7fa0167SBill Wendling
hasSameValue(ARMConstantPoolValue * ACPV)244d7fa0167SBill Wendling bool ARMConstantPoolSymbol::hasSameValue(ARMConstantPoolValue *ACPV) {
245d7fa0167SBill Wendling const ARMConstantPoolSymbol *ACPS = dyn_cast<ARMConstantPoolSymbol>(ACPV);
2469d46110fSBenjamin Kramer return ACPS && ACPS->S == S && ARMConstantPoolValue::hasSameValue(ACPV);
247d7fa0167SBill Wendling }
248d7fa0167SBill Wendling
addSelectionDAGCSEId(FoldingSetNodeID & ID)249d7fa0167SBill Wendling void ARMConstantPoolSymbol::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
2509d46110fSBenjamin Kramer ID.AddString(S);
251d7fa0167SBill Wendling ARMConstantPoolValue::addSelectionDAGCSEId(ID);
252d7fa0167SBill Wendling }
253d7fa0167SBill Wendling
print(raw_ostream & O) const254d7fa0167SBill Wendling void ARMConstantPoolSymbol::print(raw_ostream &O) const {
255d7fa0167SBill Wendling O << S;
256d7fa0167SBill Wendling ARMConstantPoolValue::print(O);
257d7fa0167SBill Wendling }
2586dbc9fe8SBill Wendling
2596dbc9fe8SBill Wendling //===----------------------------------------------------------------------===//
2606dbc9fe8SBill Wendling // ARMConstantPoolMBB
2616dbc9fe8SBill Wendling //===----------------------------------------------------------------------===//
2626dbc9fe8SBill Wendling
ARMConstantPoolMBB(LLVMContext & C,const MachineBasicBlock * mbb,unsigned id,unsigned char PCAdj,ARMCP::ARMCPModifier Modifier,bool AddCurrentAddress)2634a4772faSBill Wendling ARMConstantPoolMBB::ARMConstantPoolMBB(LLVMContext &C,
2644a4772faSBill Wendling const MachineBasicBlock *mbb,
2656dbc9fe8SBill Wendling unsigned id, unsigned char PCAdj,
2666dbc9fe8SBill Wendling ARMCP::ARMCPModifier Modifier,
2676dbc9fe8SBill Wendling bool AddCurrentAddress)
2684a4772faSBill Wendling : ARMConstantPoolValue(C, id, ARMCP::CPMachineBasicBlock, PCAdj,
2696dbc9fe8SBill Wendling Modifier, AddCurrentAddress),
2706dbc9fe8SBill Wendling MBB(mbb) {}
2716dbc9fe8SBill Wendling
Create(LLVMContext & C,const MachineBasicBlock * mbb,unsigned ID,unsigned char PCAdj)2726dbc9fe8SBill Wendling ARMConstantPoolMBB *ARMConstantPoolMBB::Create(LLVMContext &C,
2734a4772faSBill Wendling const MachineBasicBlock *mbb,
2746dbc9fe8SBill Wendling unsigned ID,
2756dbc9fe8SBill Wendling unsigned char PCAdj) {
2766dbc9fe8SBill Wendling return new ARMConstantPoolMBB(C, mbb, ID, PCAdj, ARMCP::no_modifier, false);
2776dbc9fe8SBill Wendling }
2786dbc9fe8SBill Wendling
getExistingMachineCPValue(MachineConstantPool * CP,Align Alignment)2796dbc9fe8SBill Wendling int ARMConstantPoolMBB::getExistingMachineCPValue(MachineConstantPool *CP,
280*8c72b027SCraig Topper Align Alignment) {
2812ef689caSBenjamin Kramer return getExistingMachineCPValueImpl<ARMConstantPoolMBB>(CP, Alignment);
2826dbc9fe8SBill Wendling }
2836dbc9fe8SBill Wendling
hasSameValue(ARMConstantPoolValue * ACPV)2846dbc9fe8SBill Wendling bool ARMConstantPoolMBB::hasSameValue(ARMConstantPoolValue *ACPV) {
2856dbc9fe8SBill Wendling const ARMConstantPoolMBB *ACPMBB = dyn_cast<ARMConstantPoolMBB>(ACPV);
2866dbc9fe8SBill Wendling return ACPMBB && ACPMBB->MBB == MBB &&
2876dbc9fe8SBill Wendling ARMConstantPoolValue::hasSameValue(ACPV);
2886dbc9fe8SBill Wendling }
2896dbc9fe8SBill Wendling
addSelectionDAGCSEId(FoldingSetNodeID & ID)2906dbc9fe8SBill Wendling void ARMConstantPoolMBB::addSelectionDAGCSEId(FoldingSetNodeID &ID) {
2916dbc9fe8SBill Wendling ID.AddPointer(MBB);
2926dbc9fe8SBill Wendling ARMConstantPoolValue::addSelectionDAGCSEId(ID);
2936dbc9fe8SBill Wendling }
2946dbc9fe8SBill Wendling
print(raw_ostream & O) const2956dbc9fe8SBill Wendling void ARMConstantPoolMBB::print(raw_ostream &O) const {
29625528d6dSFrancis Visoiu Mistrih O << printMBBReference(*MBB);
2976dbc9fe8SBill Wendling ARMConstantPoolValue::print(O);
2986dbc9fe8SBill Wendling }
299