[llvm] r372417 - [NFC][PowerPC] Refactor classifyGlobalReference
Jinsong Ji via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 20 11:21:07 PDT 2019
Author: jsji
Date: Fri Sep 20 11:21:07 2019
New Revision: 372417
URL: http://llvm.org/viewvc/llvm-project?rev=372417&view=rev
Log:
[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.
Modified:
llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp
llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp
llvm/trunk/lib/Target/PowerPC/PPCSubtarget.h
Modified: llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=372417&r1=372416&r2=372417&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp Fri Sep 20 11:21:07 2019
@@ -742,8 +742,7 @@ void PPCAsmPrinter::EmitInstruction(cons
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(cons
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(cons
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()) {
Modified: llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp?rev=372417&r1=372416&r2=372417&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp Fri Sep 20 11:21:07 2019
@@ -2093,8 +2093,7 @@ unsigned PPCFastISel::PPCMaterializeGV(c
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 {
Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=372417&r1=372416&r2=372417&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Fri Sep 20 11:21:07 2019
@@ -14555,14 +14555,8 @@ bool PPCTargetLowering::isAccessedAsGotI
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;
}
Modified: llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp?rev=372417&r1=372416&r2=372417&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCSubtarget.cpp Fri Sep 20 11:21:07 2019
@@ -229,18 +229,13 @@ bool PPCSubtarget::enableSubRegLiveness(
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(); }
Modified: llvm/trunk/lib/Target/PowerPC/PPCSubtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCSubtarget.h?rev=372417&r1=372416&r2=372417&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCSubtarget.h (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCSubtarget.h Fri Sep 20 11:21:07 2019
@@ -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; }
};
More information about the llvm-commits
mailing list