@@ -275,105 +275,88 @@ entry:
275
275
define arm_aapcs_vfpcc <16 x i8 > @ext_add_ashr_trunc_i8i32 (<16 x i8 > %a , <16 x i8 > %b ) {
276
276
; CHECK-LABEL: ext_add_ashr_trunc_i8i32:
277
277
; CHECK: @ %bb.0: @ %entry
278
- ; CHECK-NEXT: .save {r4, r5, r7, lr }
279
- ; CHECK-NEXT: push {r4, r5, r7, lr }
280
- ; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13}
281
- ; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13}
282
- ; CHECK-NEXT: vmov.u8 r0 , q1[14]
283
- ; CHECK-NEXT: vmov.u8 r1 , q1[12]
284
- ; CHECK-NEXT: vmov q3[2], q3[0], r1, r0
285
- ; CHECK-NEXT: vmov.u8 r0 , q1[15]
286
- ; CHECK-NEXT: vmov.u8 r1 , q1[13]
278
+ ; CHECK-NEXT: .vsave {d8, d9 }
279
+ ; CHECK-NEXT: vpush {d8, d9 }
280
+ ; CHECK-NEXT: .pad #16
281
+ ; CHECK-NEXT: sub sp, #16
282
+ ; CHECK-NEXT: vmov.u8 r1 , q1[14]
283
+ ; CHECK-NEXT: vmov.u8 r2 , q1[12]
284
+ ; CHECK-NEXT: vmov q3[2], q3[0], r2, r1
285
+ ; CHECK-NEXT: vmov.u8 r1 , q1[15]
286
+ ; CHECK-NEXT: vmov.u8 r2 , q1[13]
287
287
; CHECK-NEXT: vmov.i32 q2, #0xff
288
- ; CHECK-NEXT: vmov q3[3], q3[1], r1, r0
289
- ; CHECK-NEXT: vmov.u8 r0 , q0[14]
290
- ; CHECK-NEXT: vmov.u8 r1 , q0[12]
288
+ ; CHECK-NEXT: vmov q3[3], q3[1], r2, r1
289
+ ; CHECK-NEXT: vmov.u8 r1 , q0[14]
290
+ ; CHECK-NEXT: vmov.u8 r2 , q0[12]
291
291
; CHECK-NEXT: vand q3, q3, q2
292
- ; CHECK-NEXT: vmov q4[2], q4[0], r1, r0
293
- ; CHECK-NEXT: vmov.u8 r0 , q0[15]
294
- ; CHECK-NEXT: vmov.u8 r1 , q0[13]
295
- ; CHECK-NEXT: vmov.u8 r4, q1[6]
296
- ; CHECK-NEXT: vmov q4[3], q4[1], r1, r0
297
- ; CHECK-NEXT: vmov.u8 r0 , q1[2 ]
292
+ ; CHECK-NEXT: vmov q4[2], q4[0], r2, r1
293
+ ; CHECK-NEXT: vmov.u8 r1 , q0[15]
294
+ ; CHECK-NEXT: vmov.u8 r2 , q0[13]
295
+ ; CHECK-NEXT: mov r0, sp
296
+ ; CHECK-NEXT: vmov q4[3], q4[1], r2, r1
297
+ ; CHECK-NEXT: vmov.u8 r1 , q1[10 ]
298
298
; CHECK-NEXT: vmovlb.s8 q4, q4
299
- ; CHECK-NEXT: vmov.u8 r1 , q1[0 ]
299
+ ; CHECK-NEXT: vmov.u8 r2 , q1[8 ]
300
300
; CHECK-NEXT: vmovlb.s16 q4, q4
301
- ; CHECK-NEXT: vmov.u8 r5, q1[4]
302
301
; CHECK-NEXT: vadd.i32 q3, q4, q3
303
302
; CHECK-NEXT: vshr.u32 q3, q3, #1
304
- ; CHECK-NEXT: vmov lr, r12, d7
305
- ; CHECK-NEXT: vmov r3, r2, d6
306
- ; CHECK-NEXT: vmov q3[2], q3[0], r1, r0
307
- ; CHECK-NEXT: vmov.u8 r0, q1[3]
308
- ; CHECK-NEXT: vmov.u8 r1, q1[1]
309
- ; CHECK-NEXT: vmov q3[3], q3[1], r1, r0
310
- ; CHECK-NEXT: vmov.u8 r0, q0[2]
311
- ; CHECK-NEXT: vmov.u8 r1, q0[0]
303
+ ; CHECK-NEXT: vstrb.32 q3, [r0, #12]
304
+ ; CHECK-NEXT: vmov q3[2], q3[0], r2, r1
305
+ ; CHECK-NEXT: vmov.u8 r1, q1[11]
306
+ ; CHECK-NEXT: vmov.u8 r2, q1[9]
307
+ ; CHECK-NEXT: vmov q3[3], q3[1], r2, r1
308
+ ; CHECK-NEXT: vmov.u8 r1, q0[10]
309
+ ; CHECK-NEXT: vmov.u8 r2, q0[8]
312
310
; CHECK-NEXT: vand q3, q3, q2
313
- ; CHECK-NEXT: vmov q4[2], q4[0], r1, r0
314
- ; CHECK-NEXT: vmov.u8 r0, q0[3]
315
- ; CHECK-NEXT: vmov.u8 r1, q0[1]
316
- ; CHECK-NEXT: vmov q4[3], q4[1], r1, r0
311
+ ; CHECK-NEXT: vmov q4[2], q4[0], r2, r1
312
+ ; CHECK-NEXT: vmov.u8 r1, q0[11]
313
+ ; CHECK-NEXT: vmov.u8 r2, q0[9]
314
+ ; CHECK-NEXT: vmov q4[3], q4[1], r2, r1
315
+ ; CHECK-NEXT: vmov.u8 r1, q1[6]
317
316
; CHECK-NEXT: vmovlb.s8 q4, q4
317
+ ; CHECK-NEXT: vmov.u8 r2, q1[4]
318
318
; CHECK-NEXT: vmovlb.s16 q4, q4
319
319
; CHECK-NEXT: vadd.i32 q3, q4, q3
320
- ; CHECK-NEXT: vmov q4[2], q4[0], r5, r4
321
- ; CHECK-NEXT: vmov.u8 r4, q1[7]
322
- ; CHECK-NEXT: vmov.u8 r5, q1[5]
323
- ; CHECK-NEXT: vmov q4[3], q4[1], r5, r4
324
- ; CHECK-NEXT: vmov.u8 r4, q0[6]
325
- ; CHECK-NEXT: vmov.u8 r5, q0[4]
326
320
; CHECK-NEXT: vshr.u32 q3, q3, #1
327
- ; CHECK-NEXT: vmov q5[2], q5[0], r5, r4
328
- ; CHECK-NEXT: vmov.u8 r4, q0[7]
329
- ; CHECK-NEXT: vmov.u8 r5, q0[5]
330
- ; CHECK-NEXT: vand q4, q4, q2
331
- ; CHECK-NEXT: vmov q5[3], q5[1], r5, r4
332
- ; CHECK-NEXT: vmov.u8 r4, q0[10]
333
- ; CHECK-NEXT: vmovlb.s8 q5, q5
334
- ; CHECK-NEXT: vmov.u8 r5, q0[8]
335
- ; CHECK-NEXT: vmovlb.s16 q5, q5
336
- ; CHECK-NEXT: vmov r1, r0, d6
337
- ; CHECK-NEXT: vadd.i32 q4, q5, q4
338
- ; CHECK-NEXT: vmov q5[2], q5[0], r5, r4
339
- ; CHECK-NEXT: vmov.u8 r4, q0[11]
340
- ; CHECK-NEXT: vmov.u8 r5, q0[9]
341
- ; CHECK-NEXT: vmov q5[3], q5[1], r5, r4
342
- ; CHECK-NEXT: vmov.8 q0[0], r1
343
- ; CHECK-NEXT: vmov.u8 r4, q1[10]
344
- ; CHECK-NEXT: vmov.u8 r5, q1[8]
345
- ; CHECK-NEXT: vmov q6[2], q6[0], r5, r4
346
- ; CHECK-NEXT: vmov.8 q0[1], r0
347
- ; CHECK-NEXT: vmov r0, r1, d7
348
- ; CHECK-NEXT: vmov.u8 r4, q1[11]
349
- ; CHECK-NEXT: vmov.u8 r5, q1[9]
350
- ; CHECK-NEXT: vmov.8 q0[2], r0
351
- ; CHECK-NEXT: vmov q6[3], q6[1], r5, r4
352
- ; CHECK-NEXT: vshr.u32 q4, q4, #1
353
- ; CHECK-NEXT: vmov.8 q0[3], r1
354
- ; CHECK-NEXT: vmov r0, r1, d8
355
- ; CHECK-NEXT: vand q1, q6, q2
356
- ; CHECK-NEXT: vmovlb.s8 q2, q5
357
- ; CHECK-NEXT: vmov.8 q0[4], r0
358
- ; CHECK-NEXT: vmovlb.s16 q2, q2
359
- ; CHECK-NEXT: vadd.i32 q1, q2, q1
360
- ; CHECK-NEXT: vmov r4, r5, d9
361
- ; CHECK-NEXT: vmov.8 q0[5], r1
362
- ; CHECK-NEXT: vshr.u32 q1, q1, #1
363
- ; CHECK-NEXT: vmov.8 q0[6], r4
364
- ; CHECK-NEXT: vmov r0, r1, d3
365
- ; CHECK-NEXT: vmov.8 q0[7], r5
366
- ; CHECK-NEXT: vmov r4, r5, d2
367
- ; CHECK-NEXT: vmov.8 q0[8], r4
368
- ; CHECK-NEXT: vmov.8 q0[9], r5
369
- ; CHECK-NEXT: vmov.8 q0[10], r0
370
- ; CHECK-NEXT: vmov.8 q0[11], r1
371
- ; CHECK-NEXT: vmov.8 q0[12], r3
372
- ; CHECK-NEXT: vmov.8 q0[13], r2
373
- ; CHECK-NEXT: vmov.8 q0[14], lr
374
- ; CHECK-NEXT: vmov.8 q0[15], r12
375
- ; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13}
376
- ; CHECK-NEXT: pop {r4, r5, r7, pc}
321
+ ; CHECK-NEXT: vstrb.32 q3, [r0, #8]
322
+ ; CHECK-NEXT: vmov q3[2], q3[0], r2, r1
323
+ ; CHECK-NEXT: vmov.u8 r1, q1[7]
324
+ ; CHECK-NEXT: vmov.u8 r2, q1[5]
325
+ ; CHECK-NEXT: vmov q3[3], q3[1], r2, r1
326
+ ; CHECK-NEXT: vmov.u8 r1, q0[6]
327
+ ; CHECK-NEXT: vmov.u8 r2, q0[4]
328
+ ; CHECK-NEXT: vand q3, q3, q2
329
+ ; CHECK-NEXT: vmov q4[2], q4[0], r2, r1
330
+ ; CHECK-NEXT: vmov.u8 r1, q0[7]
331
+ ; CHECK-NEXT: vmov.u8 r2, q0[5]
332
+ ; CHECK-NEXT: vmov q4[3], q4[1], r2, r1
333
+ ; CHECK-NEXT: vmov.u8 r1, q1[2]
334
+ ; CHECK-NEXT: vmovlb.s8 q4, q4
335
+ ; CHECK-NEXT: vmov.u8 r2, q1[0]
336
+ ; CHECK-NEXT: vmovlb.s16 q4, q4
337
+ ; CHECK-NEXT: vadd.i32 q3, q4, q3
338
+ ; CHECK-NEXT: vshr.u32 q3, q3, #1
339
+ ; CHECK-NEXT: vstrb.32 q3, [r0, #4]
340
+ ; CHECK-NEXT: vmov q3[2], q3[0], r2, r1
341
+ ; CHECK-NEXT: vmov.u8 r1, q1[3]
342
+ ; CHECK-NEXT: vmov.u8 r2, q1[1]
343
+ ; CHECK-NEXT: vmov q3[3], q3[1], r2, r1
344
+ ; CHECK-NEXT: vmov.u8 r1, q0[2]
345
+ ; CHECK-NEXT: vmov.u8 r2, q0[0]
346
+ ; CHECK-NEXT: vand q1, q3, q2
347
+ ; CHECK-NEXT: vmov q2[2], q2[0], r2, r1
348
+ ; CHECK-NEXT: vmov.u8 r1, q0[3]
349
+ ; CHECK-NEXT: vmov.u8 r2, q0[1]
350
+ ; CHECK-NEXT: vmov q2[3], q2[1], r2, r1
351
+ ; CHECK-NEXT: vmovlb.s8 q0, q2
352
+ ; CHECK-NEXT: vmovlb.s16 q0, q0
353
+ ; CHECK-NEXT: vadd.i32 q0, q0, q1
354
+ ; CHECK-NEXT: vshr.u32 q0, q0, #1
355
+ ; CHECK-NEXT: vstrb.32 q0, [r0]
356
+ ; CHECK-NEXT: vldrw.u32 q0, [r0]
357
+ ; CHECK-NEXT: add sp, #16
358
+ ; CHECK-NEXT: vpop {d8, d9}
359
+ ; CHECK-NEXT: bx lr
377
360
entry:
378
361
%sa = sext <16 x i8 > %a to <16 x i32 >
379
362
%sb = zext <16 x i8 > %b to <16 x i32 >
0 commit comments