mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
[NFC][PowerPC] Refactor classifyGlobalReference
We always(and only) check the NLP flag after calling classifyGlobalReference to see whether it is accessed indirectly. Refactor to code to use isGVIndirectSym instead. llvm-svn: 372417
This commit is contained in:
parent
01e34ad2fb
commit
cdca265e5e
@ -742,8 +742,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
if (MO.isGlobal()) {
|
||||
const GlobalValue *GV = MO.getGlobal();
|
||||
MOSymbol = getSymbol(GV);
|
||||
unsigned char GVFlags = Subtarget->classifyGlobalReference(GV);
|
||||
GlobalToc = (GVFlags & PPCII::MO_NLP_FLAG);
|
||||
GlobalToc = Subtarget->isGVIndirectSymbol(GV);
|
||||
} else if (MO.isCPI()) {
|
||||
MOSymbol = GetCPISymbol(MO.getIndex());
|
||||
} else if (MO.isJTI()) {
|
||||
@ -799,8 +798,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
const GlobalValue *GV = MO.getGlobal();
|
||||
MOSymbol = getSymbol(GV);
|
||||
LLVM_DEBUG(
|
||||
unsigned char GVFlags = Subtarget->classifyGlobalReference(GV);
|
||||
assert((GVFlags & PPCII::MO_NLP_FLAG) &&
|
||||
assert((Subtarget->isGVIndirectSymbol(GV)) &&
|
||||
"LDtocL used on symbol that could be accessed directly is "
|
||||
"invalid. Must match ADDIStocHA8."));
|
||||
MOSymbol = lookUpOrCreateTOCEntry(MOSymbol);
|
||||
@ -827,8 +825,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
|
||||
if (MO.isGlobal()) {
|
||||
const GlobalValue *GV = MO.getGlobal();
|
||||
LLVM_DEBUG(unsigned char GVFlags = Subtarget->classifyGlobalReference(GV);
|
||||
assert(!(GVFlags & PPCII::MO_NLP_FLAG) &&
|
||||
LLVM_DEBUG(assert(!(Subtarget->isGVIndirectSymbol(GV)) &&
|
||||
"Interposable definitions must use indirect access."));
|
||||
MOSymbol = getSymbol(GV);
|
||||
} else if (MO.isCPI()) {
|
||||
|
@ -2093,8 +2093,7 @@ unsigned PPCFastISel::PPCMaterializeGV(const GlobalValue *GV, MVT VT) {
|
||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::ADDIStocHA8),
|
||||
HighPartReg).addReg(PPC::X2).addGlobalAddress(GV);
|
||||
|
||||
unsigned char GVFlags = PPCSubTarget->classifyGlobalReference(GV);
|
||||
if (GVFlags & PPCII::MO_NLP_FLAG) {
|
||||
if (PPCSubTarget->isGVIndirectSymbol(GV)) {
|
||||
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(PPC::LDtocL),
|
||||
DestReg).addGlobalAddress(GV).addReg(HighPartReg);
|
||||
} else {
|
||||
|
@ -14555,14 +14555,8 @@ bool PPCTargetLowering::isAccessedAsGotIndirect(SDValue GA) const {
|
||||
if (isa<JumpTableSDNode>(GA) || isa<BlockAddressSDNode>(GA))
|
||||
return true;
|
||||
|
||||
if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(GA)) {
|
||||
const GlobalValue *GV = G->getGlobal();
|
||||
unsigned char GVFlags = Subtarget.classifyGlobalReference(GV);
|
||||
// The NLP flag indicates that a global access has to use an
|
||||
// extra indirection.
|
||||
if (GVFlags & PPCII::MO_NLP_FLAG)
|
||||
return true;
|
||||
}
|
||||
if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(GA))
|
||||
return Subtarget.isGVIndirectSymbol(G->getGlobal());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -229,18 +229,13 @@ bool PPCSubtarget::enableSubRegLiveness() const {
|
||||
return UseSubRegLiveness;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
PPCSubtarget::classifyGlobalReference(const GlobalValue *GV) const {
|
||||
// Note that currently we don't generate non-pic references.
|
||||
// If a caller wants that, this will have to be updated.
|
||||
|
||||
bool PPCSubtarget::isGVIndirectSymbol(const GlobalValue *GV) const {
|
||||
// Large code model always uses the TOC even for local symbols.
|
||||
if (TM.getCodeModel() == CodeModel::Large)
|
||||
return PPCII::MO_PIC_FLAG | PPCII::MO_NLP_FLAG;
|
||||
|
||||
return true;
|
||||
if (TM.shouldAssumeDSOLocal(*GV->getParent(), GV))
|
||||
return PPCII::MO_PIC_FLAG;
|
||||
return PPCII::MO_PIC_FLAG | PPCII::MO_NLP_FLAG;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PPCSubtarget::isELFv2ABI() const { return TM.isELFv2ABI(); }
|
||||
|
@ -344,9 +344,8 @@ public:
|
||||
|
||||
bool enableSubRegLiveness() const override;
|
||||
|
||||
/// classifyGlobalReference - Classify a global variable reference for the
|
||||
/// current subtarget accourding to how we should reference it.
|
||||
unsigned char classifyGlobalReference(const GlobalValue *GV) const;
|
||||
/// True if the GV will be accessed via an indirect symbol.
|
||||
bool isGVIndirectSymbol(const GlobalValue *GV) const;
|
||||
|
||||
bool isXRaySupported() const override { return IsPPC64 && IsLittleEndian; }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user