1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -force-streaming-compatible < %s | FileCheck %s
2
+ ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3
+ ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
3
4
; RUN: llc < %s | FileCheck %s --check-prefix=NON-STREAMING
4
5
5
6
target triple = "aarch64-unknown-linux-gnu"
6
7
7
8
define double @t1 (double %x ) {
8
9
; CHECK-LABEL: t1:
9
10
; CHECK: // %bb.0: // %entry
10
- ; CHECK-NEXT: fcvtzs x8, d0
11
- ; CHECK-NEXT: scvtf d0, x8
11
+ ; CHECK-NEXT: ptrue p0.d, vl1
12
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
13
+ ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
14
+ ; CHECK-NEXT: scvtf z0.d, p0/m, z0.d
15
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
12
16
; CHECK-NEXT: ret
13
17
;
18
+ ; NONEON-NOSVE-LABEL: t1:
19
+ ; NONEON-NOSVE: // %bb.0: // %entry
20
+ ; NONEON-NOSVE-NEXT: fcvtzs x8, d0
21
+ ; NONEON-NOSVE-NEXT: scvtf d0, x8
22
+ ; NONEON-NOSVE-NEXT: ret
23
+ ;
14
24
; NON-STREAMING-LABEL: t1:
15
25
; NON-STREAMING: // %bb.0: // %entry
16
26
; NON-STREAMING-NEXT: fcvtzs d0, d0
@@ -25,10 +35,19 @@ entry:
25
35
define float @t2 (float %x ) {
26
36
; CHECK-LABEL: t2:
27
37
; CHECK: // %bb.0: // %entry
28
- ; CHECK-NEXT: fcvtzs w8, s0
29
- ; CHECK-NEXT: scvtf s0, w8
38
+ ; CHECK-NEXT: ptrue p0.s, vl1
39
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0
40
+ ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
41
+ ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
42
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0
30
43
; CHECK-NEXT: ret
31
44
;
45
+ ; NONEON-NOSVE-LABEL: t2:
46
+ ; NONEON-NOSVE: // %bb.0: // %entry
47
+ ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
48
+ ; NONEON-NOSVE-NEXT: scvtf s0, w8
49
+ ; NONEON-NOSVE-NEXT: ret
50
+ ;
32
51
; NON-STREAMING-LABEL: t2:
33
52
; NON-STREAMING: // %bb.0: // %entry
34
53
; NON-STREAMING-NEXT: fcvtzs s0, s0
@@ -43,12 +62,21 @@ entry:
43
62
define half @t3 (half %x ) {
44
63
; CHECK-LABEL: t3:
45
64
; CHECK: // %bb.0: // %entry
46
- ; CHECK-NEXT: fcvt s0, h0
47
- ; CHECK-NEXT: fcvtzs w8, s0
48
- ; CHECK-NEXT: scvtf s0, w8
49
- ; CHECK-NEXT: fcvt h0, s0
65
+ ; CHECK-NEXT: ptrue p0.h, vl1
66
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0
67
+ ; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h
68
+ ; CHECK-NEXT: scvtf z0.h, p0/m, z0.h
69
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
50
70
; CHECK-NEXT: ret
51
71
;
72
+ ; NONEON-NOSVE-LABEL: t3:
73
+ ; NONEON-NOSVE: // %bb.0: // %entry
74
+ ; NONEON-NOSVE-NEXT: fcvt s0, h0
75
+ ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
76
+ ; NONEON-NOSVE-NEXT: scvtf s0, w8
77
+ ; NONEON-NOSVE-NEXT: fcvt h0, s0
78
+ ; NONEON-NOSVE-NEXT: ret
79
+ ;
52
80
; NON-STREAMING-LABEL: t3:
53
81
; NON-STREAMING: // %bb.0: // %entry
54
82
; NON-STREAMING-NEXT: fcvt s0, h0
@@ -65,10 +93,19 @@ entry:
65
93
define double @t4 (double %x ) {
66
94
; CHECK-LABEL: t4:
67
95
; CHECK: // %bb.0: // %entry
68
- ; CHECK-NEXT: fcvtzu x8, d0
69
- ; CHECK-NEXT: ucvtf d0, x8
96
+ ; CHECK-NEXT: ptrue p0.d, vl1
97
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
98
+ ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d
99
+ ; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d
100
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
70
101
; CHECK-NEXT: ret
71
102
;
103
+ ; NONEON-NOSVE-LABEL: t4:
104
+ ; NONEON-NOSVE: // %bb.0: // %entry
105
+ ; NONEON-NOSVE-NEXT: fcvtzu x8, d0
106
+ ; NONEON-NOSVE-NEXT: ucvtf d0, x8
107
+ ; NONEON-NOSVE-NEXT: ret
108
+ ;
72
109
; NON-STREAMING-LABEL: t4:
73
110
; NON-STREAMING: // %bb.0: // %entry
74
111
; NON-STREAMING-NEXT: fcvtzu d0, d0
@@ -83,10 +120,19 @@ entry:
83
120
define float @t5 (float %x ) {
84
121
; CHECK-LABEL: t5:
85
122
; CHECK: // %bb.0: // %entry
86
- ; CHECK-NEXT: fcvtzu w8, s0
87
- ; CHECK-NEXT: ucvtf s0, w8
123
+ ; CHECK-NEXT: ptrue p0.s, vl1
124
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0
125
+ ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s
126
+ ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s
127
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0
88
128
; CHECK-NEXT: ret
89
129
;
130
+ ; NONEON-NOSVE-LABEL: t5:
131
+ ; NONEON-NOSVE: // %bb.0: // %entry
132
+ ; NONEON-NOSVE-NEXT: fcvtzu w8, s0
133
+ ; NONEON-NOSVE-NEXT: ucvtf s0, w8
134
+ ; NONEON-NOSVE-NEXT: ret
135
+ ;
90
136
; NON-STREAMING-LABEL: t5:
91
137
; NON-STREAMING: // %bb.0: // %entry
92
138
; NON-STREAMING-NEXT: fcvtzu s0, s0
@@ -101,12 +147,21 @@ entry:
101
147
define half @t6 (half %x ) {
102
148
; CHECK-LABEL: t6:
103
149
; CHECK: // %bb.0: // %entry
104
- ; CHECK-NEXT: fcvt s0, h0
105
- ; CHECK-NEXT: fcvtzu w8, s0
106
- ; CHECK-NEXT: ucvtf s0, w8
107
- ; CHECK-NEXT: fcvt h0, s0
150
+ ; CHECK-NEXT: ptrue p0.h, vl1
151
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0
152
+ ; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h
153
+ ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h
154
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
108
155
; CHECK-NEXT: ret
109
156
;
157
+ ; NONEON-NOSVE-LABEL: t6:
158
+ ; NONEON-NOSVE: // %bb.0: // %entry
159
+ ; NONEON-NOSVE-NEXT: fcvt s0, h0
160
+ ; NONEON-NOSVE-NEXT: fcvtzu w8, s0
161
+ ; NONEON-NOSVE-NEXT: ucvtf s0, w8
162
+ ; NONEON-NOSVE-NEXT: fcvt h0, s0
163
+ ; NONEON-NOSVE-NEXT: ret
164
+ ;
110
165
; NON-STREAMING-LABEL: t6:
111
166
; NON-STREAMING: // %bb.0: // %entry
112
167
; NON-STREAMING-NEXT: fcvt s0, h0
0 commit comments