Skip to content

Commit 6974f18

Browse files
committed
[test] Improve CodeGen/*/semantic-interposition-asm.ll
1 parent 833e9b2 commit 6974f18

File tree

2 files changed

+103
-22
lines changed

2 files changed

+103
-22
lines changed
Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc -mtriple=aarch64 -relocation-model=pic < %s | FileCheck %s
33

4-
;; Test that we use the local alias for dso_local globals in inline assembly.
4+
;; Test that we use the local alias for dso_local functions in inline assembly.
55

66
@gv0 = dso_local global i32 0
77
@gv1 = dso_preemptable global i32 1
88

9-
define i32 @load() nounwind {
10-
; CHECK-LABEL: load:
9+
define i64 @test_var() nounwind {
10+
; CHECK-LABEL: test_var:
1111
; CHECK: // %bb.0: // %entry
1212
; CHECK-NEXT: //APP
1313
; CHECK-NEXT: adrp x0, .Lgv0$local
@@ -16,10 +16,40 @@ define i32 @load() nounwind {
1616
; CHECK-NEXT: ldr w8, [x8, :lo12:gv1]
1717
; CHECK-NEXT: add x0, x8, x0
1818
; CHECK-NEXT: //NO_APP
19-
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
2019
; CHECK-NEXT: ret
2120
entry:
2221
%0 = tail call i64 asm "adrp $0, $1\0Aldr ${0:w}, [$0, :lo12:$1]\0Aadrp x8, $2\0Aldr w8, [x8, :lo12:$2]\0Aadd $0,x8,$0", "=r,S,S,~{x8}"(i32* nonnull @gv0, i32* nonnull @gv1)
23-
%conv = trunc i64 %0 to i32
24-
ret i32 %conv
22+
ret i64 %0
23+
}
24+
25+
define dso_local void @fun0() nounwind {
26+
; CHECK-LABEL: fun0:
27+
; CHECK: .Lfun0$local:
28+
; CHECK-NEXT: // %bb.0: // %entry
29+
; CHECK-NEXT: ret
30+
entry:
31+
ret void
32+
}
33+
34+
define dso_preemptable void @fun1() nounwind {
35+
; CHECK-LABEL: fun1:
36+
; CHECK: // %bb.0: // %entry
37+
; CHECK-NEXT: ret
38+
entry:
39+
ret void
40+
}
41+
42+
define i64 @test_fun() nounwind {
43+
; CHECK-LABEL: test_fun:
44+
; CHECK: // %bb.0: // %entry
45+
; CHECK-NEXT: //APP
46+
; CHECK-NEXT: adrp x0, :got:.Lfun0$local
47+
; CHECK-NEXT: ldr x0, [x0, :got_lo12:.Lfun0$local]
48+
; CHECK-NEXT: adrp x8, :got:fun1
49+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:fun1]
50+
; CHECK-NEXT: //NO_APP
51+
; CHECK-NEXT: ret
52+
entry:
53+
%0 = tail call i64 asm "adrp $0, :got:$1\0Aldr $0, [$0, :got_lo12:$1]\0Aadrp x8, :got:$2\0Aldr x8, [x8, :got_lo12:$2]", "=r,S,S,~{x8}"(void ()* nonnull @fun0, void ()* nonnull @fun1)
54+
ret i64 %0
2555
}
Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,72 @@
1-
; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=x86_64 -relocation-model=static < %s | \
3+
; RUN: FileCheck --check-prefixes=COMMON,STATIC %s
4+
; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | \
5+
; RUN: FileCheck --check-prefixes=COMMON,CHECK %s
26

3-
;; Test that we use the local alias for dso_local globals in inline assembly.
7+
;; Test that we use the local alias for dso_local functions in inline assembly.
48

5-
@mxcsr0 = dso_local global i32 0
6-
@mxcsr1 = dso_preemptable global i32 1
9+
@gv0 = dso_local global i32 0
10+
@gv1 = dso_preemptable global i32 1
711

8-
define <2 x double> @foo(<2 x double> %a, <2 x double> %b) {
9-
; CHECK-LABEL: foo:
10-
; CHECK: movq mxcsr1@GOTPCREL(%rip), %rax
11-
; CHECK: #APP
12-
; CHECK-NEXT: ldmxcsr .Lmxcsr0$local(%rip)
13-
; CHECK-NEXT: addpd %xmm1, %xmm0
14-
; CHECK-NEXT: ldmxcsr (%rax)
15-
; CHECK-NEXT: #NO_APP
12+
define i64 @test_var() nounwind {
13+
; STATIC-LABEL: test_var:
14+
; STATIC: # %bb.0: # %entry
15+
; STATIC-NEXT: movq gv1@GOTPCREL(%rip), %rax
16+
; STATIC-NEXT: #APP
17+
; STATIC-NEXT: movq gv0(%rip), %rax
18+
; STATIC-NEXT: movq (%rax), %rax
19+
; STATIC-NEXT: #NO_APP
20+
; STATIC-NEXT: retq
21+
;
22+
; CHECK-LABEL: test_var:
23+
; CHECK: # %bb.0: # %entry
24+
; CHECK-NEXT: movq gv1@GOTPCREL(%rip), %rax
25+
; CHECK-NEXT: #APP
26+
; CHECK-NEXT: movq .Lgv0$local(%rip), %rax
27+
; CHECK-NEXT: movq (%rax), %rax
28+
; CHECK-NEXT: #NO_APP
29+
; CHECK-NEXT: retq
1630
entry:
17-
%0 = call <2 x double> asm sideeffect "ldmxcsr $2; addpd $1, $0; ldmxcsr $3",
18-
"=x,x,*m,*m,0,~{dirflag},~{fpsr},~{flags}"(
19-
<2 x double> %b, i32* nonnull @mxcsr0, i32* nonnull @mxcsr1, <2 x double> %a)
20-
ret <2 x double> %0
31+
%0 = tail call i64 asm "movq $1, $0\0Amovq $2, $0", "=r,*m,*m"(i32* @gv0, i32* @gv1)
32+
ret i64 %0
33+
}
34+
35+
define dso_local void @fun0() nounwind {
36+
; COMMON-LABEL: fun0:
37+
; COMMON: # %bb.0: # %entry
38+
; COMMON-NEXT: retq
39+
entry:
40+
ret void
41+
}
42+
43+
define dso_preemptable void @fun1() nounwind {
44+
; COMMON-LABEL: fun1:
45+
; COMMON: # %bb.0: # %entry
46+
; COMMON-NEXT: retq
47+
entry:
48+
ret void
49+
}
50+
51+
define i64 @test_fun() nounwind {
52+
; STATIC-LABEL: test_fun:
53+
; STATIC: # %bb.0: # %entry
54+
; STATIC-NEXT: movq fun1@{{.*}}(%rip), %rax
55+
; STATIC-NEXT: #APP
56+
; STATIC-NEXT: movq {{.*}}(%rip), %rax
57+
; STATIC-NEXT: movq (%rax), %rax
58+
; STATIC-NEXT: #NO_APP
59+
; STATIC-NEXT: retq
60+
;
61+
; CHECK-LABEL: test_fun:
62+
; CHECK: # %bb.0: # %entry
63+
; CHECK-NEXT: movq fun1@{{.*}}(%rip), %rax
64+
; CHECK-NEXT: #APP
65+
; CHECK-NEXT: movq .Lfun0${{.*}}(%rip), %rax
66+
; CHECK-NEXT: movq (%rax), %rax
67+
; CHECK-NEXT: #NO_APP
68+
; CHECK-NEXT: retq
69+
entry:
70+
%0 = tail call i64 asm "movq $1, $0\0Amovq $2, $0", "=r,*m,*m"(void ()* nonnull @fun0, void ()* nonnull @fun1)
71+
ret i64 %0
2172
}

0 commit comments

Comments
 (0)