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