[llvm] f196115 - [ARM] Add predicated shift patterns
David Green via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 29 12:32:59 PDT 2023
Author: David Green
Date: 2023-04-29T20:32:54+01:00
New Revision: f1961153c2017351244289e1b3164bfa9125996f
URL: https://github.com/llvm/llvm-project/commit/f1961153c2017351244289e1b3164bfa9125996f
DIFF: https://github.com/llvm/llvm-project/commit/f1961153c2017351244289e1b3164bfa9125996f.diff
LOG: [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
Added:
Modified:
llvm/lib/Target/ARM/ARMInstrMVE.td
llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll
llvm/test/CodeGen/Thumb2/mve-pred-selectop.ll
llvm/test/CodeGen/Thumb2/mve-pred-selectop2.ll
llvm/test/CodeGen/Thumb2/mve-pred-selectop3.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMInstrMVE.td b/llvm/lib/Target/ARM/ARMInstrMVE.td
index d4a70cddd32fc..fa25c571a9bd5 100644
--- a/llvm/lib/Target/ARM/ARMInstrMVE.td
+++ b/llvm/lib/Target/ARM/ARMInstrMVE.td
@@ -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,
diff --git a/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll b/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll
index 04d0b46dea67b..a270fee96a5a0 100644
--- a/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-laneinterleaving.ll
@@ -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:
diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-selectop.ll b/llvm/test/CodeGen/Thumb2/mve-pred-selectop.ll
index 264de93e28f7e..eeb1d0d1e7dbc 100644
--- a/llvm/test/CodeGen/Thumb2/mve-pred-selectop.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-pred-selectop.ll
@@ -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
diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-selectop2.ll b/llvm/test/CodeGen/Thumb2/mve-pred-selectop2.ll
index 2f8b0fd89743d..de7af894bd4fb 100644
--- a/llvm/test/CodeGen/Thumb2/mve-pred-selectop2.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-pred-selectop2.ll
@@ -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:
diff --git a/llvm/test/CodeGen/Thumb2/mve-pred-selectop3.ll b/llvm/test/CodeGen/Thumb2/mve-pred-selectop3.ll
index 5adbe9ae044a9..080c6c1a1efdc 100644
--- a/llvm/test/CodeGen/Thumb2/mve-pred-selectop3.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-pred-selectop3.ll
@@ -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:
More information about the llvm-commits
mailing list