102
102
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sli2d
103
103
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for sqshlu_zero_shift_amount
104
104
; 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
105
106
; 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
106
109
107
110
define <8 x i8 > @sqshl8b (ptr %A , ptr %B ) nounwind {
108
111
; CHECK-LABEL: sqshl8b:
@@ -4387,6 +4390,20 @@ define <2 x i8> @lshr_trunc_v2i64_v2i8(<2 x i64> %a) {
4387
4390
ret <2 x i8 > %c
4388
4391
}
4389
4392
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
+
4390
4407
define <2 x i8 > @ashr_trunc_v2i64_v2i8 (<2 x i64 > %a ) {
4391
4408
; CHECK-LABEL: ashr_trunc_v2i64_v2i8:
4392
4409
; CHECK: // %bb.0:
@@ -4397,6 +4414,20 @@ define <2 x i8> @ashr_trunc_v2i64_v2i8(<2 x i64> %a) {
4397
4414
ret <2 x i8 > %c
4398
4415
}
4399
4416
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
+
4400
4431
define <2 x i8 > @shl_trunc_v2i64_v2i8 (<2 x i64 > %a ) {
4401
4432
; CHECK-SD-LABEL: shl_trunc_v2i64_v2i8:
4402
4433
; CHECK-SD: // %bb.0:
@@ -4414,4 +4445,16 @@ define <2 x i8> @shl_trunc_v2i64_v2i8(<2 x i64> %a) {
4414
4445
ret <2 x i8 > %c
4415
4446
}
4416
4447
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
+
4417
4460
declare <2 x i64 > @llvm.aarch64.neon.addp.v2i64 (<2 x i64 >, <2 x i64 >)
0 commit comments