1; RUN: llc < %s -mtriple=i686-apple-darwin | FileCheck %s --check-prefix=DARWIN 2; RUN: llc < %s -mtriple=i686-windows-msvc | FileCheck %s --check-prefix=WIN32 3; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=WIN64 4 5declare extern_weak void @foo(...) 6 7define void @bar() { 8entry: 9 %cmp = icmp ne ptr @foo, null 10 br i1 %cmp, label %if.then, label %if.end 11 12if.then: 13 tail call void (...) @foo( ) 14 ret void 15 16if.end: 17 ret void 18} 19 20; DARWIN-LABEL: _bar: 21; DARWIN: cmpl $0, L_foo$non_lazy_ptr 22; DARWIN: jne _foo ## TAILCALL 23 24; WIN32-LABEL: _bar: 25; WIN32: cmpl $0, .refptr._foo 26; WIN32: jmpl *.refptr._foo 27 28; WIN64-LABEL: bar: 29; WIN64: cmpq $0, .refptr.foo(%rip) 30; WIN64: jmpq *.refptr.foo 31 32 33declare extern_weak i32 @X(ptr) 34 35@Y = global ptr @X ; <ptr> [#uses=0] 36 37; DARWIN-LABEL: _Y: 38; DARWIN: .long _X 39 40; WIN32-LABEL: _Y: 41; WIN32: .long _X 42 43; WIN64-LABEL: Y: 44; WIN64: .quad X 45 46 47; DARWIN: .weak_reference _foo 48; DARWIN: .weak_reference _X 49 50; WIN32: .section .rdata$.refptr._foo,"dr",discard,.refptr._foo 51; WIN32: .globl .refptr._foo 52; WIN32: .refptr._foo: 53; WIN32: .long _foo 54 55; WIN32: .weak _foo 56; WIN32: .weak _X 57 58; WIN64: .section .rdata$.refptr.foo,"dr",discard,.refptr.foo 59; WIN64: .globl .refptr.foo 60; WIN64: .refptr.foo: 61; WIN64: .quad foo 62 63; WIN64: .weak foo 64; WIN64: .weak X 65 66