102102; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sli2d
103103; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sqshlu_zero_shift_amount
104104; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lshr_trunc_v2i64_v2i8
105+ ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for lshr_trunc_v4i64_v4i16
105106; CHECK-GI-NEXT: warning: Instruction selection used fallback path for ashr_trunc_v2i64_v2i8
107+ ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for ashr_trunc_v4i64_v4i16
108+ ; CHECK-GI-NEXT: warning: Instruction selection used fallback path for shl_trunc_v4i64_v4i16
106109
107110define <8 x i8 > @sqshl8b (ptr %A , ptr %B ) nounwind {
108111; CHECK-LABEL: sqshl8b:
@@ -4387,6 +4390,20 @@ define <2 x i8> @lshr_trunc_v2i64_v2i8(<2 x i64> %a) {
43874390 ret <2 x i8 > %c
43884391}
43894392
4393+ define <4 x i16 > @lshr_trunc_v4i64_v4i16 (<4 x i64 > %a ) {
4394+ ; CHECK-LABEL: lshr_trunc_v4i64_v4i16:
4395+ ; CHECK: // %bb.0:
4396+ ; CHECK-NEXT: xtn v1.2s, v1.2d
4397+ ; CHECK-NEXT: xtn v0.2s, v0.2d
4398+ ; CHECK-NEXT: ushr v1.2s, v1.2s, #8
4399+ ; CHECK-NEXT: ushr v0.2s, v0.2s, #8
4400+ ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v1.4h
4401+ ; CHECK-NEXT: ret
4402+ %b = lshr <4 x i64 > %a , <i64 8 , i64 8 , i64 8 , i64 8 >
4403+ %c = trunc <4 x i64 > %b to <4 x i16 >
4404+ ret <4 x i16 > %c
4405+ }
4406+
43904407define <2 x i8 > @ashr_trunc_v2i64_v2i8 (<2 x i64 > %a ) {
43914408; CHECK-LABEL: ashr_trunc_v2i64_v2i8:
43924409; CHECK: // %bb.0:
@@ -4397,6 +4414,20 @@ define <2 x i8> @ashr_trunc_v2i64_v2i8(<2 x i64> %a) {
43974414 ret <2 x i8 > %c
43984415}
43994416
4417+ define <4 x i16 > @ashr_trunc_v4i64_v4i16 (<4 x i64 > %a ) {
4418+ ; CHECK-LABEL: ashr_trunc_v4i64_v4i16:
4419+ ; CHECK: // %bb.0:
4420+ ; CHECK-NEXT: xtn v1.2s, v1.2d
4421+ ; CHECK-NEXT: xtn v0.2s, v0.2d
4422+ ; CHECK-NEXT: ushr v1.2s, v1.2s, #8
4423+ ; CHECK-NEXT: ushr v0.2s, v0.2s, #8
4424+ ; CHECK-NEXT: uzp1 v0.4h, v0.4h, v1.4h
4425+ ; CHECK-NEXT: ret
4426+ %b = ashr <4 x i64 > %a , <i64 8 , i64 8 , i64 8 , i64 8 >
4427+ %c = trunc <4 x i64 > %b to <4 x i16 >
4428+ ret <4 x i16 > %c
4429+ }
4430+
44004431define <2 x i8 > @shl_trunc_v2i64_v2i8 (<2 x i64 > %a ) {
44014432; CHECK-SD-LABEL: shl_trunc_v2i64_v2i8:
44024433; CHECK-SD: // %bb.0:
@@ -4414,4 +4445,16 @@ define <2 x i8> @shl_trunc_v2i64_v2i8(<2 x i64> %a) {
44144445 ret <2 x i8 > %c
44154446}
44164447
4448+ define <4 x i16 > @shl_trunc_v4i64_v4i16 (<4 x i64 > %a ) {
4449+ ; CHECK-LABEL: shl_trunc_v4i64_v4i16:
4450+ ; CHECK: // %bb.0:
4451+ ; CHECK-NEXT: uzp1 v0.4s, v0.4s, v1.4s
4452+ ; CHECK-NEXT: xtn v0.4h, v0.4s
4453+ ; CHECK-NEXT: shl v0.4h, v0.4h, #8
4454+ ; CHECK-NEXT: ret
4455+ %b = shl <4 x i64 > %a , <i64 8 , i64 8 , i64 8 , i64 8 >
4456+ %c = trunc <4 x i64 > %b to <4 x i16 >
4457+ ret <4 x i16 > %c
4458+ }
4459+
44174460declare <2 x i64 > @llvm.aarch64.neon.addp.v2i64 (<2 x i64 >, <2 x i64 >)
0 commit comments