1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
1
2
; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
2
3
3
- ; CHECK: autogen_SD19655
4
- ; CHECK: scvtf
5
- ; CHECK: ret
6
4
define void @autogen_SD19655 (ptr %addr , ptr %addrfloat ) {
5
+ ; CHECK-LABEL: autogen_SD19655:
6
+ ; CHECK: // %bb.0:
7
+ ; CHECK-NEXT: ldr q0, [x0]
8
+ ; CHECK-NEXT: scvtf.2d v0, v0
9
+ ; CHECK-NEXT: fcvtn v0.2s, v0.2d
10
+ ; CHECK-NEXT: str d0, [x1]
11
+ ; CHECK-NEXT: ret
7
12
%T = load <2 x i64 >, ptr %addr
8
13
%F = sitofp <2 x i64 > %T to <2 x float >
9
14
store <2 x float > %F , ptr %addrfloat
@@ -12,152 +17,182 @@ define void @autogen_SD19655(ptr %addr, ptr %addrfloat) {
12
17
13
18
define <2 x double > @test_signed_v2i32_to_v2f64 (<2 x i32 > %v ) nounwind readnone {
14
19
; CHECK-LABEL: test_signed_v2i32_to_v2f64:
15
- ; CHECK: sshll.2d [[VAL64:v[0-9]+]], v0, #0
16
- ; CHECK-NEXT: scvtf.2d v0, [[VAL64]]
17
- ; CHECK-NEXT: ret
20
+ ; CHECK: // %bb.0:
21
+ ; CHECK-NEXT: sshll.2d v0, v0, #0
22
+ ; CHECK-NEXT: scvtf.2d v0, v0
23
+ ; CHECK-NEXT: ret
18
24
%conv = sitofp <2 x i32 > %v to <2 x double >
19
25
ret <2 x double > %conv
20
26
}
21
27
22
28
define <2 x double > @test_unsigned_v2i32_to_v2f64 (<2 x i32 > %v ) nounwind readnone {
23
- ; CHECK-LABEL: test_unsigned_v2i32_to_v2f64
24
- ; CHECK: ushll.2d [[VAL64:v[0-9]+]], v0, #0
25
- ; CHECK-NEXT: ucvtf.2d v0, [[VAL64]]
26
- ; CHECK-NEXT: ret
29
+ ; CHECK-LABEL: test_unsigned_v2i32_to_v2f64:
30
+ ; CHECK: // %bb.0:
31
+ ; CHECK-NEXT: ushll.2d v0, v0, #0
32
+ ; CHECK-NEXT: ucvtf.2d v0, v0
33
+ ; CHECK-NEXT: ret
27
34
%conv = uitofp <2 x i32 > %v to <2 x double >
28
35
ret <2 x double > %conv
29
36
}
30
37
31
38
define <2 x double > @test_signed_v2i16_to_v2f64 (<2 x i16 > %v ) nounwind readnone {
32
39
; CHECK-LABEL: test_signed_v2i16_to_v2f64:
33
- ; CHECK: shl.2s [[TMP:v[0-9]+]], v0, #16
34
- ; CHECK: sshr.2s [[VAL32:v[0-9]+]], [[TMP]], #16
35
- ; CHECK: sshll.2d [[VAL64:v[0-9]+]], [[VAL32]], #0
36
- ; CHECK: scvtf.2d v0, [[VAL64]]
40
+ ; CHECK: // %bb.0:
41
+ ; CHECK-NEXT: shl.2s v0, v0, #16
42
+ ; CHECK-NEXT: sshr.2s v0, v0, #16
43
+ ; CHECK-NEXT: sshll.2d v0, v0, #0
44
+ ; CHECK-NEXT: scvtf.2d v0, v0
45
+ ; CHECK-NEXT: ret
37
46
38
47
%conv = sitofp <2 x i16 > %v to <2 x double >
39
48
ret <2 x double > %conv
40
49
}
41
50
define <2 x double > @test_unsigned_v2i16_to_v2f64 (<2 x i16 > %v ) nounwind readnone {
42
- ; CHECK-LABEL: test_unsigned_v2i16_to_v2f64
43
- ; CHECK: movi d[[MASK:[0-9]+]], #0x00ffff0000ffff
44
- ; CHECK: and.8b [[VAL32:v[0-9]+]], v0, v[[MASK]]
45
- ; CHECK: ushll.2d [[VAL64:v[0-9]+]], [[VAL32]], #0
46
- ; CHECK: ucvtf.2d v0, [[VAL64]]
51
+ ; CHECK-LABEL: test_unsigned_v2i16_to_v2f64:
52
+ ; CHECK: // %bb.0:
53
+ ; CHECK-NEXT: movi d1, #0x00ffff0000ffff
54
+ ; CHECK-NEXT: and.8b v0, v0, v1
55
+ ; CHECK-NEXT: ushll.2d v0, v0, #0
56
+ ; CHECK-NEXT: ucvtf.2d v0, v0
57
+ ; CHECK-NEXT: ret
47
58
48
59
%conv = uitofp <2 x i16 > %v to <2 x double >
49
60
ret <2 x double > %conv
50
61
}
51
62
52
63
define <2 x double > @test_signed_v2i8_to_v2f64 (<2 x i8 > %v ) nounwind readnone {
53
64
; CHECK-LABEL: test_signed_v2i8_to_v2f64:
54
- ; CHECK: shl.2s [[TMP:v[0-9]+]], v0, #24
55
- ; CHECK: sshr.2s [[VAL32:v[0-9]+]], [[TMP]], #24
56
- ; CHECK: sshll.2d [[VAL64:v[0-9]+]], [[VAL32]], #0
57
- ; CHECK: scvtf.2d v0, [[VAL64]]
65
+ ; CHECK: // %bb.0:
66
+ ; CHECK-NEXT: shl.2s v0, v0, #24
67
+ ; CHECK-NEXT: sshr.2s v0, v0, #24
68
+ ; CHECK-NEXT: sshll.2d v0, v0, #0
69
+ ; CHECK-NEXT: scvtf.2d v0, v0
70
+ ; CHECK-NEXT: ret
58
71
59
72
%conv = sitofp <2 x i8 > %v to <2 x double >
60
73
ret <2 x double > %conv
61
74
}
62
75
define <2 x double > @test_unsigned_v2i8_to_v2f64 (<2 x i8 > %v ) nounwind readnone {
63
- ; CHECK-LABEL: test_unsigned_v2i8_to_v2f64
64
- ; CHECK: movi d[[MASK:[0-9]+]], #0x0000ff000000ff
65
- ; CHECK: and.8b [[VAL32:v[0-9]+]], v0, v[[MASK]]
66
- ; CHECK: ushll.2d [[VAL64:v[0-9]+]], [[VAL32]], #0
67
- ; CHECK: ucvtf.2d v0, [[VAL64]]
76
+ ; CHECK-LABEL: test_unsigned_v2i8_to_v2f64:
77
+ ; CHECK: // %bb.0:
78
+ ; CHECK-NEXT: movi d1, #0x0000ff000000ff
79
+ ; CHECK-NEXT: and.8b v0, v0, v1
80
+ ; CHECK-NEXT: ushll.2d v0, v0, #0
81
+ ; CHECK-NEXT: ucvtf.2d v0, v0
82
+ ; CHECK-NEXT: ret
68
83
69
84
%conv = uitofp <2 x i8 > %v to <2 x double >
70
85
ret <2 x double > %conv
71
86
}
72
87
73
88
define <2 x float > @test_signed_v2i64_to_v2f32 (<2 x i64 > %v ) nounwind readnone {
74
89
; CHECK-LABEL: test_signed_v2i64_to_v2f32:
75
- ; CHECK: scvtf.2d [[VAL64:v[0-9]+]], v0
76
- ; CHECK: fcvtn v0.2s, [[VAL64]].2d
90
+ ; CHECK: // %bb.0:
91
+ ; CHECK-NEXT: scvtf.2d v0, v0
92
+ ; CHECK-NEXT: fcvtn v0.2s, v0.2d
93
+ ; CHECK-NEXT: ret
77
94
78
95
%conv = sitofp <2 x i64 > %v to <2 x float >
79
96
ret <2 x float > %conv
80
97
}
81
98
define <2 x float > @test_unsigned_v2i64_to_v2f32 (<2 x i64 > %v ) nounwind readnone {
82
- ; CHECK-LABEL: test_unsigned_v2i64_to_v2f32
83
- ; CHECK: ucvtf.2d [[VAL64:v[0-9]+]], v0
84
- ; CHECK: fcvtn v0.2s, [[VAL64]].2d
99
+ ; CHECK-LABEL: test_unsigned_v2i64_to_v2f32:
100
+ ; CHECK: // %bb.0:
101
+ ; CHECK-NEXT: ucvtf.2d v0, v0
102
+ ; CHECK-NEXT: fcvtn v0.2s, v0.2d
103
+ ; CHECK-NEXT: ret
85
104
86
105
%conv = uitofp <2 x i64 > %v to <2 x float >
87
106
ret <2 x float > %conv
88
107
}
89
108
90
109
define <2 x float > @test_signed_v2i16_to_v2f32 (<2 x i16 > %v ) nounwind readnone {
91
110
; CHECK-LABEL: test_signed_v2i16_to_v2f32:
92
- ; CHECK: shl.2s [[TMP:v[0-9]+]], v0, #16
93
- ; CHECK: sshr.2s [[VAL32:v[0-9]+]], [[TMP]], #16
94
- ; CHECK: scvtf.2s v0, [[VAL32]]
111
+ ; CHECK: // %bb.0:
112
+ ; CHECK-NEXT: shl.2s v0, v0, #16
113
+ ; CHECK-NEXT: sshr.2s v0, v0, #16
114
+ ; CHECK-NEXT: scvtf.2s v0, v0
115
+ ; CHECK-NEXT: ret
95
116
96
117
%conv = sitofp <2 x i16 > %v to <2 x float >
97
118
ret <2 x float > %conv
98
119
}
99
120
define <2 x float > @test_unsigned_v2i16_to_v2f32 (<2 x i16 > %v ) nounwind readnone {
100
- ; CHECK-LABEL: test_unsigned_v2i16_to_v2f32
101
- ; CHECK: movi d[[MASK:[0-9]+]], #0x00ffff0000ffff
102
- ; CHECK: and.8b [[VAL32:v[0-9]+]], v0, v[[MASK]]
103
- ; CHECK: ucvtf.2s v0, [[VAL32]]
121
+ ; CHECK-LABEL: test_unsigned_v2i16_to_v2f32:
122
+ ; CHECK: // %bb.0:
123
+ ; CHECK-NEXT: movi d1, #0x00ffff0000ffff
124
+ ; CHECK-NEXT: and.8b v0, v0, v1
125
+ ; CHECK-NEXT: ucvtf.2s v0, v0
126
+ ; CHECK-NEXT: ret
104
127
105
128
%conv = uitofp <2 x i16 > %v to <2 x float >
106
129
ret <2 x float > %conv
107
130
}
108
131
109
132
define <2 x float > @test_signed_v2i8_to_v2f32 (<2 x i8 > %v ) nounwind readnone {
110
133
; CHECK-LABEL: test_signed_v2i8_to_v2f32:
111
- ; CHECK: shl.2s [[TMP:v[0-9]+]], v0, #24
112
- ; CHECK: sshr.2s [[VAL32:v[0-9]+]], [[TMP]], #24
113
- ; CHECK: scvtf.2s v0, [[VAL32]]
134
+ ; CHECK: // %bb.0:
135
+ ; CHECK-NEXT: shl.2s v0, v0, #24
136
+ ; CHECK-NEXT: sshr.2s v0, v0, #24
137
+ ; CHECK-NEXT: scvtf.2s v0, v0
138
+ ; CHECK-NEXT: ret
114
139
115
140
%conv = sitofp <2 x i8 > %v to <2 x float >
116
141
ret <2 x float > %conv
117
142
}
118
143
define <2 x float > @test_unsigned_v2i8_to_v2f32 (<2 x i8 > %v ) nounwind readnone {
119
- ; CHECK-LABEL: test_unsigned_v2i8_to_v2f32
120
- ; CHECK: movi d[[MASK:[0-9]+]], #0x0000ff000000ff
121
- ; CHECK: and.8b [[VAL32:v[0-9]+]], v0, v[[MASK]]
122
- ; CHECK: ucvtf.2s v0, [[VAL32]]
144
+ ; CHECK-LABEL: test_unsigned_v2i8_to_v2f32:
145
+ ; CHECK: // %bb.0:
146
+ ; CHECK-NEXT: movi d1, #0x0000ff000000ff
147
+ ; CHECK-NEXT: and.8b v0, v0, v1
148
+ ; CHECK-NEXT: ucvtf.2s v0, v0
149
+ ; CHECK-NEXT: ret
123
150
124
151
%conv = uitofp <2 x i8 > %v to <2 x float >
125
152
ret <2 x float > %conv
126
153
}
127
154
128
155
define <4 x float > @test_signed_v4i16_to_v4f32 (<4 x i16 > %v ) nounwind readnone {
129
156
; CHECK-LABEL: test_signed_v4i16_to_v4f32:
130
- ; CHECK: sshll.4s [[VAL32:v[0-9]+]], v0, #0
131
- ; CHECK: scvtf.4s v0, [[VAL32]]
157
+ ; CHECK: // %bb.0:
158
+ ; CHECK-NEXT: sshll.4s v0, v0, #0
159
+ ; CHECK-NEXT: scvtf.4s v0, v0
160
+ ; CHECK-NEXT: ret
132
161
133
162
%conv = sitofp <4 x i16 > %v to <4 x float >
134
163
ret <4 x float > %conv
135
164
}
136
165
137
166
define <4 x float > @test_unsigned_v4i16_to_v4f32 (<4 x i16 > %v ) nounwind readnone {
138
- ; CHECK-LABEL: test_unsigned_v4i16_to_v4f32
139
- ; CHECK: ushll.4s [[VAL32:v[0-9]+]], v0, #0
140
- ; CHECK: ucvtf.4s v0, [[VAL32]]
167
+ ; CHECK-LABEL: test_unsigned_v4i16_to_v4f32:
168
+ ; CHECK: // %bb.0:
169
+ ; CHECK-NEXT: ushll.4s v0, v0, #0
170
+ ; CHECK-NEXT: ucvtf.4s v0, v0
171
+ ; CHECK-NEXT: ret
141
172
142
173
%conv = uitofp <4 x i16 > %v to <4 x float >
143
174
ret <4 x float > %conv
144
175
}
145
176
146
177
define <4 x float > @test_signed_v4i8_to_v4f32 (<4 x i8 > %v ) nounwind readnone {
147
178
; CHECK-LABEL: test_signed_v4i8_to_v4f32:
148
- ; CHECK: shl.4h [[TMP:v[0-9]+]], v0, #8
149
- ; CHECK: sshr.4h [[VAL16:v[0-9]+]], [[TMP]], #8
150
- ; CHECK: sshll.4s [[VAL32:v[0-9]+]], [[VAL16]], #0
151
- ; CHECK: scvtf.4s v0, [[VAL32]]
179
+ ; CHECK: // %bb.0:
180
+ ; CHECK-NEXT: shl.4h v0, v0, #8
181
+ ; CHECK-NEXT: sshr.4h v0, v0, #8
182
+ ; CHECK-NEXT: sshll.4s v0, v0, #0
183
+ ; CHECK-NEXT: scvtf.4s v0, v0
184
+ ; CHECK-NEXT: ret
152
185
153
186
%conv = sitofp <4 x i8 > %v to <4 x float >
154
187
ret <4 x float > %conv
155
188
}
156
189
define <4 x float > @test_unsigned_v4i8_to_v4f32 (<4 x i8 > %v ) nounwind readnone {
157
- ; CHECK-LABEL: test_unsigned_v4i8_to_v4f32
158
- ; CHECK: bic.4h v0, #255, lsl #8
159
- ; CHECK: ushll.4s [[VAL32:v[0-9]+]], v0, #0
160
- ; CHECK: ucvtf.4s v0, [[VAL32]]
190
+ ; CHECK-LABEL: test_unsigned_v4i8_to_v4f32:
191
+ ; CHECK: // %bb.0:
192
+ ; CHECK-NEXT: bic.4h v0, #255, lsl #8
193
+ ; CHECK-NEXT: ushll.4s v0, v0, #0
194
+ ; CHECK-NEXT: ucvtf.4s v0, v0
195
+ ; CHECK-NEXT: ret
161
196
162
197
%conv = uitofp <4 x i8 > %v to <4 x float >
163
198
ret <4 x float > %conv
0 commit comments