[llvm] r199219 - Handle dllexport for global aliases

Nico Rieck nico.rieck at gmail.com
Tue Jan 14 07:23:25 PST 2014


Author: nrieck
Date: Tue Jan 14 09:23:25 2014
New Revision: 199219

URL: http://llvm.org/viewvc/llvm-project?rev=199219&view=rev
Log:
Handle dllexport for global aliases

Modified:
    llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
    llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll
    llvm/trunk/test/CodeGen/X86/dllexport.ll

Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=199219&r1=199218&r2=199219&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Tue Jan 14 09:23:25 2014
@@ -658,6 +658,21 @@ void X86AsmPrinter::EmitEndOfAsmFile(Mod
       if (I->hasDLLExportStorageClass())
         DLLExportedGlobals.push_back(getSymbol(I));
 
+    for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+                                      I != E; ++I) {
+      const GlobalValue *GV = I;
+      if (!GV->hasDLLExportStorageClass())
+        continue;
+
+      while (const GlobalAlias *A = dyn_cast<GlobalAlias>(GV))
+        GV = A->getAliasedGlobal();
+
+      if (isa<Function>(GV))
+        DLLExportedFns.push_back(getSymbol(I));
+      else if (isa<GlobalVariable>(GV))
+        DLLExportedGlobals.push_back(getSymbol(I));
+    }
+
     // Output linker support code for dllexported globals on windows.
     if (!DLLExportedGlobals.empty() || !DLLExportedFns.empty()) {
       const TargetLoweringObjectFileCOFF &TLOFCOFF =

Modified: llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll?rev=199219&r1=199218&r2=199219&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll (original)
+++ llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll Tue Jan 14 09:23:25 2014
@@ -56,6 +56,23 @@ define weak_odr dllexport void @weak1()
 @WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
 
 
+; CHECK: .globl alias
+; CHECK: alias = notExported
+ at alias = dllexport alias void()* @notExported
+
+; CHECK: .globl alias2
+; CHECK: alias2 = f1
+ at alias2 = dllexport alias void()* @f1
+
+; CHECK: .globl alias3
+; CHECK: alias3 = alias
+ at alias3 = dllexport alias void()* @alias
+
+; CHECK: .weak weak_alias
+; CHECK: weak_alias = f1
+ at weak_alias = dllexport alias weak_odr void()* @f1
+
+
 ; CHECK: .section .drectve
 ; WIN32: /EXPORT:Var1,DATA
 ; WIN32: /EXPORT:Var2,DATA
@@ -67,6 +84,10 @@ define weak_odr dllexport void @weak1()
 ; WIN32: /EXPORT:lnk1
 ; WIN32: /EXPORT:lnk2
 ; WIN32: /EXPORT:weak1
+; WIN32: /EXPORT:alias
+; WIN32: /EXPORT:alias2
+; WIN32: /EXPORT:alias3
+; WIN32: /EXPORT:weak_alias
 ; MINGW: -export:Var1,data
 ; MINGW: -export:Var2,data
 ; MINGW: -export:Var3,data
@@ -77,3 +98,7 @@ define weak_odr dllexport void @weak1()
 ; MINGW: -export:lnk1
 ; MINGW: -export:lnk2
 ; MINGW: -export:weak1
+; MINGW: -export:alias
+; MINGW: -export:alias2
+; MINGW: -export:alias3
+; MINGW: -export:weak_alias

Modified: llvm/trunk/test/CodeGen/X86/dllexport.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport.ll?rev=199219&r1=199218&r2=199219&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/dllexport.ll (original)
+++ llvm/trunk/test/CodeGen/X86/dllexport.ll Tue Jan 14 09:23:25 2014
@@ -71,6 +71,23 @@ define weak_odr dllexport void @weak1()
 @WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
 
 
+; CHECK: .globl _alias
+; CHECK: _alias = _notExported
+ at alias = dllexport alias void()* @notExported
+
+; CHECK: .globl _alias2
+; CHECK: _alias2 = _f1
+ at alias2 = dllexport alias void()* @f1
+
+; CHECK: .globl _alias3
+; CHECK: _alias3 = _alias
+ at alias3 = dllexport alias void()* @alias
+
+; CHECK: .weak _weak_alias
+; CHECK: _weak_alias = _f1
+ at weak_alias = dllexport alias weak_odr void()* @f1
+
+
 ; CHECK: .section .drectve
 ; WIN32: /EXPORT:_Var1,DATA
 ; WIN32: /EXPORT:_Var2,DATA
@@ -85,6 +102,10 @@ define weak_odr dllexport void @weak1()
 ; WIN32: /EXPORT:_lnk1
 ; WIN32: /EXPORT:_lnk2
 ; WIN32: /EXPORT:_weak1
+; WIN32: /EXPORT:_alias
+; WIN32: /EXPORT:_alias2
+; WIN32: /EXPORT:_alias3
+; WIN32: /EXPORT:_weak_alias
 ; MINGW: -export:_Var1,data
 ; MINGW: -export:_Var2,data
 ; MINGW: -export:_Var3,data
@@ -98,3 +119,7 @@ define weak_odr dllexport void @weak1()
 ; MINGW: -export:_lnk1
 ; MINGW: -export:_lnk2
 ; MINGW: -export:_weak1
+; MINGW: -export:_alias
+; MINGW: -export:_alias2
+; MINGW: -export:_alias3
+; MINGW: -export:_weak_alias





More information about the llvm-commits mailing list