Target/X86/X86FastISel: [PR6275] Fix Win32's dllimport function with fastisel.

"dllimport" function must not be GlobalVariable, but Function. It is enough to check with GlobalValue.
test/CodeGen/X86/dll-linkage.ll is updated to check llc -O0.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126110 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
NAKAMURA Takumi 2011-02-21 04:50:06 +00:00
parent 58269b9732
commit d64cfe1506
2 changed files with 11 additions and 2 deletions

View File

@ -597,9 +597,13 @@ bool X86FastISel::X86SelectCallAddress(const Value *V, X86AddressMode &AM) {
(AM.Base.Reg != 0 || AM.IndexReg != 0))
return false;
// Can't handle TLS or DLLImport.
// Can't handle DLLImport.
if (GV->hasDLLImportLinkage())
return false;
// Can't handle TLS.
if (const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV))
if (GVar->isThreadLocal() || GVar->hasDLLImportLinkage())
if (GVar->isThreadLocal())
return false;
// Okay, we've committed to selecting this global. Set up the basic address.

View File

@ -1,9 +1,14 @@
; RUN: llc < %s -mtriple=i386-pc-mingw32 | FileCheck %s
; RUN: llc < %s -mtriple=i386-pc-mingw32 -O0 | FileCheck %s -check-prefix=FAST
; PR6275
declare dllimport void @foo()
define void @bar() nounwind {
; CHECK: calll *__imp__foo
; FAST: movl __imp__foo, [[R:%[a-z]{3}]]
; FAST: calll *[[R]]
call void @foo()
ret void
}