@@ -231,29 +231,24 @@ define <4 x i32> @smull_zext_v4i16_v4i32(ptr %A, ptr %B) nounwind {
231231define <2 x i64 > @smull_zext_v2i32_v2i64 (ptr %A , ptr %B ) nounwind {
232232; CHECK-NEON-LABEL: smull_zext_v2i32_v2i64:
233233; 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
244241; CHECK-NEON-NEXT: ret
245242;
246243; CHECK-SVE-LABEL: smull_zext_v2i32_v2i64:
247244; CHECK-SVE: // %bb.0:
248245; CHECK-SVE-NEXT: ldrh w8, [x0]
249246; 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
257252; CHECK-SVE-NEXT: ret
258253;
259254; CHECK-GI-LABEL: smull_zext_v2i32_v2i64:
@@ -2405,25 +2400,16 @@ define <2 x i32> @do_stuff(<2 x i64> %0, <2 x i64> %1) {
24052400define <2 x i64 > @lsr (<2 x i64 > %a , <2 x i64 > %b ) {
24062401; CHECK-NEON-LABEL: lsr:
24072402; CHECK-NEON: // %bb.0:
2408- ; CHECK-NEON-NEXT: ushr v0.2d, v0.2d, #32
2409- ; CHECK-NEON-NEXT: ushr v1.2d, v1.2d, #32
2410- ; CHECK-NEON-NEXT: fmov x10, d1
2411- ; CHECK-NEON-NEXT: fmov x11, d0
2412- ; CHECK-NEON-NEXT: mov x8, v1.d[1]
2413- ; CHECK-NEON-NEXT: mov x9, v0.d[1]
2414- ; CHECK-NEON-NEXT: umull x10, w11, w10
2415- ; CHECK-NEON-NEXT: umull x8, w9, w8
2416- ; CHECK-NEON-NEXT: fmov d0, x10
2417- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2403+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2404+ ; CHECK-NEON-NEXT: shrn v1.2s, v1.2d, #32
2405+ ; CHECK-NEON-NEXT: umull v0.2d, v0.2s, v1.2s
24182406; CHECK-NEON-NEXT: ret
24192407;
24202408; CHECK-SVE-LABEL: lsr:
24212409; CHECK-SVE: // %bb.0:
2422- ; CHECK-SVE-NEXT: ushr v0.2d, v0.2d, #32
2423- ; CHECK-SVE-NEXT: ushr v1.2d, v1.2d, #32
2424- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2425- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2426- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2410+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2411+ ; CHECK-SVE-NEXT: shrn v1.2s, v1.2d, #32
2412+ ; CHECK-SVE-NEXT: umull v0.2d, v0.2s, v1.2s
24272413; CHECK-SVE-NEXT: ret
24282414;
24292415; CHECK-GI-LABEL: lsr:
@@ -2482,25 +2468,16 @@ define <2 x i64> @lsr_const(<2 x i64> %a, <2 x i64> %b) {
24822468define <2 x i64 > @asr (<2 x i64 > %a , <2 x i64 > %b ) {
24832469; CHECK-NEON-LABEL: asr:
24842470; CHECK-NEON: // %bb.0:
2485- ; CHECK-NEON-NEXT: sshr v0.2d, v0.2d, #32
2486- ; CHECK-NEON-NEXT: sshr v1.2d, v1.2d, #32
2487- ; CHECK-NEON-NEXT: fmov x10, d1
2488- ; CHECK-NEON-NEXT: fmov x11, d0
2489- ; CHECK-NEON-NEXT: mov x8, v1.d[1]
2490- ; CHECK-NEON-NEXT: mov x9, v0.d[1]
2491- ; CHECK-NEON-NEXT: smull x10, w11, w10
2492- ; CHECK-NEON-NEXT: smull x8, w9, w8
2493- ; CHECK-NEON-NEXT: fmov d0, x10
2494- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2471+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2472+ ; CHECK-NEON-NEXT: shrn v1.2s, v1.2d, #32
2473+ ; CHECK-NEON-NEXT: smull v0.2d, v0.2s, v1.2s
24952474; CHECK-NEON-NEXT: ret
24962475;
24972476; CHECK-SVE-LABEL: asr:
24982477; CHECK-SVE: // %bb.0:
2499- ; CHECK-SVE-NEXT: sshr v0.2d, v0.2d, #32
2500- ; CHECK-SVE-NEXT: sshr v1.2d, v1.2d, #32
2501- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2502- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2503- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2478+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2479+ ; CHECK-SVE-NEXT: shrn v1.2s, v1.2d, #32
2480+ ; CHECK-SVE-NEXT: smull v0.2d, v0.2s, v1.2s
25042481; CHECK-SVE-NEXT: ret
25052482;
25062483; CHECK-GI-LABEL: asr:
@@ -2525,25 +2502,16 @@ define <2 x i64> @asr(<2 x i64> %a, <2 x i64> %b) {
25252502define <2 x i64 > @asr_const (<2 x i64 > %a , <2 x i64 > %b ) {
25262503; CHECK-NEON-LABEL: asr_const:
25272504; CHECK-NEON: // %bb.0:
2528- ; CHECK-NEON-NEXT: sshr v0.2d, v0.2d, #32
2529- ; CHECK-NEON-NEXT: fmov x9, d0
2530- ; CHECK-NEON-NEXT: mov x8, v0.d[1]
2531- ; CHECK-NEON-NEXT: lsl x10, x9, #5
2532- ; CHECK-NEON-NEXT: lsl x11, x8, #5
2533- ; CHECK-NEON-NEXT: sub x9, x10, x9
2534- ; CHECK-NEON-NEXT: fmov d0, x9
2535- ; CHECK-NEON-NEXT: sub x8, x11, x8
2536- ; CHECK-NEON-NEXT: mov v0.d[1], x8
2505+ ; CHECK-NEON-NEXT: movi v1.2s, #31
2506+ ; CHECK-NEON-NEXT: shrn v0.2s, v0.2d, #32
2507+ ; CHECK-NEON-NEXT: smull v0.2d, v0.2s, v1.2s
25372508; CHECK-NEON-NEXT: ret
25382509;
25392510; CHECK-SVE-LABEL: asr_const:
25402511; CHECK-SVE: // %bb.0:
2541- ; CHECK-SVE-NEXT: mov w8, #31 // =0x1f
2542- ; CHECK-SVE-NEXT: sshr v0.2d, v0.2d, #32
2543- ; CHECK-SVE-NEXT: ptrue p0.d, vl2
2544- ; CHECK-SVE-NEXT: dup v1.2d, x8
2545- ; CHECK-SVE-NEXT: mul z0.d, p0/m, z0.d, z1.d
2546- ; CHECK-SVE-NEXT: // kill: def $q0 killed $q0 killed $z0
2512+ ; CHECK-SVE-NEXT: movi v1.2s, #31
2513+ ; CHECK-SVE-NEXT: shrn v0.2s, v0.2d, #32
2514+ ; CHECK-SVE-NEXT: smull v0.2d, v0.2s, v1.2s
25472515; CHECK-SVE-NEXT: ret
25482516;
25492517; CHECK-GI-LABEL: asr_const:
0 commit comments