[ARM] Add predicated shift patterns

This uses the patterns defined in MVE_TwoOpPattern to add predicated patterns
for vshls/u instructions.

Differnetial Revision: https://reviews.llvm.org/D149366
This commit is contained in:
David Green 2023-04-29 20:32:54 +01:00
parent 70d9c62f54
commit f1961153c2
5 changed files with 78 additions and 126 deletions

View File

@ -3192,19 +3192,18 @@ defm MVE_VQRSHL_by_vec : mve_shift_by_vec_multi<"vqrshl", 0b1, 0b1>;
defm MVE_VRSHL_by_vec : mve_shift_by_vec_multi<"vrshl", 0b0, 0b1>;
let Predicates = [HasMVEInt] in {
def : Pat<(v4i32 (ARMvshlu (v4i32 MQPR:$Qm), (v4i32 MQPR:$Qn))),
(v4i32 (MVE_VSHL_by_vecu32 (v4i32 MQPR:$Qm), (v4i32 MQPR:$Qn)))>;
def : Pat<(v8i16 (ARMvshlu (v8i16 MQPR:$Qm), (v8i16 MQPR:$Qn))),
(v8i16 (MVE_VSHL_by_vecu16 (v8i16 MQPR:$Qm), (v8i16 MQPR:$Qn)))>;
def : Pat<(v16i8 (ARMvshlu (v16i8 MQPR:$Qm), (v16i8 MQPR:$Qn))),
(v16i8 (MVE_VSHL_by_vecu8 (v16i8 MQPR:$Qm), (v16i8 MQPR:$Qn)))>;
def : Pat<(v4i32 (ARMvshls (v4i32 MQPR:$Qm), (v4i32 MQPR:$Qn))),
(v4i32 (MVE_VSHL_by_vecs32 (v4i32 MQPR:$Qm), (v4i32 MQPR:$Qn)))>;
def : Pat<(v8i16 (ARMvshls (v8i16 MQPR:$Qm), (v8i16 MQPR:$Qn))),
(v8i16 (MVE_VSHL_by_vecs16 (v8i16 MQPR:$Qm), (v8i16 MQPR:$Qn)))>;
def : Pat<(v16i8 (ARMvshls (v16i8 MQPR:$Qm), (v16i8 MQPR:$Qn))),
(v16i8 (MVE_VSHL_by_vecs8 (v16i8 MQPR:$Qm), (v16i8 MQPR:$Qn)))>;
defm : MVE_TwoOpPattern<MVE_v16i8, ARMvshlu, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 1)), MVE_VSHL_by_vecu8, null_frag>;
defm : MVE_TwoOpPattern<MVE_v8i16, ARMvshlu, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 1)), MVE_VSHL_by_vecu16, null_frag>;
defm : MVE_TwoOpPattern<MVE_v4i32, ARMvshlu, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 1)), MVE_VSHL_by_vecu32, null_frag>;
defm : MVE_TwoOpPattern<MVE_v16i8, ARMvshls, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 0)), MVE_VSHL_by_vecs8, null_frag>;
defm : MVE_TwoOpPattern<MVE_v8i16, ARMvshls, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 0)), MVE_VSHL_by_vecs16, null_frag>;
defm : MVE_TwoOpPattern<MVE_v4i32, ARMvshls, int_arm_mve_vshl_vector_predicated,
(? (i32 0), (i32 0), (i32 0)), MVE_VSHL_by_vecs32, null_frag>;
}
class MVE_shift_with_imm<string iname, string suffix, dag oops, dag iops,

View File

@ -443,24 +443,23 @@ define arm_aapcs_vfpcc <8 x i16> @ext_ops_trunc_i16(<8 x i16> %a, <8 x i16> %b)
; CHECK-NEXT: vshl.s32 q4, q4, q5
; CHECK-NEXT: vneg.s32 q5, q3
; CHECK-NEXT: vsub.i32 q4, q4, q2
; CHECK-NEXT: vcmp.i32 eq, q3, q2
; CHECK-NEXT: vmul.i32 q4, q4, q2
; CHECK-NEXT: vmovlb.u16 q1, q1
; CHECK-NEXT: vshl.u32 q4, q4, q5
; CHECK-NEXT: vmovlb.s16 q0, q0
; CHECK-NEXT: vshl.u32 q4, q4, q2
; CHECK-NEXT: vpt.i32 eq, q3, q2
; CHECK-NEXT: vshlt.u32 q2, q4, q2
; CHECK-NEXT: vadd.i32 q3, q0, q1
; CHECK-NEXT: vpsel q2, q4, q2
; CHECK-NEXT: vneg.s32 q4, q1
; CHECK-NEXT: vshl.s32 q3, q3, q4
; CHECK-NEXT: vneg.s32 q4, q0
; CHECK-NEXT: vsub.i32 q3, q3, q1
; CHECK-NEXT: vcmp.i32 eq, q0, q1
; CHECK-NEXT: vmul.i32 q3, q3, q1
; CHECK-NEXT: vshl.u32 q3, q3, q4
; CHECK-NEXT: vshl.u32 q3, q3, q1
; CHECK-NEXT: vpsel q0, q3, q1
; CHECK-NEXT: vmovnt.i32 q0, q2
; CHECK-NEXT: vpt.i32 eq, q0, q1
; CHECK-NEXT: vshlt.u32 q1, q3, q1
; CHECK-NEXT: vmovnt.i32 q1, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: vpop {d8, d9, d10, d11}
; CHECK-NEXT: bx lr
entry:
@ -490,24 +489,23 @@ define arm_aapcs_vfpcc <16 x i8> @ext_ops_trunc_i8(<16 x i8> %a, <16 x i8> %b) {
; CHECK-NEXT: vshl.s16 q4, q4, q5
; CHECK-NEXT: vneg.s16 q5, q3
; CHECK-NEXT: vsub.i16 q4, q4, q2
; CHECK-NEXT: vcmp.i16 eq, q3, q2
; CHECK-NEXT: vmul.i16 q4, q4, q2
; CHECK-NEXT: vmovlb.u8 q1, q1
; CHECK-NEXT: vshl.u16 q4, q4, q5
; CHECK-NEXT: vmovlb.s8 q0, q0
; CHECK-NEXT: vshl.u16 q4, q4, q2
; CHECK-NEXT: vpt.i16 eq, q3, q2
; CHECK-NEXT: vshlt.u16 q2, q4, q2
; CHECK-NEXT: vadd.i16 q3, q0, q1
; CHECK-NEXT: vpsel q2, q4, q2
; CHECK-NEXT: vneg.s16 q4, q1
; CHECK-NEXT: vshl.s16 q3, q3, q4
; CHECK-NEXT: vneg.s16 q4, q0
; CHECK-NEXT: vsub.i16 q3, q3, q1
; CHECK-NEXT: vcmp.i16 eq, q0, q1
; CHECK-NEXT: vmul.i16 q3, q3, q1
; CHECK-NEXT: vshl.u16 q3, q3, q4
; CHECK-NEXT: vshl.u16 q3, q3, q1
; CHECK-NEXT: vpsel q0, q3, q1
; CHECK-NEXT: vmovnt.i16 q0, q2
; CHECK-NEXT: vpt.i16 eq, q0, q1
; CHECK-NEXT: vshlt.u16 q1, q3, q1
; CHECK-NEXT: vmovnt.i16 q1, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: vpop {d8, d9, d10, d11}
; CHECK-NEXT: bx lr
entry:

View File

@ -238,9 +238,8 @@ entry:
define arm_aapcs_vfpcc <4 x i32> @shl_v4i32(<4 x i32> %z, <4 x i32> %x, <4 x i32> %y) {
; CHECK-LABEL: shl_v4i32:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u32 q1, q1, q2
; CHECK-NEXT: vcmp.i32 eq, q0, zr
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i32 eq, q0, zr
; CHECK-NEXT: vshlt.u32 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <4 x i32> %z, zeroinitializer
@ -252,9 +251,8 @@ entry:
define arm_aapcs_vfpcc <8 x i16> @shl_v8i16(<8 x i16> %z, <8 x i16> %x, <8 x i16> %y) {
; CHECK-LABEL: shl_v8i16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u16 q1, q1, q2
; CHECK-NEXT: vcmp.i16 eq, q0, zr
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i16 eq, q0, zr
; CHECK-NEXT: vshlt.u16 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <8 x i16> %z, zeroinitializer
@ -266,9 +264,8 @@ entry:
define arm_aapcs_vfpcc <16 x i8> @shl_v16i8(<16 x i8> %z, <16 x i8> %x, <16 x i8> %y) {
; CHECK-LABEL: shl_v16i8:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u8 q1, q1, q2
; CHECK-NEXT: vcmp.i8 eq, q0, zr
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i8 eq, q0, zr
; CHECK-NEXT: vshlt.u8 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <16 x i8> %z, zeroinitializer
@ -281,9 +278,8 @@ define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32(<4 x i32> %z, <4 x i32> %x, <4 x i3
; CHECK-LABEL: ashr_v4i32:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q2
; CHECK-NEXT: vcmp.i32 eq, q0, zr
; CHECK-NEXT: vshl.s32 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i32 eq, q0, zr
; CHECK-NEXT: vshlt.s32 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <4 x i32> %z, zeroinitializer
@ -296,9 +292,8 @@ define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16(<8 x i16> %z, <8 x i16> %x, <8 x i1
; CHECK-LABEL: ashr_v8i16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q2
; CHECK-NEXT: vcmp.i16 eq, q0, zr
; CHECK-NEXT: vshl.s16 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i16 eq, q0, zr
; CHECK-NEXT: vshlt.s16 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <8 x i16> %z, zeroinitializer
@ -311,9 +306,8 @@ define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8(<16 x i8> %z, <16 x i8> %x, <16 x i
; CHECK-LABEL: ashr_v16i8:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q2
; CHECK-NEXT: vcmp.i8 eq, q0, zr
; CHECK-NEXT: vshl.s8 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i8 eq, q0, zr
; CHECK-NEXT: vshlt.s8 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <16 x i8> %z, zeroinitializer
@ -326,9 +320,8 @@ define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32(<4 x i32> %z, <4 x i32> %x, <4 x i3
; CHECK-LABEL: lshr_v4i32:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q2
; CHECK-NEXT: vcmp.i32 eq, q0, zr
; CHECK-NEXT: vshl.u32 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i32 eq, q0, zr
; CHECK-NEXT: vshlt.u32 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <4 x i32> %z, zeroinitializer
@ -341,9 +334,8 @@ define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16(<8 x i16> %z, <8 x i16> %x, <8 x i1
; CHECK-LABEL: lshr_v8i16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q2
; CHECK-NEXT: vcmp.i16 eq, q0, zr
; CHECK-NEXT: vshl.u16 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i16 eq, q0, zr
; CHECK-NEXT: vshlt.u16 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <8 x i16> %z, zeroinitializer
@ -356,9 +348,8 @@ define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8(<16 x i8> %z, <16 x i8> %x, <16 x i
; CHECK-LABEL: lshr_v16i8:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q2
; CHECK-NEXT: vcmp.i8 eq, q0, zr
; CHECK-NEXT: vshl.u8 q1, q1, q2
; CHECK-NEXT: vpsel q0, q1, q0
; CHECK-NEXT: vpt.i8 eq, q0, zr
; CHECK-NEXT: vshlt.u8 q0, q1, q2
; CHECK-NEXT: bx lr
entry:
%c = icmp eq <16 x i8> %z, zeroinitializer

View File

@ -256,10 +256,9 @@ entry:
define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {
; CHECK-LABEL: shl_v4i32_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u32 q1, q0, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -271,10 +270,9 @@ entry:
define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {
; CHECK-LABEL: shl_v8i16_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u16 q1, q0, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -286,10 +284,9 @@ entry:
define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {
; CHECK-LABEL: shl_v16i8_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u8 q1, q0, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -303,9 +300,8 @@ define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q1, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.s32 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -319,9 +315,8 @@ define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q1, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.s16 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -335,9 +330,8 @@ define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q1, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.s8 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -351,9 +345,8 @@ define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q1, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.u32 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -367,9 +360,8 @@ define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q1, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.u16 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -383,9 +375,8 @@ define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q1, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.u8 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -1797,10 +1788,9 @@ entry:
define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {
; CHECK-LABEL: shl_v4i32_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u32 q0, q0, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u32 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1813,10 +1803,9 @@ entry:
define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {
; CHECK-LABEL: shl_v8i16_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u16 q0, q0, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u16 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1829,10 +1818,9 @@ entry:
define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {
; CHECK-LABEL: shl_v16i8_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u8 q0, q0, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u8 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1847,9 +1835,8 @@ define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.s32 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s32 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1864,9 +1851,8 @@ define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.s16 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s16 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1881,9 +1867,8 @@ define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.s8 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s8 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1898,9 +1883,8 @@ define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.u32 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u32 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1915,9 +1899,8 @@ define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.u16 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u16 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1932,9 +1915,8 @@ define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.u8 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u8 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:

View File

@ -256,10 +256,9 @@ entry:
define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %n) {
; CHECK-LABEL: shl_v4i32_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u32 q1, q0, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -271,10 +270,9 @@ entry:
define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %n) {
; CHECK-LABEL: shl_v8i16_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u16 q1, q0, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -286,10 +284,9 @@ entry:
define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %n) {
; CHECK-LABEL: shl_v16i8_x:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u8 q1, q0, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -303,9 +300,8 @@ define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q1, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.s32 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -319,9 +315,8 @@ define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q1, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.s16 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -335,9 +330,8 @@ define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q1, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.s8 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.s8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -351,9 +345,8 @@ define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_x(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q1, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.u32 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u32 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <4 x i1> @llvm.arm.mve.vctp32(i32 %n)
@ -367,9 +360,8 @@ define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_x(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q1, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.u16 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u16 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <8 x i1> @llvm.arm.mve.vctp16(i32 %n)
@ -383,9 +375,8 @@ define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_x(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q1, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.u8 q1, q0, q1
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q0, q1
; CHECK-NEXT: vshlt.u8 q0, q0, q1
; CHECK-NEXT: bx lr
entry:
%c = call <16 x i1> @llvm.arm.mve.vctp8(i32 %n)
@ -1851,10 +1842,9 @@ entry:
define arm_aapcs_vfpcc <4 x i32> @shl_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %n) {
; CHECK-LABEL: shl_v4i32_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u32 q0, q0, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u32 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1867,10 +1857,9 @@ entry:
define arm_aapcs_vfpcc <8 x i16> @shl_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %n) {
; CHECK-LABEL: shl_v8i16_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u16 q0, q0, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u16 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1883,10 +1872,9 @@ entry:
define arm_aapcs_vfpcc <16 x i8> @shl_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %n) {
; CHECK-LABEL: shl_v16i8_y:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vshl.u8 q0, q0, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u8 q1, q0, q1
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1901,9 +1889,8 @@ define arm_aapcs_vfpcc <4 x i32> @ashr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.s32 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s32 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1918,9 +1905,8 @@ define arm_aapcs_vfpcc <8 x i16> @ashr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.s16 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s16 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1935,9 +1921,8 @@ define arm_aapcs_vfpcc <16 x i8> @ashr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.s8 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.s8 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1952,9 +1937,8 @@ define arm_aapcs_vfpcc <4 x i32> @lshr_v4i32_y(<4 x i32> %x, <4 x i32> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s32 q2, q1
; CHECK-NEXT: vctp.32 r0
; CHECK-NEXT: vshl.u32 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u32 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1969,9 +1953,8 @@ define arm_aapcs_vfpcc <8 x i16> @lshr_v8i16_y(<8 x i16> %x, <8 x i16> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s16 q2, q1
; CHECK-NEXT: vctp.16 r0
; CHECK-NEXT: vshl.u16 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u16 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry:
@ -1986,9 +1969,8 @@ define arm_aapcs_vfpcc <16 x i8> @lshr_v16i8_y(<16 x i8> %x, <16 x i8> %y, i32 %
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vneg.s8 q2, q1
; CHECK-NEXT: vctp.8 r0
; CHECK-NEXT: vshl.u8 q0, q0, q2
; CHECK-NEXT: vpst
; CHECK-NEXT: vmovt q1, q0
; CHECK-NEXT: vshlt.u8 q1, q0, q2
; CHECK-NEXT: vmov q0, q1
; CHECK-NEXT: bx lr
entry: