; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=x86_64 -relocation-model=static < %s | \ ; RUN: FileCheck --check-prefixes=COMMON,STATIC %s ; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | \ ; RUN: FileCheck --check-prefixes=COMMON,CHECK %s ;; Test that we use the local alias for dso_local functions in inline assembly. @gv0 = dso_local global i32 0 @gv1 = dso_preemptable global i32 1 define i64 @test_var() nounwind { ; STATIC-LABEL: test_var: ; STATIC: # %bb.0: # %entry ; STATIC-NEXT: movq gv1@GOTPCREL(%rip), %rax ; STATIC-NEXT: #APP ; STATIC-NEXT: movq gv0(%rip), %rax ; STATIC-NEXT: movq (%rax), %rax ; STATIC-NEXT: #NO_APP ; STATIC-NEXT: retq ; ; CHECK-LABEL: test_var: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: movq gv1@GOTPCREL(%rip), %rax ; CHECK-NEXT: #APP ; CHECK-NEXT: movq .Lgv0$local(%rip), %rax ; CHECK-NEXT: movq (%rax), %rax ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: retq entry: %0 = tail call i64 asm "movq $1, $0\0Amovq $2, $0", "=r,*m,*m"(ptr elementtype(i32) @gv0, ptr elementtype(i32) @gv1) ret i64 %0 } define dso_local void @fun0() nounwind { ; COMMON-LABEL: fun0: ; COMMON: # %bb.0: # %entry ; COMMON-NEXT: retq entry: ret void } define dso_preemptable void @fun1() nounwind { ; COMMON-LABEL: fun1: ; COMMON: # %bb.0: # %entry ; COMMON-NEXT: retq entry: ret void } define i64 @test_fun() nounwind { ; STATIC-LABEL: test_fun: ; STATIC: # %bb.0: # %entry ; STATIC-NEXT: movq fun1@GOTPCREL(%rip), %rax ; STATIC-NEXT: #APP ; STATIC-NEXT: movq fun0(%rip), %rax ; STATIC-NEXT: movq (%rax), %rax ; STATIC-NEXT: #NO_APP ; STATIC-NEXT: retq ; ; CHECK-LABEL: test_fun: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: movq fun1@GOTPCREL(%rip), %rax ; CHECK-NEXT: #APP ; CHECK-NEXT: movq .Lfun0$local(%rip), %rax ; CHECK-NEXT: movq (%rax), %rax ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: retq entry: %0 = tail call i64 asm "movq $1, $0\0Amovq $2, $0", "=r,*m,*m"(ptr elementtype(void ()) nonnull @fun0, ptr elementtype(void ()) nonnull @fun1) ret i64 %0 }