forked from OSchip/llvm-project
actually, just eliminate PCRelGVRequiresExtraLoad. It makes the code
more complex and slow than just directly testing what we care about. llvm-svn: 75231
This commit is contained in:
parent
7277a807f0
commit
ace6ec26d9
|
|
@ -587,7 +587,7 @@ bool X86FastISel::X86SelectCallAddress(Value *V, X86AddressMode &AM) {
|
||||||
(AM.Base.Reg != 0 || AM.IndexReg != 0))
|
(AM.Base.Reg != 0 || AM.IndexReg != 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Can't handle TLS yet.
|
// Can't handle TLS or DLLImport.
|
||||||
if (GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV))
|
if (GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV))
|
||||||
if (GVar->isThreadLocal() || GVar->hasDLLImportLinkage())
|
if (GVar->isThreadLocal() || GVar->hasDLLImportLinkage())
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -597,7 +597,6 @@ bool X86FastISel::X86SelectCallAddress(Value *V, X86AddressMode &AM) {
|
||||||
|
|
||||||
// No ABI requires an extra load for anything other than DLLImport, which
|
// No ABI requires an extra load for anything other than DLLImport, which
|
||||||
// we rejected above. Return a direct reference to the global.
|
// we rejected above. Return a direct reference to the global.
|
||||||
assert(!Subtarget->PCRelGVRequiresExtraLoad(GV, TM));
|
|
||||||
if (Subtarget->isPICStyleRIPRel()) {
|
if (Subtarget->isPICStyleRIPRel()) {
|
||||||
// Use rip-relative addressing if we can. Above we verified that the
|
// Use rip-relative addressing if we can. Above we verified that the
|
||||||
// base and index registers are unused.
|
// base and index registers are unused.
|
||||||
|
|
|
||||||
|
|
@ -1902,7 +1902,7 @@ SDValue X86TargetLowering::LowerCALL(SDValue Op, SelectionDAG &DAG) {
|
||||||
// We should use extra load for direct calls to dllimported functions in
|
// We should use extra load for direct calls to dllimported functions in
|
||||||
// non-JIT mode.
|
// non-JIT mode.
|
||||||
GlobalValue *GV = G->getGlobal();
|
GlobalValue *GV = G->getGlobal();
|
||||||
if (!Subtarget->PCRelGVRequiresExtraLoad(GV, getTargetMachine())) {
|
if (!GV->hasDLLImportLinkage()) {
|
||||||
unsigned char OpFlags = 0;
|
unsigned char OpFlags = 0;
|
||||||
|
|
||||||
// On ELF targets, in both X86-64 and X86-32 mode, direct calls to
|
// On ELF targets, in both X86-64 and X86-32 mode, direct calls to
|
||||||
|
|
|
||||||
|
|
@ -72,19 +72,6 @@ bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue *GV,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// PCRelGVRequiresExtraLoad - True if accessing the GV from a PC-relative
|
|
||||||
/// operand like a call target requires an extra load.
|
|
||||||
bool X86Subtarget::PCRelGVRequiresExtraLoad(const GlobalValue *GV,
|
|
||||||
const TargetMachine &TM) const {
|
|
||||||
// Windows targets only require an extra load for DLLImport linkage values,
|
|
||||||
// and they need these regardless of whether we're in PIC mode or not.
|
|
||||||
if (isTargetCygMing() || isTargetWindows())
|
|
||||||
return GV->hasDLLImportLinkage();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// True if accessing the GV requires a register. This is a superset of the
|
/// True if accessing the GV requires a register. This is a superset of the
|
||||||
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
||||||
/// a register, but not an extra load.
|
/// a register, but not an extra load.
|
||||||
|
|
|
||||||
|
|
@ -204,12 +204,6 @@ public:
|
||||||
bool GVRequiresExtraLoad(const GlobalValue* GV, const TargetMachine &TM,
|
bool GVRequiresExtraLoad(const GlobalValue* GV, const TargetMachine &TM,
|
||||||
bool isDirectCall) const;
|
bool isDirectCall) const;
|
||||||
|
|
||||||
/// PCRelGVRequiresExtraLoad - True if accessing the GV from a PC-relative
|
|
||||||
/// operand like a call target requires an extra load.
|
|
||||||
bool PCRelGVRequiresExtraLoad(const GlobalValue *GV,
|
|
||||||
const TargetMachine &TM) const;
|
|
||||||
|
|
||||||
|
|
||||||
/// True if accessing the GV requires a register. This is a superset of the
|
/// True if accessing the GV requires a register. This is a superset of the
|
||||||
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
||||||
/// a register, but not an extra load.
|
/// a register, but not an extra load.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue