@@ -231,29 +231,24 @@ define <4 x i32> @smull_zext_v4i16_v4i32(ptr %A, ptr %B) nounwind {
231
231
define <2 x i64 > @smull_zext_v2i32_v2i64 (ptr %A , ptr %B ) nounwind {
232
232
; CHECK-NEON-LABEL: smull_zext_v2i32_v2i64:
233
233
; CHECK-NEON: // %bb.0:
234
- ; CHECK-NEON-NEXT: ldr d0, [x1]
235
- ; CHECK-NEON-NEXT: ldrh w9, [x0]
236
- ; CHECK-NEON-NEXT: ldrh w10, [x0, #2]
237
- ; CHECK-NEON-NEXT: sshll v0.2d, v0.2s, #0
238
- ; CHECK-NEON-NEXT: fmov x11, d0
239
- ; CHECK-NEON-NEXT: mov x8, v0.d[1]
240
- ; CHECK-NEON-NEXT: smull x9, w9, w11
241
- ; CHECK-NEON-NEXT: smull x8, w10, w8
242
- ; CHECK-NEON-NEXT: fmov d0, x9
243
- ; CHECK-NEON-NEXT: mov v0.d[1], x8
234
+ ; CHECK-NEON-NEXT: ldrh w8, [x0]
235
+ ; CHECK-NEON-NEXT: ldrh w9, [x0, #2]
236
+ ; CHECK-NEON-NEXT: ldr d1, [x1]
237
+ ; CHECK-NEON-NEXT: fmov d0, x8
238
+ ; CHECK-NEON-NEXT: mov v0.d[1], x9
239
+ ; CHECK-NEON-NEXT: xtn v0.2s, v0.2d
240
+ ; CHECK-NEON-NEXT: smull v0.2d, v0.2s, v1.2s
244
241
; CHECK-NEON-NEXT: ret
245
242
;
246
243
; CHECK-SVE-LABEL: smull_zext_v2i32_v2i64:
247
244
; CHECK-SVE: // %bb.0:
248
245
; CHECK-SVE-NEXT: ldrh w8, [x0]
249
246
; CHECK-SVE-NEXT: ldrh w9, [x0, #2]
250
- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
251
- ; CHECK-SVE-NEXT: ldr d0, [x1]
252
- ; CHECK-SVE-NEXT: fmov d1, x8
253
- ; CHECK-SVE-NEXT: sshll v0.2d, v0.2s, #0
254
- ; CHECK-SVE-NEXT: mov v1.d[1], x9
255
- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
256
- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
247
+ ; CHECK-SVE-NEXT: ldr d1, [x1]
248
+ ; CHECK-SVE-NEXT: fmov d0, x8
249
+ ; CHECK-SVE-NEXT: mov v0.d[1], x9
250
+ ; CHECK-SVE-NEXT: xtn v0.2s, v0.2d
251
+ ; CHECK-SVE-NEXT: smull v0.2d, v0.2s, v1.2s
257
252
; CHECK-SVE-NEXT: ret
258
253
;
259
254
; CHECK-GI-LABEL: smull_zext_v2i32_v2i64:
@@ -2404,25 +2399,16 @@ define <2 x i32> @do_stuff(<2 x i64> %0, <2 x i64> %1) {
2404
2399
define <2 x i64 > @lsr (<2 x i64 > %a , <2 x i64 > %b ) {
2405
2400
; CHECK-NEON-LABEL: lsr:
2406
2401
; CHECK-NEON: // %bb.0:
2407
- ; CHECK-NEON-NEXT: ushr v0.2d, v0.2d, #32
2408
- ; CHECK-NEON-NEXT: ushr v1.2d, v1.2d, #32
2409
- ; CHECK-NEON-NEXT: fmov x10, d1
2410
- ; CHECK-NEON-NEXT: fmov x11, d0
2411
- ; CHECK-NEON-NEXT: mov x8, v1.d[1]
2412
- ; CHECK-NEON-NEXT: mov x9, v0.d[1]
2413
- ; CHECK-NEON-NEXT: umull x10, w11, w10
2414
- ; CHECK-NEON-NEXT: umull x8, w9, w8
2415
- ; CHECK-NEON-NEXT: fmov d0, x10
2416
- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2402
+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2403
+ ; CHECK-NEON-NEXT: shrn v1.2s, v1.2d, #32
2404
+ ; CHECK-NEON-NEXT: umull v0.2d, v0.2s, v1.2s
2417
2405
; CHECK-NEON-NEXT: ret
2418
2406
;
2419
2407
; CHECK-SVE-LABEL: lsr:
2420
2408
; CHECK-SVE: // %bb.0:
2421
- ; CHECK-SVE-NEXT: ushr v0.2d, v0.2d, #32
2422
- ; CHECK-SVE-NEXT: ushr v1.2d, v1.2d, #32
2423
- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2424
- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2425
- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2409
+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2410
+ ; CHECK-SVE-NEXT: shrn v1.2s, v1.2d, #32
2411
+ ; CHECK-SVE-NEXT: umull v0.2d, v0.2s, v1.2s
2426
2412
; CHECK-SVE-NEXT: ret
2427
2413
;
2428
2414
; CHECK-GI-LABEL: lsr:
@@ -2481,25 +2467,16 @@ define <2 x i64> @lsr_const(<2 x i64> %a, <2 x i64> %b) {
2481
2467
define <2 x i64 > @asr (<2 x i64 > %a , <2 x i64 > %b ) {
2482
2468
; CHECK-NEON-LABEL: asr:
2483
2469
; CHECK-NEON: // %bb.0:
2484
- ; CHECK-NEON-NEXT: sshr v0.2d, v0.2d, #32
2485
- ; CHECK-NEON-NEXT: sshr v1.2d, v1.2d, #32
2486
- ; CHECK-NEON-NEXT: fmov x10, d1
2487
- ; CHECK-NEON-NEXT: fmov x11, d0
2488
- ; CHECK-NEON-NEXT: mov x8, v1.d[1]
2489
- ; CHECK-NEON-NEXT: mov x9, v0.d[1]
2490
- ; CHECK-NEON-NEXT: smull x10, w11, w10
2491
- ; CHECK-NEON-NEXT: smull x8, w9, w8
2492
- ; CHECK-NEON-NEXT: fmov d0, x10
2493
- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2470
+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2471
+ ; CHECK-NEON-NEXT: shrn v1.2s, v1.2d, #32
2472
+ ; CHECK-NEON-NEXT: smull v0.2d, v0.2s, v1.2s
2494
2473
; CHECK-NEON-NEXT: ret
2495
2474
;
2496
2475
; CHECK-SVE-LABEL: asr:
2497
2476
; CHECK-SVE: // %bb.0:
2498
- ; CHECK-SVE-NEXT: sshr v0.2d, v0.2d, #32
2499
- ; CHECK-SVE-NEXT: sshr v1.2d, v1.2d, #32
2500
- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2501
- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2502
- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2477
+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2478
+ ; CHECK-SVE-NEXT: shrn v1.2s, v1.2d, #32
2479
+ ; CHECK-SVE-NEXT: smull v0.2d, v0.2s, v1.2s
2503
2480
; CHECK-SVE-NEXT: ret
2504
2481
;
2505
2482
; CHECK-GI-LABEL: asr:
@@ -2524,25 +2501,16 @@ define <2 x i64> @asr(<2 x i64> %a, <2 x i64> %b) {
2524
2501
define <2 x i64 > @asr_const (<2 x i64 > %a , <2 x i64 > %b ) {
2525
2502
; CHECK-NEON-LABEL: asr_const:
2526
2503
; CHECK-NEON: // %bb.0:
2527
- ; CHECK-NEON-NEXT: sshr v0.2d, v0.2d, #32
2528
- ; CHECK-NEON-NEXT: fmov x9, d0
2529
- ; CHECK-NEON-NEXT: mov x8, v0.d[1]
2530
- ; CHECK-NEON-NEXT: lsl x10, x9, #5
2531
- ; CHECK-NEON-NEXT: lsl x11, x8, #5
2532
- ; CHECK-NEON-NEXT: sub x9, x10, x9
2533
- ; CHECK-NEON-NEXT: fmov d0, x9
2534
- ; CHECK-NEON-NEXT: sub x8, x11, x8
2535
- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2504
+ ; CHECK-NEON-NEXT: movi v1.2s, #31
2505
+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2506
+ ; CHECK-NEON-NEXT: smull v0.2d, v0.2s, v1.2s
2536
2507
; CHECK-NEON-NEXT: ret
2537
2508
;
2538
2509
; CHECK-SVE-LABEL: asr_const:
2539
2510
; CHECK-SVE: // %bb.0:
2540
- ; CHECK-SVE-NEXT: mov w8, #31 // =0x1f
2541
- ; CHECK-SVE-NEXT: sshr v0.2d, v0.2d, #32
2542
- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2543
- ; CHECK-SVE-NEXT: dup v1.2d, x8
2544
- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2545
- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2511
+ ; CHECK-SVE-NEXT: movi v1.2s, #31
2512
+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2513
+ ; CHECK-SVE-NEXT: smull v0.2d, v0.2s, v1.2s
2546
2514
; CHECK-SVE-NEXT: ret
2547
2515
;
2548
2516
; CHECK-GI-LABEL: asr_const:
0 commit comments