1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -force-streaming-compatible < %s | FileCheck %s
3
- ; RUN: llc -force-streaming-compatible -mattr=+sme2p2 < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
4
- ; RUN: llc < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
2
+ ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3
+ ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
4
+ ; RUN: llc -mattr=+sme2p2 -force-streaming-compatible < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
5
+ ; RUN: llc -mattr=+neon < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
6
+ ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
5
7
6
8
target triple = "aarch64-unknown-linux-gnu"
7
9
8
10
define double @t1 (double %x ) {
9
11
; CHECK-LABEL: t1:
10
12
; CHECK: // %bb.0: // %entry
11
- ; CHECK-NEXT: fcvtzs x8, d0
12
- ; CHECK-NEXT: scvtf d0, x8
13
+ ; CHECK-NEXT: ptrue p0.d
14
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
15
+ ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
16
+ ; CHECK-NEXT: scvtf z0.d, p0/m, z0.d
17
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
13
18
; CHECK-NEXT: ret
14
19
;
15
20
; USE-NEON-NO-GPRS-LABEL: t1:
16
21
; USE-NEON-NO-GPRS: // %bb.0: // %entry
17
22
; USE-NEON-NO-GPRS-NEXT: fcvtzs d0, d0
18
23
; USE-NEON-NO-GPRS-NEXT: scvtf d0, d0
19
24
; USE-NEON-NO-GPRS-NEXT: ret
25
+ ;
26
+ ; NONEON-NOSVE-LABEL: t1:
27
+ ; NONEON-NOSVE: // %bb.0: // %entry
28
+ ; NONEON-NOSVE-NEXT: fcvtzs x8, d0
29
+ ; NONEON-NOSVE-NEXT: scvtf d0, x8
30
+ ; NONEON-NOSVE-NEXT: ret
20
31
entry:
21
32
%conv = fptosi double %x to i64
22
33
%conv1 = sitofp i64 %conv to double
@@ -26,15 +37,24 @@ entry:
26
37
define float @t2 (float %x ) {
27
38
; CHECK-LABEL: t2:
28
39
; CHECK: // %bb.0: // %entry
29
- ; CHECK-NEXT: fcvtzs w8, s0
30
- ; CHECK-NEXT: scvtf s0, w8
40
+ ; CHECK-NEXT: ptrue p0.s
41
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0
42
+ ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
43
+ ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
44
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0
31
45
; CHECK-NEXT: ret
32
46
;
33
47
; USE-NEON-NO-GPRS-LABEL: t2:
34
48
; USE-NEON-NO-GPRS: // %bb.0: // %entry
35
49
; USE-NEON-NO-GPRS-NEXT: fcvtzs s0, s0
36
50
; USE-NEON-NO-GPRS-NEXT: scvtf s0, s0
37
51
; USE-NEON-NO-GPRS-NEXT: ret
52
+ ;
53
+ ; NONEON-NOSVE-LABEL: t2:
54
+ ; NONEON-NOSVE: // %bb.0: // %entry
55
+ ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
56
+ ; NONEON-NOSVE-NEXT: scvtf s0, w8
57
+ ; NONEON-NOSVE-NEXT: ret
38
58
entry:
39
59
%conv = fptosi float %x to i32
40
60
%conv1 = sitofp i32 %conv to float
@@ -44,10 +64,11 @@ entry:
44
64
define half @t3 (half %x ) {
45
65
; CHECK-LABEL: t3:
46
66
; CHECK: // %bb.0: // %entry
47
- ; CHECK-NEXT: fcvt s0, h0
48
- ; CHECK-NEXT: fcvtzs w8, s0
49
- ; CHECK-NEXT: scvtf s0, w8
50
- ; CHECK-NEXT: fcvt h0, s0
67
+ ; CHECK-NEXT: ptrue p0.s
68
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0
69
+ ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
70
+ ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
71
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
51
72
; CHECK-NEXT: ret
52
73
;
53
74
; USE-NEON-NO-GPRS-LABEL: t3:
@@ -57,6 +78,14 @@ define half @t3(half %x) {
57
78
; USE-NEON-NO-GPRS-NEXT: scvtf s0, s0
58
79
; USE-NEON-NO-GPRS-NEXT: fcvt h0, s0
59
80
; USE-NEON-NO-GPRS-NEXT: ret
81
+ ;
82
+ ; NONEON-NOSVE-LABEL: t3:
83
+ ; NONEON-NOSVE: // %bb.0: // %entry
84
+ ; NONEON-NOSVE-NEXT: fcvt s0, h0
85
+ ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
86
+ ; NONEON-NOSVE-NEXT: scvtf s0, w8
87
+ ; NONEON-NOSVE-NEXT: fcvt h0, s0
88
+ ; NONEON-NOSVE-NEXT: ret
60
89
entry:
61
90
%conv = fptosi half %x to i32
62
91
%conv1 = sitofp i32 %conv to half
@@ -66,15 +95,24 @@ entry:
66
95
define double @t4 (double %x ) {
67
96
; CHECK-LABEL: t4:
68
97
; CHECK: // %bb.0: // %entry
69
- ; CHECK-NEXT: fcvtzu x8, d0
70
- ; CHECK-NEXT: ucvtf d0, x8
98
+ ; CHECK-NEXT: ptrue p0.d
99
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
100
+ ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d
101
+ ; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d
102
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
71
103
; CHECK-NEXT: ret
72
104
;
73
105
; USE-NEON-NO-GPRS-LABEL: t4:
74
106
; USE-NEON-NO-GPRS: // %bb.0: // %entry
75
107
; USE-NEON-NO-GPRS-NEXT: fcvtzu d0, d0
76
108
; USE-NEON-NO-GPRS-NEXT: ucvtf d0, d0
77
109
; USE-NEON-NO-GPRS-NEXT: ret
110
+ ;
111
+ ; NONEON-NOSVE-LABEL: t4:
112
+ ; NONEON-NOSVE: // %bb.0: // %entry
113
+ ; NONEON-NOSVE-NEXT: fcvtzu x8, d0
114
+ ; NONEON-NOSVE-NEXT: ucvtf d0, x8
115
+ ; NONEON-NOSVE-NEXT: ret
78
116
entry:
79
117
%conv = fptoui double %x to i64
80
118
%conv1 = uitofp i64 %conv to double
@@ -84,15 +122,24 @@ entry:
84
122
define float @t5 (float %x ) {
85
123
; CHECK-LABEL: t5:
86
124
; CHECK: // %bb.0: // %entry
87
- ; CHECK-NEXT: fcvtzu w8, s0
88
- ; CHECK-NEXT: ucvtf s0, w8
125
+ ; CHECK-NEXT: ptrue p0.s
126
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0
127
+ ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s
128
+ ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s
129
+ ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0
89
130
; CHECK-NEXT: ret
90
131
;
91
132
; USE-NEON-NO-GPRS-LABEL: t5:
92
133
; USE-NEON-NO-GPRS: // %bb.0: // %entry
93
134
; USE-NEON-NO-GPRS-NEXT: fcvtzu s0, s0
94
135
; USE-NEON-NO-GPRS-NEXT: ucvtf s0, s0
95
136
; USE-NEON-NO-GPRS-NEXT: ret
137
+ ;
138
+ ; NONEON-NOSVE-LABEL: t5:
139
+ ; NONEON-NOSVE: // %bb.0: // %entry
140
+ ; NONEON-NOSVE-NEXT: fcvtzu w8, s0
141
+ ; NONEON-NOSVE-NEXT: ucvtf s0, w8
142
+ ; NONEON-NOSVE-NEXT: ret
96
143
entry:
97
144
%conv = fptoui float %x to i32
98
145
%conv1 = uitofp i32 %conv to float
@@ -102,10 +149,11 @@ entry:
102
149
define half @t6 (half %x ) {
103
150
; CHECK-LABEL: t6:
104
151
; CHECK: // %bb.0: // %entry
105
- ; CHECK-NEXT: fcvt s0, h0
106
- ; CHECK-NEXT: fcvtzu w8, s0
107
- ; CHECK-NEXT: ucvtf s0, w8
108
- ; CHECK-NEXT: fcvt h0, s0
152
+ ; CHECK-NEXT: ptrue p0.s
153
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0
154
+ ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h
155
+ ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s
156
+ ; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
109
157
; CHECK-NEXT: ret
110
158
;
111
159
; USE-NEON-NO-GPRS-LABEL: t6:
@@ -115,6 +163,14 @@ define half @t6(half %x) {
115
163
; USE-NEON-NO-GPRS-NEXT: ucvtf s0, s0
116
164
; USE-NEON-NO-GPRS-NEXT: fcvt h0, s0
117
165
; USE-NEON-NO-GPRS-NEXT: ret
166
+ ;
167
+ ; NONEON-NOSVE-LABEL: t6:
168
+ ; NONEON-NOSVE: // %bb.0: // %entry
169
+ ; NONEON-NOSVE-NEXT: fcvt s0, h0
170
+ ; NONEON-NOSVE-NEXT: fcvtzu w8, s0
171
+ ; NONEON-NOSVE-NEXT: ucvtf s0, w8
172
+ ; NONEON-NOSVE-NEXT: fcvt h0, s0
173
+ ; NONEON-NOSVE-NEXT: ret
118
174
entry:
119
175
%conv = fptoui half %x to i32
120
176
%conv1 = uitofp i32 %conv to half
0 commit comments