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