; CHECK-NEXT: vldrh.s32 q0, [r0], #8
; CHECK-NEXT: vldrh.s32 q1, [r1], #8
; CHECK-NEXT: vmul.i32 q0, q1, q0
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2], #8
; CHECK-NEXT: le lr, .LBB5_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrh.s32 q1, [r1, #8]
; CHECK-NEXT: vmul.i32 q0, q1, q0
; CHECK-NEXT: vldrh.s32 q1, [r1], #16
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2, #8]
; CHECK-NEXT: vldrh.s32 q0, [r0], #16
; CHECK-NEXT: vmul.i32 q0, q1, q0
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB6_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrh.u16 q1, [r1], #16
; CHECK-NEXT: vmullt.s16 q2, q1, q0
; CHECK-NEXT: vmullb.s16 q0, q1, q0
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vshr.s32 q2, q2, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vmovlb.s16 q0, q0
-; CHECK-NEXT: vqmovnt.s32 q0, q2
+; CHECK-NEXT: vqshrnt.s32 q0, q2, #15
; CHECK-NEXT: vstrb.8 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB7_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrht.s32 q2, [r0], #8
; CHECK-NEXT: vldrht.s32 q3, [r1], #8
; CHECK-NEXT: vmul.i32 q2, q3, q2
-; CHECK-NEXT: vshr.s32 q2, q2, #15
-; CHECK-NEXT: vqmovnb.s32 q2, q2
+; CHECK-NEXT: vqshrnb.s32 q2, q2, #15
; CHECK-NEXT: vmovlb.s16 q2, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vstrht.32 q2, [r2], #8
; CHECK-NEXT: vmov.u16 r4, q7[3]
; CHECK-NEXT: vmov.32 q0[3], r4
; CHECK-NEXT: vmullb.s16 q0, q0, q5
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vmovlb.s16 q0, q0
; CHECK-NEXT: vmov r4, s0
; CHECK-NEXT: vmov.16 q5[0], r4
; CHECK-NEXT: vmov.u16 r4, q7[7]
; CHECK-NEXT: vmov.32 q6[3], r4
; CHECK-NEXT: vmullb.s16 q0, q6, q0
-; CHECK-NEXT: vshr.s32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #15
; CHECK-NEXT: vmovlb.s16 q0, q0
; CHECK-NEXT: vmov r4, s0
; CHECK-NEXT: vmov.16 q5[4], r4
; CHECK-NEXT: vldrht.u16 q6, [r1], #16
; CHECK-NEXT: vmullt.s16 q7, q6, q5
; CHECK-NEXT: vmullb.s16 q5, q6, q5
-; CHECK-NEXT: vshr.s32 q7, q7, #15
-; CHECK-NEXT: vshr.s32 q5, q5, #15
-; CHECK-NEXT: vqmovnb.s32 q5, q5
+; CHECK-NEXT: vqshrnb.s32 q5, q5, #15
; CHECK-NEXT: vmovlb.s16 q5, q5
-; CHECK-NEXT: vqmovnt.s32 q5, q7
+; CHECK-NEXT: vqshrnt.s32 q5, q7, #15
; CHECK-NEXT: vpst
; CHECK-NEXT: vstrht.16 q5, [r2], #16
; CHECK-NEXT: le lr, .LBB10_2
; CHECK-NEXT: vldrh.u32 q0, [r0], #8
; CHECK-NEXT: vldrh.u32 q1, [r1], #8
; CHECK-NEXT: vmul.i32 q0, q1, q0
-; CHECK-NEXT: vshr.u32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.u32 q0, q0
+; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2], #8
; CHECK-NEXT: le lr, .LBB11_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrh.u32 q1, [r1, #8]
; CHECK-NEXT: vmul.i32 q0, q1, q0
; CHECK-NEXT: vldrh.u32 q1, [r1], #16
-; CHECK-NEXT: vshr.u32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.u32 q0, q0
+; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2, #8]
; CHECK-NEXT: vldrh.u32 q0, [r0], #16
; CHECK-NEXT: vmul.i32 q0, q1, q0
-; CHECK-NEXT: vshr.u32 q0, q0, #15
-; CHECK-NEXT: vqmovnb.u32 q0, q0
+; CHECK-NEXT: vqshrnb.u32 q0, q0, #15
; CHECK-NEXT: vstrh.32 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB12_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrb.s16 q0, [r0], #8
; CHECK-NEXT: vldrb.s16 q1, [r1], #8
; CHECK-NEXT: vmul.i16 q0, q1, q0
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vstrb.16 q0, [r2], #8
; CHECK-NEXT: le lr, .LBB14_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrb.s16 q1, [r1, #8]
; CHECK-NEXT: vmul.i16 q0, q1, q0
; CHECK-NEXT: vldrb.s16 q1, [r1], #16
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vstrb.16 q0, [r2, #8]
; CHECK-NEXT: vldrb.s16 q0, [r0], #16
; CHECK-NEXT: vmul.i16 q0, q1, q0
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vstrb.16 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB15_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrb.u8 q1, [r1], #16
; CHECK-NEXT: vmullt.s8 q2, q1, q0
; CHECK-NEXT: vmullb.s8 q0, q1, q0
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vshr.s16 q2, q2, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vmovlb.s8 q0, q0
-; CHECK-NEXT: vqmovnt.s16 q0, q2
+; CHECK-NEXT: vqshrnt.s16 q0, q2, #7
; CHECK-NEXT: vstrb.8 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB16_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrbt.s16 q5, [r0], #8
; CHECK-NEXT: vldrbt.s16 q6, [r1], #8
; CHECK-NEXT: vmul.i16 q5, q6, q5
-; CHECK-NEXT: vshr.s16 q5, q5, #7
-; CHECK-NEXT: vqmovnb.s16 q5, q5
+; CHECK-NEXT: vqshrnb.s16 q5, q5, #7
; CHECK-NEXT: vmovlb.s8 q5, q5
; CHECK-NEXT: vpst
; CHECK-NEXT: vstrbt.16 q5, [r2], #8
; CHECK-NEXT: vmov.u8 r4, q4[7]
; CHECK-NEXT: vmov.16 q5[7], r4
; CHECK-NEXT: vmullb.s8 q5, q5, q7
-; CHECK-NEXT: vshr.s16 q5, q5, #7
-; CHECK-NEXT: vqmovnb.s16 q5, q5
+; CHECK-NEXT: vqshrnb.s16 q5, q5, #7
; CHECK-NEXT: vmovlb.s8 q5, q5
; CHECK-NEXT: vmov.u16 r4, q5[0]
; CHECK-NEXT: vmov.8 q7[0], r4
; CHECK-NEXT: vmov.u8 r4, q4[15]
; CHECK-NEXT: vmov.16 q0[7], r4
; CHECK-NEXT: vmullb.s8 q0, q0, q5
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vmovlb.s8 q0, q0
; CHECK-NEXT: vmov.u16 r4, q0[0]
; CHECK-NEXT: vmov.8 q7[8], r4
; CHECK-NEXT: vldrbt.u8 q4, [r1], #16
; CHECK-NEXT: vmullt.s8 q5, q4, q0
; CHECK-NEXT: vmullb.s8 q0, q4, q0
-; CHECK-NEXT: vshr.s16 q0, q0, #7
-; CHECK-NEXT: vshr.s16 q5, q5, #7
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #7
; CHECK-NEXT: vmovlb.s8 q0, q0
-; CHECK-NEXT: vqmovnt.s16 q0, q5
+; CHECK-NEXT: vqshrnt.s16 q0, q5, #7
; CHECK-NEXT: vpst
; CHECK-NEXT: vstrbt.8 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB19_2
; CHECK-NEXT: vldrb.u16 q0, [r0], #8
; CHECK-NEXT: vldrb.u16 q1, [r1], #8
; CHECK-NEXT: vmul.i16 q0, q1, q0
-; CHECK-NEXT: vshr.u16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.u16 q0, q0
+; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
; CHECK-NEXT: vstrb.16 q0, [r2], #8
; CHECK-NEXT: le lr, .LBB20_4
; CHECK-NEXT: @ %bb.5: @ %middle.block
; CHECK-NEXT: vldrb.u16 q1, [r1, #8]
; CHECK-NEXT: vmul.i16 q0, q1, q0
; CHECK-NEXT: vldrb.u16 q1, [r1], #16
-; CHECK-NEXT: vshr.u16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.u16 q0, q0
+; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
; CHECK-NEXT: vmovlb.u8 q0, q0
; CHECK-NEXT: vstrb.16 q0, [r2, #8]
; CHECK-NEXT: vldrb.u16 q0, [r0], #16
; CHECK-NEXT: vmul.i16 q0, q1, q0
-; CHECK-NEXT: vshr.u16 q0, q0, #7
-; CHECK-NEXT: vqmovnb.u16 q0, q0
+; CHECK-NEXT: vqshrnb.u16 q0, q0, #7
; CHECK-NEXT: vmovlb.u8 q0, q0
; CHECK-NEXT: vstrb.16 q0, [r2], #16
; CHECK-NEXT: le lr, .LBB21_4
define arm_aapcs_vfpcc <4 x i32> @vqshrni32_smaxmin(<4 x i32> %so) {
; CHECK-LABEL: vqshrni32_smaxmin:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.s32 q0, q0, #3
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #3
; CHECK-NEXT: vmovlb.s16 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <4 x i32> @vqshrni32_sminmax(<4 x i32> %so) {
; CHECK-LABEL: vqshrni32_sminmax:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.s32 q0, q0, #3
-; CHECK-NEXT: vqmovnb.s32 q0, q0
+; CHECK-NEXT: vqshrnb.s32 q0, q0, #3
; CHECK-NEXT: vmovlb.s16 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <4 x i32> @vqshrni32_umaxmin(<4 x i32> %so) {
; CHECK-LABEL: vqshrni32_umaxmin:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.u32 q0, q0, #3
-; CHECK-NEXT: vqmovnb.u32 q0, q0
+; CHECK-NEXT: vqshrnb.u32 q0, q0, #3
; CHECK-NEXT: vmovlb.u16 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <4 x i32> @vqshrni32_uminmax(<4 x i32> %so) {
; CHECK-LABEL: vqshrni32_uminmax:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.u32 q0, q0, #3
-; CHECK-NEXT: vqmovnb.u32 q0, q0
+; CHECK-NEXT: vqshrnb.u32 q0, q0, #3
; CHECK-NEXT: vmovlb.u16 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <8 x i16> @vqshrni16_smaxmin(<8 x i16> %so) {
; CHECK-LABEL: vqshrni16_smaxmin:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.s16 q0, q0, #3
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #3
; CHECK-NEXT: vmovlb.s8 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <8 x i16> @vqshrni16_sminmax(<8 x i16> %so) {
; CHECK-LABEL: vqshrni16_sminmax:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.s16 q0, q0, #3
-; CHECK-NEXT: vqmovnb.s16 q0, q0
+; CHECK-NEXT: vqshrnb.s16 q0, q0, #3
; CHECK-NEXT: vmovlb.s8 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <8 x i16> @vqshrni16_umaxmin(<8 x i16> %so) {
; CHECK-LABEL: vqshrni16_umaxmin:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.u16 q0, q0, #3
-; CHECK-NEXT: vqmovnb.u16 q0, q0
+; CHECK-NEXT: vqshrnb.u16 q0, q0, #3
; CHECK-NEXT: vmovlb.u8 q0, q0
; CHECK-NEXT: bx lr
entry:
define arm_aapcs_vfpcc <8 x i16> @vqshrni16_uminmax(<8 x i16> %so) {
; CHECK-LABEL: vqshrni16_uminmax:
; CHECK: @ %bb.0: @ %entry
-; CHECK-NEXT: vshr.u16 q0, q0, #3
-; CHECK-NEXT: vqmovnb.u16 q0, q0
+; CHECK-NEXT: vqshrnb.u16 q0, q0, #3
; CHECK-NEXT: vmovlb.u8 q0, q0
; CHECK-NEXT: bx lr
entry: