In PIC mode, GV not requiring an extra load can be used as address immediate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32028 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2006-11-29 23:48:14 +00:00
parent 4946399b64
commit c8306bde15

View File

@ -4994,21 +4994,14 @@ bool X86TargetLowering::isLegalAddressImmediate(int64_t V) const {
}
bool X86TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
// GV is 64-bit but displacement field is 32-bit unless we are in small code
// model. Mac OS X happens to support only small PIC code model.
// FIXME: better support for other OS's.
if (Subtarget->is64Bit() && !Subtarget->isTargetDarwin())
// In 64-bit mode, GV is 64-bit so it won't fit in the 32-bit displacement
// field unless we are in small code model.
if (Subtarget->is64Bit() &&
getTargetMachine().getCodeModel() != CodeModel::Small)
return false;
if (Subtarget->isTargetDarwin()) {
Reloc::Model RModel = getTargetMachine().getRelocationModel();
if (RModel == Reloc::Static)
return true;
else if (RModel == Reloc::DynamicNoPIC)
return !(Subtarget->GVRequiresExtraLoad(GV, false));
else
return false;
} else
return true;
Reloc::Model RModel = getTargetMachine().getRelocationModel();
return (RModel == Reloc::Static) ||
!Subtarget->GVRequiresExtraLoad(GV, false);
}
/// isShuffleMaskLegal - Targets can use this to indicate that they only