aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMConstantPoolValue.h
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-09-29 23:48:44 +0000
committerBill Wendling <isanbard@gmail.com>2011-09-29 23:48:44 +0000
commit4dd9b091cceaa62f72ed8370f8a946fbe474d8a2 (patch)
tree3189e2d562986fdc01386b5454b912d84336ee55 /lib/Target/ARM/ARMConstantPoolValue.h
parent48105286cbbe046d82d1a7e36a07d656d8ba2faf (diff)
Support creating a constant pool value for a machine basic block.
This is used when we want to take the address of a machine basic block, but it's not associated with a BB in LLVM IR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140823 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMConstantPoolValue.h')
-rw-r--r--lib/Target/ARM/ARMConstantPoolValue.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/Target/ARM/ARMConstantPoolValue.h b/lib/Target/ARM/ARMConstantPoolValue.h
index 5749f1e511..1a3df3c89c 100644
--- a/lib/Target/ARM/ARMConstantPoolValue.h
+++ b/lib/Target/ARM/ARMConstantPoolValue.h
@@ -20,17 +20,19 @@
namespace llvm {
-class Constant;
class BlockAddress;
+class Constant;
class GlobalValue;
class LLVMContext;
+class MachineBasicBlock;
namespace ARMCP {
enum ARMCPKind {
CPValue,
CPExtSymbol,
CPBlockAddress,
- CPLSDA
+ CPLSDA,
+ CPMachineBasicBlock
};
enum ARMCPModifier {
@@ -48,6 +50,7 @@ namespace ARMCP {
/// instruction and the constant being loaded, i.e. (&GV-(LPIC+8)).
class ARMConstantPoolValue : public MachineConstantPoolValue {
const Constant *CVal; // Constant being loaded.
+ const MachineBasicBlock *MBB; // MachineBasicBlock being loaded.
const char *S; // ExtSymbol being loaded.
unsigned LabelId; // Label id of the load.
ARMCP::ARMCPKind Kind; // Kind of constant.
@@ -62,6 +65,11 @@ public:
unsigned char PCAdj = 0,
ARMCP::ARMCPModifier Modifier = ARMCP::no_modifier,
bool AddCurrentAddress = false);
+ ARMConstantPoolValue(LLVMContext &C, const MachineBasicBlock *mbb,unsigned id,
+ ARMCP::ARMCPKind Kind = ARMCP::CPValue,
+ unsigned char PCAdj = 0,
+ ARMCP::ARMCPModifier Modifier = ARMCP::no_modifier,
+ bool AddCurrentAddress = false);
ARMConstantPoolValue(LLVMContext &C, const char *s, unsigned id,
unsigned char PCAdj = 0,
ARMCP::ARMCPModifier Modifier = ARMCP::no_modifier,
@@ -73,6 +81,7 @@ public:
const GlobalValue *getGV() const;
const char *getSymbol() const { return S; }
const BlockAddress *getBlockAddress() const;
+ const MachineBasicBlock *getMBB() const;
ARMCP::ARMCPModifier getModifier() const { return Modifier; }
const char *getModifierText() const {
switch (Modifier) {
@@ -95,6 +104,7 @@ public:
bool isExtSymbol() const { return Kind == ARMCP::CPExtSymbol; }
bool isBlockAddress() { return Kind == ARMCP::CPBlockAddress; }
bool isLSDA() { return Kind == ARMCP::CPLSDA; }
+ bool isMachineBasicBlock() { return Kind == ARMCP::CPMachineBasicBlock; }
virtual unsigned getRelocationInfo() const { return 2; }