mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-06 03:08:43 +00:00
eliminate GVRequiresRegister, replacing it with predicates we
need for other purposes. llvm-svn: 75243
This commit is contained in:
parent
e4e0c73ed0
commit
7c038a2b3c
@ -7036,12 +7036,16 @@ bool X86TargetLowering::isLegalAddressingMode(const AddrMode &AM,
|
||||
return false;
|
||||
|
||||
if (AM.BaseGV) {
|
||||
// We can only fold this if we don't need an extra load.
|
||||
if (Subtarget->GVRequiresExtraLoad(AM.BaseGV, getTargetMachine()))
|
||||
unsigned GVFlags =
|
||||
Subtarget->ClassifyGlobalReference(AM.BaseGV, getTargetMachine());
|
||||
|
||||
// If a reference to this global requires an extra load, we can't fold it.
|
||||
if (isGlobalStubReference(GVFlags))
|
||||
return false;
|
||||
// If BaseGV requires a register, we cannot also have a BaseReg.
|
||||
if (Subtarget->GVRequiresRegister(AM.BaseGV, getTargetMachine()) &&
|
||||
AM.HasBaseReg)
|
||||
|
||||
// If BaseGV requires a register for the PIC base, we cannot also have a
|
||||
// BaseReg specified.
|
||||
if (AM.HasBaseReg && isGlobalRelativeToPICBase(GVFlags))
|
||||
return false;
|
||||
|
||||
// X86-64 only supports addr of globals in small code model.
|
||||
|
@ -120,20 +120,6 @@ bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue *GV,
|
||||
return isGlobalStubReference(ClassifyGlobalReference(GV, TM));
|
||||
}
|
||||
|
||||
/// True if accessing the GV requires a register. This is a superset of the
|
||||
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
||||
/// a register, but not an extra load.
|
||||
bool X86Subtarget::GVRequiresRegister(const GlobalValue *GV,
|
||||
const TargetMachine &TM) const {
|
||||
if (GVRequiresExtraLoad(GV, TM))
|
||||
return true;
|
||||
|
||||
// Code below here need only consider cases where GVRequiresExtraLoad
|
||||
// returns false.
|
||||
if (TM.getRelocationModel() == Reloc::PIC_)
|
||||
return GV->hasLocalLinkage() || GV->hasExternalLinkage();
|
||||
return false;
|
||||
}
|
||||
|
||||
/// getBZeroEntry - This function returns the name of a function which has an
|
||||
/// interface like the non-standard bzero function, if such a function exists on
|
||||
|
@ -206,11 +206,6 @@ public:
|
||||
/// or index register of the address, not the GV offset field.
|
||||
bool GVRequiresExtraLoad(const GlobalValue *GV, const TargetMachine &TM)const;
|
||||
|
||||
/// True if accessing the GV requires a register. This is a superset of the
|
||||
/// cases where GVRequiresExtraLoad is true. Some variations of PIC require
|
||||
/// a register, but not an extra load.
|
||||
bool GVRequiresRegister(const GlobalValue *GV, const TargetMachine &TM) const;
|
||||
|
||||
/// IsLegalToCallImmediateAddr - Return true if the subtarget allows calls
|
||||
/// to immediate address.
|
||||
bool IsLegalToCallImmediateAddr(const TargetMachine &TM) const;
|
||||
|
Loading…
Reference in New Issue
Block a user