@@ -158,6 +158,44 @@ entry:
158158 ret <2 x i64 > %out
159159}
160160
161+ define <2 x i32 > @dupzext_v2i32_v2i64_trunc (i32 %src , <2 x i32 > %b ) {
162+ ; CHECK-SD-LABEL: dupzext_v2i32_v2i64_trunc:
163+ ; CHECK-SD: // %bb.0: // %entry
164+ ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
165+ ; CHECK-SD-NEXT: fmov x9, d0
166+ ; CHECK-SD-NEXT: mov x8, v0.d[1]
167+ ; CHECK-SD-NEXT: mul w9, w0, w9
168+ ; CHECK-SD-NEXT: mul w8, w0, w8
169+ ; CHECK-SD-NEXT: fmov d0, x9
170+ ; CHECK-SD-NEXT: mov v0.d[1], x8
171+ ; CHECK-SD-NEXT: xtn v0.2s, v0.2d
172+ ; CHECK-SD-NEXT: ret
173+ ;
174+ ; CHECK-GI-LABEL: dupzext_v2i32_v2i64_trunc:
175+ ; CHECK-GI: // %bb.0: // %entry
176+ ; CHECK-GI-NEXT: mov w8, w0
177+ ; CHECK-GI-NEXT: ushll v0.2d, v0.2s, #0
178+ ; CHECK-GI-NEXT: dup v1.2d, x8
179+ ; CHECK-GI-NEXT: fmov x9, d0
180+ ; CHECK-GI-NEXT: mov x11, v0.d[1]
181+ ; CHECK-GI-NEXT: fmov x8, d1
182+ ; CHECK-GI-NEXT: mov x10, v1.d[1]
183+ ; CHECK-GI-NEXT: mul x8, x8, x9
184+ ; CHECK-GI-NEXT: mul x9, x10, x11
185+ ; CHECK-GI-NEXT: mov v0.d[0], x8
186+ ; CHECK-GI-NEXT: mov v0.d[1], x9
187+ ; CHECK-GI-NEXT: xtn v0.2s, v0.2d
188+ ; CHECK-GI-NEXT: ret
189+ entry:
190+ %in = zext i32 %src to i64
191+ %ext.b = zext <2 x i32 > %b to <2 x i64 >
192+ %broadcast.splatinsert = insertelement <2 x i64 > undef , i64 %in , i64 0
193+ %broadcast.splat = shufflevector <2 x i64 > %broadcast.splatinsert , <2 x i64 > undef , <2 x i32 > zeroinitializer
194+ %prod = mul nuw <2 x i64 > %broadcast.splat , %ext.b
195+ %out = trunc <2 x i64 > %prod to <2 x i32 >
196+ ret <2 x i32 > %out
197+ }
198+
161199; Unsupported combines
162200
163201define <2 x i16 > @dupsext_v2i8_v2i16 (i8 %src , <2 x i8 > %b ) {
@@ -407,10 +445,10 @@ define <8 x i16> @shufsext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
407445;
408446; CHECK-GI-LABEL: shufsext_v8i8_v8i16:
409447; CHECK-GI: // %bb.0: // %entry
410- ; CHECK-GI-NEXT: adrp x8, .LCPI13_0
448+ ; CHECK-GI-NEXT: adrp x8, .LCPI14_0
411449; CHECK-GI-NEXT: sshll v2.8h, v0.8b, #0
412450; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #0
413- ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI13_0 ]
451+ ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI14_0 ]
414452; CHECK-GI-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b
415453; CHECK-GI-NEXT: mul v0.8h, v0.8h, v1.8h
416454; CHECK-GI-NEXT: ret
@@ -460,10 +498,10 @@ define <8 x i16> @shufzext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
460498;
461499; CHECK-GI-LABEL: shufzext_v8i8_v8i16:
462500; CHECK-GI: // %bb.0: // %entry
463- ; CHECK-GI-NEXT: adrp x8, .LCPI15_0
501+ ; CHECK-GI-NEXT: adrp x8, .LCPI16_0
464502; CHECK-GI-NEXT: ushll v2.8h, v0.8b, #0
465503; CHECK-GI-NEXT: ushll v1.8h, v1.8b, #0
466- ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI15_0 ]
504+ ; CHECK-GI-NEXT: ldr q0, [x8, :lo12:.LCPI16_0 ]
467505; CHECK-GI-NEXT: tbl v0.16b, { v2.16b, v3.16b }, v0.16b
468506; CHECK-GI-NEXT: mul v0.8h, v0.8h, v1.8h
469507; CHECK-GI-NEXT: ret
0 commit comments