1*5d9ea36bSFangrui Song; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*5d9ea36bSFangrui Song;; Check that we accept functions with '$' in the name. 3*5d9ea36bSFangrui Song; RUN: llc -mtriple=x86_64 < %s | FileCheck %s 4*5d9ea36bSFangrui Song 5*5d9ea36bSFangrui Song;; Check that we accept .Ldsolocal$local: below the function label. 6*5d9ea36bSFangrui Song; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | FileCheck %s --check-prefix=PIC 7*5d9ea36bSFangrui Song 8*5d9ea36bSFangrui Song;; Check that we accept .seh_proc below the function label. 9*5d9ea36bSFangrui Song; RUN: llc -mtriple=x86_64-windows -relocation-model=pic < %s | FileCheck %s --check-prefix=WIN 10*5d9ea36bSFangrui Song 11*5d9ea36bSFangrui Song@gv0 = dso_local global i32 0, align 4 12*5d9ea36bSFangrui Song@gv1 = dso_preemptable global i32 0, align 4 13*5d9ea36bSFangrui Song 14*5d9ea36bSFangrui Songdefine hidden i32 @"_Z54bar$ompvariant$bar"() { 15*5d9ea36bSFangrui Song; CHECK-LABEL: _Z54bar$ompvariant$bar: 16*5d9ea36bSFangrui Song; CHECK: # %bb.0: # %entry 17*5d9ea36bSFangrui Song; CHECK-NEXT: movl $2, %eax 18*5d9ea36bSFangrui Song; CHECK-NEXT: retq 19*5d9ea36bSFangrui Song; 20*5d9ea36bSFangrui Song; PIC-LABEL: _Z54bar$ompvariant$bar: 21*5d9ea36bSFangrui Song; PIC: # %bb.0: # %entry 22*5d9ea36bSFangrui Song; PIC-NEXT: movl $2, %eax 23*5d9ea36bSFangrui Song; PIC-NEXT: retq 24*5d9ea36bSFangrui Song; 25*5d9ea36bSFangrui Song; WIN-LABEL: _Z54bar$ompvariant$bar: 26*5d9ea36bSFangrui Song; WIN: # %bb.0: # %entry 27*5d9ea36bSFangrui Song; WIN-NEXT: movl $2, %eax 28*5d9ea36bSFangrui Song; WIN-NEXT: retq 29*5d9ea36bSFangrui Songentry: 30*5d9ea36bSFangrui Song ret i32 2 31*5d9ea36bSFangrui Song} 32*5d9ea36bSFangrui Song 33*5d9ea36bSFangrui Songdefine dso_local i32 @dsolocal() { 34*5d9ea36bSFangrui Song; CHECK-LABEL: dsolocal: 35*5d9ea36bSFangrui Song; CHECK: # %bb.0: # %entry 36*5d9ea36bSFangrui Song; CHECK-NEXT: pushq %rax 37*5d9ea36bSFangrui Song; CHECK-NEXT: .cfi_def_cfa_offset 16 38*5d9ea36bSFangrui Song; CHECK-NEXT: callq ext@PLT 39*5d9ea36bSFangrui Song; CHECK-NEXT: movl $2, %eax 40*5d9ea36bSFangrui Song; CHECK-NEXT: popq %rcx 41*5d9ea36bSFangrui Song; CHECK-NEXT: .cfi_def_cfa_offset 8 42*5d9ea36bSFangrui Song; CHECK-NEXT: retq 43*5d9ea36bSFangrui Song; 44*5d9ea36bSFangrui Song; PIC-LABEL: dsolocal: 45*5d9ea36bSFangrui Song; PIC: # %bb.0: # %entry 46*5d9ea36bSFangrui Song; PIC-NEXT: pushq %rax 47*5d9ea36bSFangrui Song; PIC-NEXT: .cfi_def_cfa_offset 16 48*5d9ea36bSFangrui Song; PIC-NEXT: callq ext@PLT 49*5d9ea36bSFangrui Song; PIC-NEXT: movl $2, %eax 50*5d9ea36bSFangrui Song; PIC-NEXT: popq %rcx 51*5d9ea36bSFangrui Song; PIC-NEXT: .cfi_def_cfa_offset 8 52*5d9ea36bSFangrui Song; PIC-NEXT: retq 53*5d9ea36bSFangrui Song; 54*5d9ea36bSFangrui Song; WIN-LABEL: dsolocal: 55*5d9ea36bSFangrui Song; WIN: # %bb.0: # %entry 56*5d9ea36bSFangrui Song; WIN-NEXT: subq $40, %rsp 57*5d9ea36bSFangrui Song; WIN-NEXT: .seh_stackalloc 40 58*5d9ea36bSFangrui Song; WIN-NEXT: .seh_endprologue 59*5d9ea36bSFangrui Song; WIN-NEXT: callq ext 60*5d9ea36bSFangrui Song; WIN-NEXT: movl $2, %eax 61*5d9ea36bSFangrui Song; WIN-NEXT: addq $40, %rsp 62*5d9ea36bSFangrui Song; WIN-NEXT: retq 63*5d9ea36bSFangrui Song; WIN-NEXT: .seh_endproc 64*5d9ea36bSFangrui Songentry: 65*5d9ea36bSFangrui Song call void @ext() 66*5d9ea36bSFangrui Song ret i32 2 67*5d9ea36bSFangrui Song} 68*5d9ea36bSFangrui Song 69*5d9ea36bSFangrui Songdeclare void @ext() 70*5d9ea36bSFangrui Song 71*5d9ea36bSFangrui Songdefine i32 @load() { 72*5d9ea36bSFangrui Song; CHECK-LABEL: load: 73*5d9ea36bSFangrui Song; CHECK: # %bb.0: # %entry 74*5d9ea36bSFangrui Song; CHECK-NEXT: movl gv0(%rip), %eax 75*5d9ea36bSFangrui Song; CHECK-NEXT: movq gv1@GOTPCREL(%rip), %rcx 76*5d9ea36bSFangrui Song; CHECK-NEXT: addl (%rcx), %eax 77*5d9ea36bSFangrui Song; CHECK-NEXT: retq 78*5d9ea36bSFangrui Song; 79*5d9ea36bSFangrui Song; PIC-LABEL: load: 80*5d9ea36bSFangrui Song; PIC: # %bb.0: # %entry 81*5d9ea36bSFangrui Song; PIC-NEXT: movl .Lgv0$local(%rip), %eax 82*5d9ea36bSFangrui Song; PIC-NEXT: movq gv1@GOTPCREL(%rip), %rcx 83*5d9ea36bSFangrui Song; PIC-NEXT: addl (%rcx), %eax 84*5d9ea36bSFangrui Song; PIC-NEXT: retq 85*5d9ea36bSFangrui Song; 86*5d9ea36bSFangrui Song; WIN-LABEL: load: 87*5d9ea36bSFangrui Song; WIN: # %bb.0: # %entry 88*5d9ea36bSFangrui Song; WIN-NEXT: movl gv0(%rip), %eax 89*5d9ea36bSFangrui Song; WIN-NEXT: addl gv1(%rip), %eax 90*5d9ea36bSFangrui Song; WIN-NEXT: retq 91*5d9ea36bSFangrui Songentry: 92*5d9ea36bSFangrui Song %a = load i32, i32* @gv0 93*5d9ea36bSFangrui Song %b = load i32, i32* @gv1 94*5d9ea36bSFangrui Song %c = add i32 %a, %b 95*5d9ea36bSFangrui Song ret i32 %c 96*5d9ea36bSFangrui Song} 97