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