Reduce indentation in GVRequiresExtraLoad. Return true for windows

with DLLImport symbols even when in -static mode.

llvm-svn: 75093
This commit is contained in:
Chris Lattner 2009-07-09 03:27:27 +00:00
parent 1c5bf9d26d
commit 821084a356
1 changed files with 28 additions and 26 deletions

View File

@ -40,32 +40,34 @@ AsmWriterFlavor("x86-asm-syntax", cl::init(X86Subtarget::Unset),
/// or index register of the address, not the GV offset field.
bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue* GV,
const TargetMachine& TM,
bool isDirectCall) const
{
// FIXME: PIC
if (TM.getRelocationModel() != Reloc::Static &&
TM.getCodeModel() != CodeModel::Large) {
if (isTargetDarwin()) {
if (isDirectCall)
return false;
bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode();
if (GV->hasHiddenVisibility() &&
(Is64Bit || (!isDecl && !GV->hasCommonLinkage())))
// If symbol visibility is hidden, the extra load is not needed if
// target is x86-64 or the symbol is definitely defined in the current
// translation unit.
return false;
return !isDirectCall && (isDecl || GV->isWeakForLinker());
} else if (isTargetELF()) {
// Extra load is needed for all externally visible.
if (isDirectCall)
return false;
if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
return false;
return true;
} else if (isTargetCygMing() || isTargetWindows()) {
return (GV->hasDLLImportLinkage());
}
bool isDirectCall) 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();
if (TM.getRelocationModel() == Reloc::Static ||
TM.getCodeModel() == CodeModel::Large)
return false;
if (isTargetDarwin()) {
if (isDirectCall)
return false;
bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode();
if (GV->hasHiddenVisibility() &&
(Is64Bit || (!isDecl && !GV->hasCommonLinkage())))
// If symbol visibility is hidden, the extra load is not needed if
// target is x86-64 or the symbol is definitely defined in the current
// translation unit.
return false;
return !isDirectCall && (isDecl || GV->isWeakForLinker());
} else if (isTargetELF()) {
// Extra load is needed for all externally visible.
if (isDirectCall)
return false;
if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
return false;
return true;
}
return false;
}