1; RUN: llc < %s -mtriple=x86_64-w64-mingw32 | FileCheck %s -check-prefix=CHECK-X64 2; RUN: llc < %s -mtriple=x86_64-pc-cygwin | FileCheck %s -check-prefix=CHECK-X64 3; RUN: llc < %s -mtriple=i686-w64-mingw32 | FileCheck %s -check-prefix=CHECK-X86 4; RUN: llc < %s -mtriple=i686-w64-mingw32-none-elf | FileCheck %s -check-prefix=CHECK-X86-ELF 5 6@var = external local_unnamed_addr global i32, align 4 7@dsolocalvar = external dso_local local_unnamed_addr global i32, align 4 8@localvar = dso_local local_unnamed_addr global i32 0, align 4 9@localcommon = common dso_local local_unnamed_addr global i32 0, align 4 10@extvar = external dllimport local_unnamed_addr global i32, align 4 11 12define dso_local i32 @getVar() { 13; CHECK-X64-LABEL: getVar: 14; CHECK-X64: movq .refptr.var(%rip), %rax 15; CHECK-X64: movl (%rax), %eax 16; CHECK-X64: retq 17; CHECK-X86-LABEL: _getVar: 18; CHECK-X86: movl .refptr._var, %eax 19; CHECK-X86: movl (%eax), %eax 20; CHECK-X86: retl 21; CHECK-X86-ELF-LABEL: getVar: 22; CHECK-X86-ELF: movl var, %eax 23; CHECK-X86-ELF: retl 24entry: 25 %0 = load i32, ptr @var, align 4 26 ret i32 %0 27} 28 29define dso_local i32 @getDsoLocalVar() { 30; CHECK-X64-LABEL: getDsoLocalVar: 31; CHECK-X64: movl dsolocalvar(%rip), %eax 32; CHECK-X64: retq 33; CHECK-X86-LABEL: _getDsoLocalVar: 34; CHECK-X86: movl _dsolocalvar, %eax 35; CHECK-X86: retl 36entry: 37 %0 = load i32, ptr @dsolocalvar, align 4 38 ret i32 %0 39} 40 41define dso_local i32 @getLocalVar() { 42; CHECK-X64-LABEL: getLocalVar: 43; CHECK-X64: movl localvar(%rip), %eax 44; CHECK-X64: retq 45; CHECK-X86-LABEL: _getLocalVar: 46; CHECK-X86: movl _localvar, %eax 47; CHECK-X86: retl 48entry: 49 %0 = load i32, ptr @localvar, align 4 50 ret i32 %0 51} 52 53define dso_local i32 @getLocalCommon() { 54; CHECK-X64-LABEL: getLocalCommon: 55; CHECK-X64: movl localcommon(%rip), %eax 56; CHECK-X64: retq 57; CHECK-X86-LABEL: _getLocalCommon: 58; CHECK-X86: movl _localcommon, %eax 59; CHECK-X86: retl 60entry: 61 %0 = load i32, ptr @localcommon, align 4 62 ret i32 %0 63} 64 65define dso_local i32 @getExtVar() { 66; CHECK-X64-LABEL: getExtVar: 67; CHECK-X64: movq __imp_extvar(%rip), %rax 68; CHECK-X64: movl (%rax), %eax 69; CHECK-X64: retq 70; CHECK-X86-LABEL: _getExtVar: 71; CHECK-X86: movl __imp__extvar, %eax 72; CHECK-X86: movl (%eax), %eax 73; CHECK-X86: retl 74; CHECK-X86-ELF-LABEL: getExtVar: 75; CHECK-X86-ELF: movl extvar, %eax 76; CHECK-X86-ELF: retl 77entry: 78 %0 = load i32, ptr @extvar, align 4 79 ret i32 %0 80} 81 82define dso_local void @callFunc() { 83; CHECK-X64-LABEL: callFunc: 84; CHECK-X64: jmp otherFunc 85; CHECK-X86-LABEL: _callFunc: 86; CHECK-X86: jmp _otherFunc 87entry: 88 tail call void @otherFunc() 89 ret void 90} 91 92declare dso_local void @otherFunc() 93 94; CHECK-X64: .section .rdata$.refptr.var,"dr",discard,.refptr.var 95; CHECK-X64: .globl .refptr.var 96; CHECK-X64: .refptr.var: 97; CHECK-X64: .quad var 98 99; CHECK-X86: .section .rdata$.refptr._var,"dr",discard,.refptr._var 100; CHECK-X86: .globl .refptr._var 101; CHECK-X86: .refptr._var: 102; CHECK-X86: .long _var 103