| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ;; Check that we accept functions with '$' in the name. |
| ; RUN: llc -mtriple=x86_64 < %s | FileCheck %s |
| |
| ;; Check that we accept .Ldsolocal$local: below the function label. |
| ; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | FileCheck %s --check-prefix=PIC |
| |
| ;; Check that we accept .seh_proc below the function label. |
| ; RUN: llc -mtriple=x86_64-windows -relocation-model=pic < %s | FileCheck %s --check-prefix=WIN |
| |
| @gv0 = dso_local global i32 0, align 4 |
| @gv1 = dso_preemptable global i32 0, align 4 |
| |
| define hidden i32 @"_Z54bar$ompvariant$bar"() { |
| ; CHECK-LABEL: _Z54bar$ompvariant$bar: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl $2, %eax |
| ; CHECK-NEXT: retq |
| ; |
| ; PIC-LABEL: _Z54bar$ompvariant$bar: |
| ; PIC: # %bb.0: # %entry |
| ; PIC-NEXT: movl $2, %eax |
| ; PIC-NEXT: retq |
| ; |
| ; WIN-LABEL: _Z54bar$ompvariant$bar: |
| ; WIN: # %bb.0: # %entry |
| ; WIN-NEXT: movl $2, %eax |
| ; WIN-NEXT: retq |
| entry: |
| ret i32 2 |
| } |
| |
| define dso_local i32 @dsolocal() { |
| ; CHECK-LABEL: dsolocal: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: pushq %rax |
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 |
| ; CHECK-NEXT: callq ext@PLT |
| ; CHECK-NEXT: movl $2, %eax |
| ; CHECK-NEXT: popq %rcx |
| ; CHECK-NEXT: .cfi_def_cfa_offset 8 |
| ; CHECK-NEXT: retq |
| ; |
| ; PIC-LABEL: dsolocal: |
| ; PIC: # %bb.0: # %entry |
| ; PIC-NEXT: pushq %rax |
| ; PIC-NEXT: .cfi_def_cfa_offset 16 |
| ; PIC-NEXT: callq ext@PLT |
| ; PIC-NEXT: movl $2, %eax |
| ; PIC-NEXT: popq %rcx |
| ; PIC-NEXT: .cfi_def_cfa_offset 8 |
| ; PIC-NEXT: retq |
| ; |
| ; WIN-LABEL: dsolocal: |
| ; WIN: # %bb.0: # %entry |
| ; WIN-NEXT: subq $40, %rsp |
| ; WIN-NEXT: .seh_stackalloc 40 |
| ; WIN-NEXT: .seh_endprologue |
| ; WIN-NEXT: callq ext |
| ; WIN-NEXT: movl $2, %eax |
| ; WIN-NEXT: addq $40, %rsp |
| ; WIN-NEXT: retq |
| ; WIN-NEXT: .seh_endproc |
| entry: |
| call void @ext() |
| ret i32 2 |
| } |
| |
| declare void @ext() |
| |
| define i32 @load() { |
| ; CHECK-LABEL: load: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl gv0(%rip), %eax |
| ; CHECK-NEXT: movq gv1@GOTPCREL(%rip), %rcx |
| ; CHECK-NEXT: addl (%rcx), %eax |
| ; CHECK-NEXT: retq |
| ; |
| ; PIC-LABEL: load: |
| ; PIC: # %bb.0: # %entry |
| ; PIC-NEXT: movl .Lgv0$local(%rip), %eax |
| ; PIC-NEXT: movq gv1@GOTPCREL(%rip), %rcx |
| ; PIC-NEXT: addl (%rcx), %eax |
| ; PIC-NEXT: retq |
| ; |
| ; WIN-LABEL: load: |
| ; WIN: # %bb.0: # %entry |
| ; WIN-NEXT: movl gv0(%rip), %eax |
| ; WIN-NEXT: addl gv1(%rip), %eax |
| ; WIN-NEXT: retq |
| entry: |
| %a = load i32, i32* @gv0 |
| %b = load i32, i32* @gv1 |
| %c = add i32 %a, %b |
| ret i32 %c |
| } |