mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Use the new ARMConstantPoolSymbol class to handle external symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140939 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ff4a8023ec
commit
fe31e67350
@ -860,7 +860,8 @@ EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) {
|
||||
MCSym = MBB->getSymbol();
|
||||
} else {
|
||||
assert(ACPV->isExtSymbol() && "unrecognized constant pool value");
|
||||
MCSym = GetExternalSymbolSymbol(ACPV->getSymbol());
|
||||
const char *Sym = cast<ARMConstantPoolSymbol>(ACPV)->getSymbol();
|
||||
MCSym = GetExternalSymbolSymbol(Sym);
|
||||
}
|
||||
|
||||
// Create an MCSymbol for the reference.
|
||||
|
@ -1058,8 +1058,9 @@ static unsigned duplicateCPV(MachineFunction &MF, unsigned &CPI) {
|
||||
Create(cast<ARMConstantPoolConstant>(ACPV)->getGV(), PCLabelId,
|
||||
ARMCP::CPValue, 4);
|
||||
else if (ACPV->isExtSymbol())
|
||||
NewCPV = new ARMConstantPoolValue(MF.getFunction()->getContext(),
|
||||
ACPV->getSymbol(), PCLabelId, 4);
|
||||
NewCPV = ARMConstantPoolSymbol::
|
||||
Create(MF.getFunction()->getContext(),
|
||||
cast<ARMConstantPoolSymbol>(ACPV)->getSymbol(), PCLabelId, 4);
|
||||
else if (ACPV->isBlockAddress())
|
||||
NewCPV = ARMConstantPoolConstant::
|
||||
Create(cast<ARMConstantPoolConstant>(ACPV)->getBlockAddress(), PCLabelId,
|
||||
|
@ -643,8 +643,9 @@ void ARMCodeEmitter::emitConstPoolInstruction(const MachineInstr &MI) {
|
||||
isa<Function>(GV),
|
||||
Subtarget->GVIsIndirectSymbol(GV, RelocM),
|
||||
(intptr_t)ACPV);
|
||||
} else {
|
||||
emitExternalSymbolAddress(ACPV->getSymbol(), ARM::reloc_arm_absolute);
|
||||
} else {
|
||||
const char *Sym = cast<ARMConstantPoolSymbol>(ACPV)->getSymbol();
|
||||
emitExternalSymbolAddress(Sym, ARM::reloc_arm_absolute);
|
||||
}
|
||||
emitWordLE(0);
|
||||
} else {
|
||||
|
@ -41,7 +41,7 @@ ARMConstantPoolValue::ARMConstantPoolValue(LLVMContext &C, unsigned id,
|
||||
ARMCP::ARMCPModifier modifier,
|
||||
bool addCurrentAddress)
|
||||
: MachineConstantPoolValue((Type*)Type::getInt32Ty(C)),
|
||||
LabelId(id), Kind(kind), PCAdjust(PCAdj), Modifier(modifier),
|
||||
S(NULL), LabelId(id), Kind(kind), PCAdjust(PCAdj), Modifier(modifier),
|
||||
AddCurrentAddress(addCurrentAddress) {}
|
||||
|
||||
ARMConstantPoolValue::ARMConstantPoolValue(LLVMContext &C,
|
||||
@ -231,7 +231,6 @@ int ARMConstantPoolConstant::getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
if (APC->getGV() == this->CVal &&
|
||||
APC->getLabelId() == this->getLabelId() &&
|
||||
APC->getPCAdjustment() == this->getPCAdjustment() &&
|
||||
CPV_streq(APC->getSymbol(), this->getSymbol()) &&
|
||||
APC->getModifier() == this->getModifier())
|
||||
return i;
|
||||
}
|
||||
@ -272,6 +271,12 @@ ARMConstantPoolSymbol::~ARMConstantPoolSymbol() {
|
||||
free((void*)S);
|
||||
}
|
||||
|
||||
ARMConstantPoolSymbol *
|
||||
ARMConstantPoolSymbol::Create(LLVMContext &C, const char *s,
|
||||
unsigned ID, unsigned char PCAdj) {
|
||||
return new ARMConstantPoolSymbol(C, s, ID, PCAdj, ARMCP::no_modifier, false);
|
||||
}
|
||||
|
||||
ARMConstantPoolSymbol *
|
||||
ARMConstantPoolSymbol::Create(LLVMContext &C, const char *s,
|
||||
unsigned ID, unsigned char PCAdj,
|
||||
|
@ -181,6 +181,9 @@ class ARMConstantPoolSymbol : public ARMConstantPoolValue {
|
||||
public:
|
||||
~ARMConstantPoolSymbol();
|
||||
|
||||
static ARMConstantPoolSymbol *Create(LLVMContext &C, const char *s,
|
||||
unsigned ID, unsigned char PCAdj);
|
||||
|
||||
static ARMConstantPoolSymbol *Create(LLVMContext &C, const char *s,
|
||||
unsigned ID, unsigned char PCAdj,
|
||||
ARMCP::ARMCPModifier Modifier,
|
||||
|
@ -1425,8 +1425,9 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
|
||||
// Create a constant pool entry for the callee address
|
||||
unsigned ARMPCLabelIndex = AFI->createPICLabelUId();
|
||||
ARMConstantPoolValue *CPV = new ARMConstantPoolValue(*DAG.getContext(),
|
||||
Sym, ARMPCLabelIndex, 0);
|
||||
ARMConstantPoolValue *CPV =
|
||||
ARMConstantPoolSymbol::Create(*DAG.getContext(), Sym,
|
||||
ARMPCLabelIndex, 0);
|
||||
// Get the address of the callee into a register
|
||||
SDValue CPAddr = DAG.getTargetConstantPool(CPV, getPointerTy(), 4);
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
@ -1475,8 +1476,9 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
const char *Sym = S->getSymbol();
|
||||
if (isARMFunc && Subtarget->isThumb1Only() && !Subtarget->hasV5TOps()) {
|
||||
unsigned ARMPCLabelIndex = AFI->createPICLabelUId();
|
||||
ARMConstantPoolValue *CPV = new ARMConstantPoolValue(*DAG.getContext(),
|
||||
Sym, ARMPCLabelIndex, 4);
|
||||
ARMConstantPoolValue *CPV =
|
||||
ARMConstantPoolSymbol::Create(*DAG.getContext(), Sym,
|
||||
ARMPCLabelIndex, 4);
|
||||
SDValue CPAddr = DAG.getTargetConstantPool(CPV, getPointerTy(), 4);
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
Callee = DAG.getLoad(getPointerTy(), dl,
|
||||
@ -2176,9 +2178,9 @@ SDValue ARMTargetLowering::LowerGLOBAL_OFFSET_TABLE(SDValue Op,
|
||||
EVT PtrVT = getPointerTy();
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
unsigned PCAdj = Subtarget->isThumb() ? 4 : 8;
|
||||
ARMConstantPoolValue *CPV = new ARMConstantPoolValue(*DAG.getContext(),
|
||||
"_GLOBAL_OFFSET_TABLE_",
|
||||
ARMPCLabelIndex, PCAdj);
|
||||
ARMConstantPoolValue *CPV =
|
||||
ARMConstantPoolSymbol::Create(*DAG.getContext(), "_GLOBAL_OFFSET_TABLE_",
|
||||
ARMPCLabelIndex, PCAdj);
|
||||
SDValue CPAddr = DAG.getTargetConstantPool(CPV, PtrVT, 4);
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
|
Loading…
Reference in New Issue
Block a user