mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
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
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/GlobalValue.h"
|
||||
#include "llvm/Type.h"
|
||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <cstdlib>
|
||||
using namespace llvm;
|
||||
@@ -30,6 +31,17 @@ ARMConstantPoolValue::ARMConstantPoolValue(const Constant *cval, unsigned id,
|
||||
CVal(cval), S(NULL), LabelId(id), Kind(K), PCAdjust(PCAdj),
|
||||
Modifier(Modif), AddCurrentAddress(AddCA) {}
|
||||
|
||||
ARMConstantPoolValue::ARMConstantPoolValue(LLVMContext &C,
|
||||
const MachineBasicBlock *mbb,
|
||||
unsigned id,
|
||||
ARMCP::ARMCPKind K,
|
||||
unsigned char PCAdj,
|
||||
ARMCP::ARMCPModifier Modif,
|
||||
bool AddCA)
|
||||
: MachineConstantPoolValue((Type*)Type::getInt8PtrTy(C)),
|
||||
CVal(NULL), MBB(mbb), S(NULL), LabelId(id), Kind(K), PCAdjust(PCAdj),
|
||||
Modifier(Modif), AddCurrentAddress(AddCA) {}
|
||||
|
||||
ARMConstantPoolValue::ARMConstantPoolValue(LLVMContext &C,
|
||||
const char *s, unsigned id,
|
||||
unsigned char PCAdj,
|
||||
@@ -53,6 +65,10 @@ const BlockAddress *ARMConstantPoolValue::getBlockAddress() const {
|
||||
return dyn_cast_or_null<BlockAddress>(CVal);
|
||||
}
|
||||
|
||||
const MachineBasicBlock *ARMConstantPoolValue::getMBB() const {
|
||||
return MBB;
|
||||
}
|
||||
|
||||
static bool CPV_streq(const char *S1, const char *S2) {
|
||||
if (S1 == S2)
|
||||
return true;
|
||||
@@ -119,6 +135,8 @@ void ARMConstantPoolValue::dump() const {
|
||||
void ARMConstantPoolValue::print(raw_ostream &O) const {
|
||||
if (CVal)
|
||||
O << CVal->getName();
|
||||
else if (MBB)
|
||||
O << "";
|
||||
else
|
||||
O << S;
|
||||
if (Modifier) O << "(" << getModifierText() << ")";
|
||||
|
Reference in New Issue
Block a user