@@ -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:
@@ -2404,25 +2399,16 @@ define <2 x i32> @do_stuff(<2 x i64> %0, <2 x i64> %1) {
24042399define <2 x i64 > @lsr (<2 x i64 > %a , <2 x i64 > %b ) {
24052400; CHECK-NEON-LABEL: lsr:
24062401; 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
24172405; CHECK-NEON-NEXT: ret
24182406;
24192407; CHECK-SVE-LABEL: lsr:
24202408; 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
24262412; CHECK-SVE-NEXT: ret
24272413;
24282414; CHECK-GI-LABEL: lsr:
@@ -2481,25 +2467,16 @@ define <2 x i64> @lsr_const(<2 x i64> %a, <2 x i64> %b) {
24812467define <2 x i64 > @asr (<2 x i64 > %a , <2 x i64 > %b ) {
24822468; CHECK-NEON-LABEL: asr:
24832469; 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
24942473; CHECK-NEON-NEXT: ret
24952474;
24962475; CHECK-SVE-LABEL: asr:
24972476; 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
25032480; CHECK-SVE-NEXT: ret
25042481;
25052482; CHECK-GI-LABEL: asr:
@@ -2524,25 +2501,16 @@ define <2 x i64> @asr(<2 x i64> %a, <2 x i64> %b) {
25242501define <2 x i64 > @asr_const (<2 x i64 > %a , <2 x i64 > %b ) {
25252502; CHECK-NEON-LABEL: asr_const:
25262503; 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
25362507; CHECK-NEON-NEXT: ret
25372508;
25382509; CHECK-SVE-LABEL: asr_const:
25392510; 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
25462514; CHECK-SVE-NEXT: ret
25472515;
25482516; CHECK-GI-LABEL: asr_const:
0 commit comments