@@ -32,6 +32,33 @@ entry:
32
32
ret float %c
33
33
}
34
34
35
+ define fp128 @fpext_f16_f128 (half %a ) {
36
+ ; CHECK-LABEL: fpext_f16_f128:
37
+ ; CHECK: // %bb.0: // %entry
38
+ ; CHECK-NEXT: b __extendhftf2
39
+ entry:
40
+ %c = fpext half %a to fp128
41
+ ret fp128 %c
42
+ }
43
+
44
+ define fp128 @fpext_f32_f128 (float %a ) {
45
+ ; CHECK-LABEL: fpext_f32_f128:
46
+ ; CHECK: // %bb.0: // %entry
47
+ ; CHECK-NEXT: b __extendsftf2
48
+ entry:
49
+ %c = fpext float %a to fp128
50
+ ret fp128 %c
51
+ }
52
+
53
+ define fp128 @fpext_f64_f128 (double %a ) {
54
+ ; CHECK-LABEL: fpext_f64_f128:
55
+ ; CHECK: // %bb.0: // %entry
56
+ ; CHECK-NEXT: b __extenddftf2
57
+ entry:
58
+ %c = fpext double %a to fp128
59
+ ret fp128 %c
60
+ }
61
+
35
62
define <2 x double > @fpext_v2f32_v2f64 (<2 x float > %a ) {
36
63
; CHECK-LABEL: fpext_v2f32_v2f64:
37
64
; CHECK: // %bb.0: // %entry
@@ -66,6 +93,214 @@ entry:
66
93
ret <3 x double > %c
67
94
}
68
95
96
+ define <4 x fp128 > @fpext_v4f16_v4f128 (<4 x half > %a ) {
97
+ ; CHECK-SD-LABEL: fpext_v4f16_v4f128:
98
+ ; CHECK-SD: // %bb.0: // %entry
99
+ ; CHECK-SD-NEXT: sub sp, sp, #64
100
+ ; CHECK-SD-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
101
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
102
+ ; CHECK-SD-NEXT: .cfi_offset w30, -16
103
+ ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
104
+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
105
+ ; CHECK-SD-NEXT: // kill: def $h0 killed $h0 killed $q0
106
+ ; CHECK-SD-NEXT: bl __extendhftf2
107
+ ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
108
+ ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
109
+ ; CHECK-SD-NEXT: mov h1, v1.h[1]
110
+ ; CHECK-SD-NEXT: fmov s0, s1
111
+ ; CHECK-SD-NEXT: bl __extendhftf2
112
+ ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
113
+ ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
114
+ ; CHECK-SD-NEXT: mov h1, v1.h[2]
115
+ ; CHECK-SD-NEXT: fmov s0, s1
116
+ ; CHECK-SD-NEXT: bl __extendhftf2
117
+ ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
118
+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
119
+ ; CHECK-SD-NEXT: mov h1, v1.h[3]
120
+ ; CHECK-SD-NEXT: fmov s0, s1
121
+ ; CHECK-SD-NEXT: bl __extendhftf2
122
+ ; CHECK-SD-NEXT: mov v3.16b, v0.16b
123
+ ; CHECK-SD-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
124
+ ; CHECK-SD-NEXT: ldr q2, [sp, #32] // 16-byte Folded Reload
125
+ ; CHECK-SD-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
126
+ ; CHECK-SD-NEXT: add sp, sp, #64
127
+ ; CHECK-SD-NEXT: ret
128
+ ;
129
+ ; CHECK-GI-LABEL: fpext_v4f16_v4f128:
130
+ ; CHECK-GI: // %bb.0: // %entry
131
+ ; CHECK-GI-NEXT: sub sp, sp, #80
132
+ ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
133
+ ; CHECK-GI-NEXT: stp d9, d8, [sp, #56] // 16-byte Folded Spill
134
+ ; CHECK-GI-NEXT: str x30, [sp, #72] // 8-byte Folded Spill
135
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
136
+ ; CHECK-GI-NEXT: .cfi_offset w30, -8
137
+ ; CHECK-GI-NEXT: .cfi_offset b8, -16
138
+ ; CHECK-GI-NEXT: .cfi_offset b9, -24
139
+ ; CHECK-GI-NEXT: .cfi_offset b10, -32
140
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
141
+ ; CHECK-GI-NEXT: mov h8, v0.h[1]
142
+ ; CHECK-GI-NEXT: mov h9, v0.h[2]
143
+ ; CHECK-GI-NEXT: mov h10, v0.h[3]
144
+ ; CHECK-GI-NEXT: // kill: def $h0 killed $h0 killed $q0
145
+ ; CHECK-GI-NEXT: bl __extendhftf2
146
+ ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
147
+ ; CHECK-GI-NEXT: fmov s0, s8
148
+ ; CHECK-GI-NEXT: bl __extendhftf2
149
+ ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
150
+ ; CHECK-GI-NEXT: fmov s0, s9
151
+ ; CHECK-GI-NEXT: bl __extendhftf2
152
+ ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
153
+ ; CHECK-GI-NEXT: fmov s0, s10
154
+ ; CHECK-GI-NEXT: bl __extendhftf2
155
+ ; CHECK-GI-NEXT: mov v3.16b, v0.16b
156
+ ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
157
+ ; CHECK-GI-NEXT: ldp d9, d8, [sp, #56] // 16-byte Folded Reload
158
+ ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
159
+ ; CHECK-GI-NEXT: ldr x30, [sp, #72] // 8-byte Folded Reload
160
+ ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
161
+ ; CHECK-GI-NEXT: add sp, sp, #80
162
+ ; CHECK-GI-NEXT: ret
163
+ entry:
164
+ %c = fpext <4 x half > %a to <4 x fp128 >
165
+ ret <4 x fp128 > %c
166
+ }
167
+
168
+ define <4 x fp128 > @fpext_v4f32_v4f128 (<4 x float > %a ) {
169
+ ; CHECK-SD-LABEL: fpext_v4f32_v4f128:
170
+ ; CHECK-SD: // %bb.0: // %entry
171
+ ; CHECK-SD-NEXT: sub sp, sp, #80
172
+ ; CHECK-SD-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
173
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 80
174
+ ; CHECK-SD-NEXT: .cfi_offset w30, -16
175
+ ; CHECK-SD-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
176
+ ; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
177
+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
178
+ ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
179
+ ; CHECK-SD-NEXT: bl __extendsftf2
180
+ ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
181
+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
182
+ ; CHECK-SD-NEXT: mov s1, v1.s[1]
183
+ ; CHECK-SD-NEXT: fmov s0, s1
184
+ ; CHECK-SD-NEXT: bl __extendsftf2
185
+ ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
186
+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
187
+ ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
188
+ ; CHECK-SD-NEXT: bl __extendsftf2
189
+ ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
190
+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
191
+ ; CHECK-SD-NEXT: mov s0, v0.s[1]
192
+ ; CHECK-SD-NEXT: bl __extendsftf2
193
+ ; CHECK-SD-NEXT: mov v1.16b, v0.16b
194
+ ; CHECK-SD-NEXT: ldp q0, q3, [sp] // 32-byte Folded Reload
195
+ ; CHECK-SD-NEXT: ldr q2, [sp, #32] // 16-byte Folded Reload
196
+ ; CHECK-SD-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
197
+ ; CHECK-SD-NEXT: add sp, sp, #80
198
+ ; CHECK-SD-NEXT: ret
199
+ ;
200
+ ; CHECK-GI-LABEL: fpext_v4f32_v4f128:
201
+ ; CHECK-GI: // %bb.0: // %entry
202
+ ; CHECK-GI-NEXT: sub sp, sp, #80
203
+ ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
204
+ ; CHECK-GI-NEXT: stp d9, d8, [sp, #56] // 16-byte Folded Spill
205
+ ; CHECK-GI-NEXT: str x30, [sp, #72] // 8-byte Folded Spill
206
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
207
+ ; CHECK-GI-NEXT: .cfi_offset w30, -8
208
+ ; CHECK-GI-NEXT: .cfi_offset b8, -16
209
+ ; CHECK-GI-NEXT: .cfi_offset b9, -24
210
+ ; CHECK-GI-NEXT: .cfi_offset b10, -32
211
+ ; CHECK-GI-NEXT: mov s8, v0.s[1]
212
+ ; CHECK-GI-NEXT: mov s9, v0.s[2]
213
+ ; CHECK-GI-NEXT: mov s10, v0.s[3]
214
+ ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
215
+ ; CHECK-GI-NEXT: bl __extendsftf2
216
+ ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
217
+ ; CHECK-GI-NEXT: fmov s0, s8
218
+ ; CHECK-GI-NEXT: bl __extendsftf2
219
+ ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
220
+ ; CHECK-GI-NEXT: fmov s0, s9
221
+ ; CHECK-GI-NEXT: bl __extendsftf2
222
+ ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
223
+ ; CHECK-GI-NEXT: fmov s0, s10
224
+ ; CHECK-GI-NEXT: bl __extendsftf2
225
+ ; CHECK-GI-NEXT: mov v3.16b, v0.16b
226
+ ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
227
+ ; CHECK-GI-NEXT: ldp d9, d8, [sp, #56] // 16-byte Folded Reload
228
+ ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
229
+ ; CHECK-GI-NEXT: ldr x30, [sp, #72] // 8-byte Folded Reload
230
+ ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
231
+ ; CHECK-GI-NEXT: add sp, sp, #80
232
+ ; CHECK-GI-NEXT: ret
233
+ entry:
234
+ %c = fpext <4 x float > %a to <4 x fp128 >
235
+ ret <4 x fp128 > %c
236
+ }
237
+
238
+ define <4 x fp128 > @fpext_v4f64_v4f128 (<4 x double > %a ) {
239
+ ; CHECK-SD-LABEL: fpext_v4f64_v4f128:
240
+ ; CHECK-SD: // %bb.0: // %entry
241
+ ; CHECK-SD-NEXT: sub sp, sp, #80
242
+ ; CHECK-SD-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
243
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 80
244
+ ; CHECK-SD-NEXT: .cfi_offset w30, -16
245
+ ; CHECK-SD-NEXT: str q1, [sp, #48] // 16-byte Folded Spill
246
+ ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
247
+ ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
248
+ ; CHECK-SD-NEXT: bl __extenddftf2
249
+ ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
250
+ ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
251
+ ; CHECK-SD-NEXT: mov d0, v0.d[1]
252
+ ; CHECK-SD-NEXT: bl __extenddftf2
253
+ ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
254
+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
255
+ ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
256
+ ; CHECK-SD-NEXT: bl __extenddftf2
257
+ ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
258
+ ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
259
+ ; CHECK-SD-NEXT: mov d0, v0.d[1]
260
+ ; CHECK-SD-NEXT: bl __extenddftf2
261
+ ; CHECK-SD-NEXT: mov v3.16b, v0.16b
262
+ ; CHECK-SD-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
263
+ ; CHECK-SD-NEXT: ldr q2, [sp] // 16-byte Folded Reload
264
+ ; CHECK-SD-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
265
+ ; CHECK-SD-NEXT: add sp, sp, #80
266
+ ; CHECK-SD-NEXT: ret
267
+ ;
268
+ ; CHECK-GI-LABEL: fpext_v4f64_v4f128:
269
+ ; CHECK-GI: // %bb.0: // %entry
270
+ ; CHECK-GI-NEXT: sub sp, sp, #80
271
+ ; CHECK-GI-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
272
+ ; CHECK-GI-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
273
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
274
+ ; CHECK-GI-NEXT: .cfi_offset w30, -16
275
+ ; CHECK-GI-NEXT: .cfi_offset b8, -24
276
+ ; CHECK-GI-NEXT: .cfi_offset b9, -32
277
+ ; CHECK-GI-NEXT: str q1, [sp] // 16-byte Folded Spill
278
+ ; CHECK-GI-NEXT: mov d8, v0.d[1]
279
+ ; CHECK-GI-NEXT: mov d9, v1.d[1]
280
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
281
+ ; CHECK-GI-NEXT: bl __extenddftf2
282
+ ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
283
+ ; CHECK-GI-NEXT: fmov d0, d8
284
+ ; CHECK-GI-NEXT: bl __extenddftf2
285
+ ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
286
+ ; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Folded Reload
287
+ ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
288
+ ; CHECK-GI-NEXT: bl __extenddftf2
289
+ ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
290
+ ; CHECK-GI-NEXT: fmov d0, d9
291
+ ; CHECK-GI-NEXT: bl __extenddftf2
292
+ ; CHECK-GI-NEXT: mov v3.16b, v0.16b
293
+ ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
294
+ ; CHECK-GI-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
295
+ ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
296
+ ; CHECK-GI-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
297
+ ; CHECK-GI-NEXT: add sp, sp, #80
298
+ ; CHECK-GI-NEXT: ret
299
+ entry:
300
+ %c = fpext <4 x double > %a to <4 x fp128 >
301
+ ret <4 x fp128 > %c
302
+ }
303
+
69
304
define <4 x double > @fpext_v4f32_v4f64 (<4 x float > %a ) {
70
305
; CHECK-SD-LABEL: fpext_v4f32_v4f64:
71
306
; CHECK-SD: // %bb.0: // %entry
0 commit comments