Lines Matching full:vec
242 class MVEVectorVTInfo<ValueType vec, ValueType dblvec,
247 ValueType Vec = vec;
250 // of those in Vec, so we can use it in ISel patterns. It is up to the
259 // Same as Pred but for DblVec rather than Vec.
318 def : Pat<(VTI.Vec (Op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn))),
319 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
323 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$mask),
324 (VTI.Vec (Op (VTI.Vec MQPR:$Qm),
325 (VTI.Vec MQPR:$Qn))),
326 (VTI.Vec MQPR:$inactive))),
327 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
329 (VTI.Vec MQPR:$inactive)))>;
332 def : Pat<(VTI.Vec (Op (VTI.Vec MQPR:$Qm),
333 (VTI.Vec (vselect (VTI.Pred VCCR:$mask),
334 (VTI.Vec MQPR:$Qn),
335 (VTI.Vec IdentityVec))))),
336 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
338 (VTI.Vec MQPR:$Qm)))>;
342 def : Pat<(VTI.Vec !con((PredInt (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)),
344 (? (VTI.Pred VCCR:$mask), (VTI.Vec MQPR:$inactive)))),
345 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
347 (VTI.Vec MQPR:$inactive)))>;
354 def : Pat<(VTI.Vec (Op (VTI.Vec MQPR:$Qm), (VTI.Vec (ARMvdup rGPR:$Rn)))),
355 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), rGPR:$Rn))>;
359 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$mask),
360 (VTI.Vec (Op (VTI.Vec MQPR:$Qm),
361 (VTI.Vec (ARMvdup rGPR:$Rn)))),
362 (VTI.Vec MQPR:$inactive))),
363 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), rGPR:$Rn,
365 (VTI.Vec MQPR:$inactive)))>;
368 def : Pat<(VTI.Vec (Op (VTI.Vec MQPR:$Qm),
369 (VTI.Vec (vselect (VTI.Pred VCCR:$mask),
371 (VTI.Vec IdentityVec))))),
372 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), rGPR:$Rn,
374 (VTI.Vec MQPR:$Qm)))>;
378 def : Pat<(VTI.Vec !con((PredInt (VTI.Vec MQPR:$Qm), (VTI.Vec (ARMvdup rGPR:$Rn))),
380 (? (VTI.Pred VCCR:$mask), (VTI.Vec MQPR:$inactive)))),
381 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), rGPR:$Rn,
383 (VTI.Vec MQPR:$inactive)))>;
638 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
640 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm)))>;
645 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
648 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
702 def : Pat<(i32 (vecreduce_add (VTI.Vec MQPR:$vec))),
703 (i32 (InstN $vec))>;
704 def : Pat<(i32 (vecreduce_add (VTI.Vec (vselect (VTI.Pred VCCR:$pred),
705 (VTI.Vec MQPR:$vec),
706 (VTI.Vec ARMimmAllZerosV))))),
707 (i32 (InstN $vec, ARMVCCThen, $pred, zero_reg))>;
708 def : Pat<(i32 (ARMVADDVu (VTI.Vec MQPR:$vec))),
709 (i32 (InstN $vec))>;
710 def : Pat<(i32 (ARMVADDVpu (VTI.Vec MQPR:$vec), (VTI.Pred VCCR:$pred))),
711 (i32 (InstN $vec, ARMVCCThen, $pred, zero_reg))>;
712 def : Pat<(i32 (add (i32 (vecreduce_add (VTI.Vec MQPR:$vec))),
714 (i32 (InstA $acc, $vec))>;
715 def : Pat<(i32 (add (i32 (vecreduce_add (VTI.Vec (vselect (VTI.Pred VCCR:$pred),
716 (VTI.Vec MQPR:$vec),
717 (VTI.Vec ARMimmAllZerosV))))),
719 (i32 (InstA $acc, $vec, ARMVCCThen, $pred, zero_reg))>;
720 def : Pat<(i32 (add (i32 (ARMVADDVu (VTI.Vec MQPR:$vec))),
722 (i32 (InstA $acc, $vec))>;
723 def : Pat<(i32 (add (i32 (ARMVADDVpu (VTI.Vec MQPR:$vec), (VTI.Pred VCCR:$pred))),
725 (i32 (InstA $acc, $vec, ARMVCCThen, $pred, zero_reg))>;
727 def : Pat<(i32 (ARMVADDVs (VTI.Vec MQPR:$vec))),
728 (i32 (InstN $vec))>;
729 def : Pat<(i32 (add (i32 (ARMVADDVs (VTI.Vec MQPR:$vec))),
731 (i32 (InstA $acc, $vec))>;
732 def : Pat<(i32 (ARMVADDVps (VTI.Vec MQPR:$vec), (VTI.Pred VCCR:$pred))),
733 (i32 (InstN $vec, ARMVCCThen, $pred, zero_reg))>;
734 def : Pat<(i32 (add (i32 (ARMVADDVps (VTI.Vec MQPR:$vec), (VTI.Pred VCCR:$pred))),
736 (i32 (InstA $acc, $vec, ARMVCCThen, $pred, zero_reg))>;
739 def : Pat<(i32 (int_arm_mve_addv_predicated (VTI.Vec MQPR:$vec),
742 (i32 (InstN $vec, ARMVCCThen, $pred, zero_reg))>;
743 def : Pat<(i32 (add (int_arm_mve_addv_predicated (VTI.Vec MQPR:$vec),
747 (i32 (InstA $acc, $vec, ARMVCCThen, $pred, zero_reg))>;
813 def : Pat<(ARMVADDLV (v4i32 MQPR:$vec)),
814 (InstN (v4i32 MQPR:$vec))>;
815 def : Pat<(ARMVADDLVA tGPREven:$acclo, tGPROdd:$acchi, (v4i32 MQPR:$vec)),
816 (InstA tGPREven:$acclo, tGPROdd:$acchi, (v4i32 MQPR:$vec))>;
817 def : Pat<(ARMVADDLVp (v4i32 MQPR:$vec), (VTI.Pred VCCR:$pred)),
818 (InstN (v4i32 MQPR:$vec), ARMVCCThen, (VTI.Pred VCCR:$pred), zero_reg)>;
819 def : Pat<(ARMVADDLVAp tGPREven:$acclo, tGPROdd:$acchi, (v4i32 MQPR:$vec),
821 (InstA tGPREven:$acclo, tGPROdd:$acchi, (v4i32 MQPR:$vec),
864 (VTI.Vec MQPR:$vec))),
866 (VTI.Vec MQPR:$vec)),
869 (VTI.Vec MQPR:$vec),
872 (VTI.Vec MQPR:$vec),
919 defvar base_args = (? (i32 rGPR:$prev), (VTI.Vec MQPR:$vec));
925 (i32 (Inst (i32 rGPR:$prev), (VTI.Vec MQPR:$vec)))>;
927 (i32 (Inst (i32 rGPR:$prev), (VTI.Vec MQPR:$vec),
1059 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
1061 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm)))>;
1068 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
1071 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
1079 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
1082 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm)))>;
1089 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
1093 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
1570 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$src))),
1571 (VTI.Vec (Inst (VTI.Vec MQPR:$src)))>;
1572 def : Pat<(VTI.Vec (int_arm_mve_vrev_predicated (VTI.Vec MQPR:$src),
1573 revbits, (VTI.Pred VCCR:$pred), (VTI.Vec MQPR:$inactive))),
1574 (VTI.Vec (Inst (VTI.Vec MQPR:$src), ARMVCCThen,
1575 (VTI.Pred VCCR:$pred), zero_reg, (VTI.Vec MQPR:$inactive)))>;
1603 def : Pat<(VTI.Vec (vnotq (VTI.Vec MQPR:$val1))),
1604 (VTI.Vec (MVE_VMVN (VTI.Vec MQPR:$val1)))>;
1605 def : Pat<(VTI.Vec (int_arm_mve_mvn_predicated (VTI.Vec MQPR:$val1),
1606 (VTI.Pred VCCR:$pred), (VTI.Vec MQPR:$inactive))),
1607 (VTI.Vec (MVE_VMVN (VTI.Vec MQPR:$val1), ARMVCCThen,
1608 (VTI.Pred VCCR:$pred), zero_reg, (VTI.Vec MQPR:$inactive)))>;
1716 defvar UnpredPat = (VTI.Vec (op (VTI.Vec MQPR:$src), timm:$simm));
1720 (VTI.Vec (Inst (VTI.Vec MQPR:$src), imm_type:$simm))>;
1721 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
1722 UnpredPat, (VTI.Vec MQPR:$src))),
1723 (VTI.Vec (Inst (VTI.Vec MQPR:$src), imm_type:$simm,
2010 def : Pat<(VTI.Vec (unpred_int (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn))),
2011 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
2153 def : Pat<(VTI.Vec (unpred_int (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
2155 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
2209 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
2211 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
2314 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn), (i32 VTI.Unsigned))),
2315 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
2317 def : Pat<(VTI.Vec (shift_op (add_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)), (i32 1))),
2345 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
2347 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
2349 def : Pat<(VTI.Vec (shift_op (sub_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)), (i32 1))),
2354 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
2356 (VTI.Vec MQPR:$inactive))),
2357 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
2359 (VTI.Vec MQPR:$inactive)))>;
2479 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$val))),
2480 (VTI.Vec (Inst (VTI.Vec MQPR:$val)))>;
2481 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$val), (VTI.Pred VCCR:$pred),
2482 (VTI.Vec MQPR:$inactive))),
2483 (VTI.Vec (Inst (VTI.Vec MQPR:$val), ARMVCCThen,
2484 (VTI.Pred VCCR:$pred), zero_reg, (VTI.Vec MQPR:$inactive)))>;
2524 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$v))),
2525 (VTI.Vec (Inst $v))>;
2528 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$v), (VTI.Pred VCCR:$mask),
2529 (VTI.Vec MQPR:$inactive))),
2530 (VTI.Vec (Inst $v, ARMVCCThen, $mask, zero_reg, $inactive))>;
2554 def : Pat<(VTI.Vec (vselect
2555 (VTI.Pred (ARMvcmpz (VTI.Vec MQPR:$reg), ARMCCgt)),
2556 (VTI.Vec MQPR:$reg),
2557 (VTI.Vec (vselect
2558 (VTI.Pred (ARMvcmp (VTI.Vec MQPR:$reg), int_min, ARMCCeq)),
2560 (sub (VTI.Vec zero_vec), (VTI.Vec MQPR:$reg)))))),
2561 (VTI.Vec (vqabs_instruction (VTI.Vec MQPR:$reg)))>;
2564 def : Pat<(VTI.Vec (vselect
2565 (VTI.Pred (ARMvcmp (VTI.Vec MQPR:$reg), int_min, ARMCCeq)),
2567 (sub (VTI.Vec zero_vec), (VTI.Vec MQPR:$reg)))),
2568 (VTI.Vec (vqneg_instruction (VTI.Vec MQPR:$reg)))>;
2692 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$Qd), (abs (VTI.Vec MQPR:$Qm)))),
2693 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm)))>;
2696 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm),
2698 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm),
2775 def : Pat<(OutVTI.Vec (int_arm_mve_vmovl_predicated (InVTI.Vec MQPR:$src),
2778 (OutVTI.Vec MQPR:$inactive))),
2779 (OutVTI.Vec (Inst (InVTI.Vec MQPR:$src), ARMVCCThen,
2781 (OutVTI.Vec MQPR:$inactive)))>;
2906 def : Pat<(VTI.DblVec (unpred_int (VTI.Vec MQPR:$src), imm:$imm,
2908 (VTI.DblVec (inst_imm (VTI.Vec MQPR:$src), imm:$imm))>;
2909 def : Pat<(VTI.DblVec (unpred_int (VTI.Vec MQPR:$src), (i32 VTI.LaneBits),
2911 (VTI.DblVec (inst_lw (VTI.Vec MQPR:$src)))>;
2913 def : Pat<(VTI.DblVec (pred_int (VTI.Vec MQPR:$src), imm:$imm,
2917 (VTI.DblVec (inst_imm (VTI.Vec MQPR:$src), imm:$imm,
2920 def : Pat<(VTI.DblVec (pred_int (VTI.Vec MQPR:$src), (i32 VTI.LaneBits),
2924 (VTI.DblVec (inst_lw (VTI.Vec MQPR:$src), ARMVCCThen,
3076 defvar inparams = (? (OutVTI.Vec MQPR:$QdSrc), (InVTI.Vec MQPR:$Qm),
3079 defvar outparams = (inst (OutVTI.Vec MQPR:$QdSrc), (InVTI.Vec MQPR:$Qm),
3082 def : Pat<(OutVTI.Vec !setdagop(inparams, int_arm_mve_vshrn)),
3083 (OutVTI.Vec outparams)>;
3084 def : Pat<(OutVTI.Vec !con(inparams, (int_arm_mve_vshrn_predicated
3086 (OutVTI.Vec !con(outparams, (? ARMVCCThen, VCCR:$pred, zero_reg)))>;
3166 def : Pat<(VTI.Vec (int_arm_mve_vshl_vector
3167 (VTI.Vec MQPR:$in), (VTI.Vec MQPR:$sh),
3169 (VTI.Vec (Inst (VTI.Vec MQPR:$in), (VTI.Vec MQPR:$sh)))>;
3171 def : Pat<(VTI.Vec (int_arm_mve_vshl_vector_predicated
3172 (VTI.Vec MQPR:$in), (VTI.Vec MQPR:$sh),
3174 (VTI.Pred VCCR:$mask), (VTI.Vec MQPR:$inactive))),
3175 (VTI.Vec (Inst (VTI.Vec MQPR:$in), (VTI.Vec MQPR:$sh),
3177 (VTI.Vec MQPR:$inactive)))>;
3276 defvar inparams = (? (VTI.Vec MQPR:$QdSrc), (VTI.Vec MQPR:$Qm),
3278 defvar outparams = (inst (VTI.Vec MQPR:$QdSrc), (VTI.Vec MQPR:$Qm),
3283 def : Pat<(VTI.Vec !setdagop(inparams, unpred_int)),
3284 (VTI.Vec outparams)>;
3285 def : Pat<(VTI.Vec !con(inparams, (pred_int (VTI.Pred VCCR:$pred)))),
3286 (VTI.Vec !con(outparams, (? ARMVCCThen, VCCR:$pred, zero_reg)))>;
3410 def : Pat<(inst.VTI.Vec !con((inst.unpred_int (inst.VTI.Vec MQPR:$src),
3413 (inst.VTI.Vec (inst (inst.VTI.Vec MQPR:$src),
3416 def : Pat<(inst.VTI.Vec !con((inst.pred_int (inst.VTI.Vec MQPR:$src),
3420 (inst.VTI.Vec MQPR:$inactive)))),
3421 (inst.VTI.Vec (inst (inst.VTI.Vec MQPR:$src),
3424 (inst.VTI.Vec MQPR:$inactive)))>;
3512 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$src), imm_operand_type:$imm)),
3513 (VTI.Vec (inst (VTI.Vec MQPR:$src), imm_operand_type:$imm))>;
3515 def : Pat<(VTI.Vec !con((pred_int (VTI.Vec MQPR:$src), imm_operand_type:$imm),
3518 (VTI.Vec MQPR:$inactive)))),
3519 (VTI.Vec (inst (VTI.Vec MQPR:$src), imm_operand_type:$imm,
3521 (VTI.Vec MQPR:$inactive)))>;
3586 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$val))),
3587 (VTI.Vec (Inst (VTI.Vec MQPR:$val)))>;
3588 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$val), (VTI.Pred VCCR:$pred),
3589 (VTI.Vec MQPR:$inactive))),
3590 (VTI.Vec (Inst (VTI.Vec MQPR:$val), ARMVCCThen,
3591 (VTI.Pred VCCR:$pred), zero_reg, (VTI.Vec MQPR:$inactive)))>;
3678 def : Pat<(VTI.Vec (int_arm_mve_vcmlaq
3679 imm:$rot, (VTI.Vec MQPR:$Qd_src),
3680 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
3681 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src),
3682 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3685 def: Pat<(VTI.Vec (fadd_contract MQPR:$Qd_src,
3687 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm)))),
3688 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src),
3689 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3692 def : Pat<(VTI.Vec (int_arm_mve_vcmlaq_predicated
3693 imm:$rot, (VTI.Vec MQPR:$Qd_src),
3694 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3696 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src), (VTI.Vec MQPR:$Qn),
3697 (VTI.Vec MQPR:$Qm), imm:$rot,
3733 defvar m1 = (VTI.Vec MQPR:$m1);
3734 defvar m2 = (VTI.Vec MQPR:$m2);
3735 defvar add = (VTI.Vec MQPR:$add);
3740 def : Pat<(VTI.Vec (fma (fneg m1), m2, add)),
3742 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
3743 (VTI.Vec (fma (fneg m1), m2, add)),
3746 def : Pat<(VTI.Vec (pred_int (fneg m1), m2, add, pred)),
3748 def : Pat<(VTI.Vec (pred_int m1, (fneg m2), add, pred)),
3751 def : Pat<(VTI.Vec (fma m1, m2, add)),
3753 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
3754 (VTI.Vec (fma m1, m2, add)),
3757 def : Pat<(VTI.Vec (pred_int m1, m2, add, pred)),
3820 def : Pat<(VTI.Vec (int_arm_mve_vcaddq (i32 1),
3821 imm:$rot, (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
3822 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3825 def : Pat<(VTI.Vec (int_arm_mve_vcaddq_predicated (i32 1),
3826 imm:$rot, (VTI.Vec MQPR:$inactive),
3827 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3829 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
3831 (VTI.Vec MQPR:$inactive)))>;
3865 def : Pat<(VTI.Vec (unpred_int (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
3867 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
3868 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
3870 (VTI.Vec MQPR:$inactive))),
3871 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
3873 (VTI.Vec MQPR:$inactive)))>;
3939 def : Pat<(DestVTI.Vec (int_arm_mve_vcvt_fix
3940 (i32 U), (SrcVTI.Vec MQPR:$Qm), imm:$scale)),
3941 (DestVTI.Vec (Inst (SrcVTI.Vec MQPR:$Qm), imm:$scale))>;
3942 def : Pat<(DestVTI.Vec (int_arm_mve_vcvt_fix_predicated (i32 U),
3943 (DestVTI.Vec MQPR:$inactive),
3944 (SrcVTI.Vec MQPR:$Qm),
3947 (DestVTI.Vec (Inst (SrcVTI.Vec MQPR:$Qm), imm:$scale,
3949 (DestVTI.Vec MQPR:$inactive)))>;
4005 def : Pat<(Int.Vec (UnpredIntr (i32 Int.Unsigned), (Flt.Vec MQPR:$in))),
4006 (Int.Vec (Inst (Flt.Vec MQPR:$in)))>;
4008 def : Pat<(Int.Vec (PredIntr (i32 Int.Unsigned), (Int.Vec MQPR:$inactive),
4009 (Flt.Vec MQPR:$in), (Flt.Pred VCCR:$pred))),
4010 (Int.Vec (Inst (Flt.Vec MQPR:$in), ARMVCCThen,
4011 (Flt.Pred VCCR:$pred), zero_reg, (Int.Vec MQPR:$inactive)))>;
4061 def : Pat<(Dest.Vec (unpred_op (Src.Vec MQPR:$src))),
4062 (Dest.Vec (Inst (Src.Vec MQPR:$src)))>;
4063 def : Pat<(Dest.Vec (int_arm_mve_vcvt_fp_int_predicated
4064 (Src.Vec MQPR:$src), (i32 Unsigned),
4065 (Src.Pred VCCR:$mask), (Dest.Vec MQPR:$inactive))),
4066 (Dest.Vec (Inst (Src.Vec MQPR:$src), ARMVCCThen,
4068 (Dest.Vec MQPR:$inactive)))>;
4119 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$v))),
4120 (VTI.Vec (Inst $v))>;
4121 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$v), (VTI.Pred VCCR:$mask),
4122 (VTI.Vec MQPR:$inactive))),
4123 (VTI.Vec (Inst $v, ARMVCCThen, $mask, zero_reg, $inactive))>;
4168 def : Pat<(VTI.Vec (unpred_op (fabs (VTI.Vec MQPR:$Qd)),
4169 (fabs (VTI.Vec MQPR:$Qm)))),
4170 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm)))>;
4173 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm),
4175 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd), (VTI.Vec MQPR:$Qm),
4572 def : Pat<(VTI.Vec !con((unpred_intr (VTI.Vec MQPR:$a), (VTI.Vec MQPR:$b),
4573 (VTI.Vec MQPR:$c)), ConstParams)),
4574 (VTI.Vec (Inst (VTI.Vec MQPR:$a), (VTI.Vec MQPR:$b),
4575 (VTI.Vec MQPR:$c)))>;
4576 def : Pat<(VTI.Vec !con((pred_intr (VTI.Vec MQPR:$a), (VTI.Vec MQPR:$b),
4577 (VTI.Vec MQPR:$c)), ConstParams,
4579 (VTI.Vec (Inst (VTI.Vec MQPR:$a), (VTI.Vec MQPR:$b),
4580 (VTI.Vec MQPR:$c),
4626 def : Pat<(VTI.Vec (int_arm_mve_vcmulq
4627 imm:$rot, (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
4628 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
4631 def : Pat<(VTI.Vec (int_arm_mve_vcmulq_predicated
4632 imm:$rot, (VTI.Vec MQPR:$inactive),
4633 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
4635 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
4637 (VTI.Vec MQPR:$inactive)))>;
4677 def : Pat<(VTI.DblVec !con((unpred_op (VTI.Vec MQPR:$Qm),
4678 (VTI.Vec MQPR:$Qn)),
4680 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
4683 def : Pat<(VTI.DblVec !con((pred_int (VTI.Vec MQPR:$Qm),
4684 (VTI.Vec MQPR:$Qn)),
4687 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
4809 def : Pat<(VTI.Vec (PredInt (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
4811 (VTI.Vec MQPR:$inactive))),
4812 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
4814 (VTI.Vec MQPR:$inactive)))>;
4818 def : Pat<(VTI.Vec (unpred_op (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
4820 (VTI.Vec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
4884 def : Pat<(VTI.Vec (MVEvmovn (VTI.Vec MQPR:$Qd_src),
4885 (VTI.Vec MQPR:$Qm), (i32 top))),
4886 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src), (VTI.Vec MQPR:$Qm)))>;
4895 def : Pat<(VTI.Vec (MVEvmovn (VTI.Vec MQPR:$Qm),
4896 (VTI.Vec (vrev MQPR:$Qd_src)), (i32 1))),
4897 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src), (VTI.Vec MQPR:$Qm)))>;
4903 def : Pat<(VTI.Vec (int_arm_mve_vmovn_predicated (VTI.Vec MQPR:$Qd_src),
4904 (InVTI.Vec MQPR:$Qm), (i32 top),
4906 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src),
4907 (InVTI.Vec MQPR:$Qm),
4918 def : Pat<(VTI.Vec (int_arm_mve_vqmovn (VTI.Vec MQPR:$Qd_src),
4919 (InVTI.Vec MQPR:$Qm),
4921 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src),
4922 (InVTI.Vec MQPR:$Qm)))>;
4924 def : Pat<(VTI.Vec (int_arm_mve_vqmovn_predicated (VTI.Vec MQPR:$Qd_src),
4925 (InVTI.Vec MQPR:$Qm),
4928 (VTI.Vec (Inst (VTI.Vec MQPR:$Qd_src),
4929 (InVTI.Vec MQPR:$Qm),
5076 def : Pat<(VTI.Vec (int_arm_mve_vcaddq halve,
5077 imm:$rot, (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm))),
5078 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
5081 def : Pat<(VTI.Vec (int_arm_mve_vcaddq_predicated halve,
5082 imm:$rot, (VTI.Vec MQPR:$inactive),
5083 (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
5085 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (VTI.Vec MQPR:$Qm),
5087 (VTI.Vec MQPR:$inactive)))>;
5153 def : Pat<(VTI.DblVec (int_arm_mve_vqdmull (VTI.Vec MQPR:$Qm),
5154 (VTI.Vec MQPR:$Qn), (i32 T))),
5155 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn)))>;
5158 (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
5161 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (VTI.Vec MQPR:$Qn),
5229 def : Pat<(VTI.Vec !con((unpred_op (VTI.Vec MQPR:$Qm),
5230 (VTI.Vec (ARMvdup rGPR:$val))),
5232 (VTI.Vec (inst (VTI.Vec MQPR:$Qm), (i32 rGPR:$val)))>;
5234 def : Pat<(VTI.Vec !con((pred_op (VTI.Vec MQPR:$Qm),
5235 (VTI.Vec (ARMvdup rGPR:$val))),
5238 (VTI.Vec MQPR:$inactive)))),
5239 (VTI.Vec (inst (VTI.Vec MQPR:$Qm), (i32 rGPR:$val),
5241 (VTI.Vec MQPR:$inactive)))>;
5334 def : Pat<(VTI.DblVec (int_arm_mve_vqdmull (VTI.Vec MQPR:$Qm),
5335 (VTI.Vec (ARMvdup rGPR:$val)),
5337 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (i32 rGPR:$val)))>;
5340 (VTI.Vec MQPR:$Qm),
5341 (VTI.Vec (ARMvdup rGPR:$val)),
5345 (VTI.DblVec (Inst (VTI.Vec MQPR:$Qm), (i32 rGPR:$val),
5382 def : Pat<(VTI.Vec (shift_op (add_op (VTI.Vec MQPR:$Qm), (VTI.Vec (ARMvdup rGPR:$Rn))), (i32 1))),
5448 def : Pat<(VTI.Vec (int_arm_mve_vshl_scalar
5449 (VTI.Vec MQPR:$in), (i32 rGPR:$sh),
5451 (VTI.Vec (Inst (VTI.Vec MQPR:$in), (i32 rGPR:$sh)))>;
5453 def : Pat<(VTI.Vec (int_arm_mve_vshl_scalar_predicated
5454 (VTI.Vec MQPR:$in), (i32 rGPR:$sh),
5457 (VTI.Vec (Inst (VTI.Vec MQPR:$in), (i32 rGPR:$sh),
5509 def : Pat<(VTI.Vec (int_arm_mve_vbrsr (VTI.Vec MQPR:$Qn), (i32 rGPR:$Rm))),
5510 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (i32 rGPR:$Rm)))>;
5512 def : Pat<(VTI.Vec (int_arm_mve_vbrsr_predicated
5513 (VTI.Vec MQPR:$inactive),
5514 (VTI.Vec MQPR:$Qn), (i32 rGPR:$Rm),
5516 (VTI.Vec (Inst (VTI.Vec MQPR:$Qn), (i32 rGPR:$Rm),
5518 (VTI.Vec MQPR:$inactive)))>;
5637 defvar v1 = (VTI.Vec MQPR:$v1);
5638 defvar v2 = (VTI.Vec MQPR:$v2);
5639 defvar vs = (VTI.Vec (ARMvdup rGPR:$s));
5645 def : Pat<(VTI.Vec (add (mul v1, v2), vs)),
5646 (VTI.Vec (Inst v1, v2, s))>;
5648 def : Pat<(VTI.Vec (add (mul v2, vs), v1)),
5649 (VTI.Vec (Inst v1, v2, s))>;
5652 def : Pat<(VTI.Vec (pred_int v1, v2, s, pred)),
5653 (VTI.Vec (Inst v1, v2, s, ARMVCCThen, pred, zero_reg))>;
5670 defvar v1 = (VTI.Vec MQPR:$v1);
5671 defvar v2 = (VTI.Vec MQPR:$v2);
5672 defvar vs = (VTI.Vec (ARMvdup (i32 rGPR:$s)));
5678 def : Pat<(VTI.Vec (fma v1, v2, vs)),
5679 (VTI.Vec (Inst v1, v2, is))>;
5680 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
5681 (VTI.Vec (fma v1, v2, vs)),
5683 (VTI.Vec (Inst v1, v2, is, ARMVCCThen, $pred, zero_reg))>;
5684 def : Pat<(VTI.Vec (pred_int v1, v2, vs, pred)),
5685 (VTI.Vec (Inst v1, v2, is, ARMVCCThen, pred, zero_reg))>;
5687 def : Pat<(VTI.Vec (fma v1, vs, v2)),
5688 (VTI.Vec (Inst v2, v1, is))>;
5689 def : Pat<(VTI.Vec (fma vs, v1, v2)),
5690 (VTI.Vec (Inst v2, v1, is))>;
5691 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
5692 (VTI.Vec (fma vs, v2, v1)),
5694 (VTI.Vec (Inst v1, v2, is, ARMVCCThen, $pred, zero_reg))>;
5695 def : Pat<(VTI.Vec (vselect (VTI.Pred VCCR:$pred),
5696 (VTI.Vec (fma v2, vs, v1)),
5698 (VTI.Vec (Inst v1, v2, is, ARMVCCThen, $pred, zero_reg))>;
5699 def : Pat<(VTI.Vec (pred_int v1, vs, v2, pred)),
5700 (VTI.Vec (Inst v2, v1, is, ARMVCCThen, pred, zero_reg))>;
5701 def : Pat<(VTI.Vec (pred_int vs, v1, v2, pred)),
5702 (VTI.Vec (Inst v2, v1, is, ARMVCCThen, pred, zero_reg))>;
5734 def : Pat<(VTI.Vec (unpred_int (VTI.Vec MQPR:$v1), (VTI.Vec MQPR:$v2),
5736 (VTI.Vec (Inst (VTI.Vec MQPR:$v1), (VTI.Vec MQPR:$v2),
5738 def : Pat<(VTI.Vec (pred_int (VTI.Vec MQPR:$v1), (VTI.Vec MQPR:$v2),
5740 (VTI.Vec (Inst (VTI.Vec MQPR:$v1), (VTI.Vec MQPR:$v2),
6385 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), memsz.TypeBits, 0, UnsignedFlag)),
6386 (VTI.Vec (InstU GPR:$base, MQPR:$offsets))>;
6387 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), memsz.TypeBits, memsz.shift, UnsignedFlag)),
6388 (VTI.Vec (Inst GPR:$base, MQPR:$offsets))>;
6389 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), memsz.TypeBits, 0, UnsignedFlag, (VTI.Pred VCCR:$pred))),
6390 (VTI.Vec (InstU GPR:$base, MQPR:$offsets, ARMVCCThen, VCCR:$pred, zero_reg))>;
6391 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), memsz.TypeBits, memsz.shift, UnsignedFlag, (VTI.Pred VCCR:$pred))),
6392 (VTI.Vec (Inst GPR:$base, MQPR:$offsets, ARMVCCThen, VCCR:$pred, zero_reg))>;
6401 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), 8, 0, VTI.Unsigned)),
6402 (VTI.Vec (Inst GPR:$base, MQPR:$offsets))>;
6403 def : Pat<(VTI.Vec (int_arm_mve_vldr_gather_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), 8, 0, VTI.Unsigned, (VTI.Pred VCCR:$pred))),
6404 (VTI.Vec (Inst GPR:$base, MQPR:$offsets, ARMVCCThen, VCCR:$pred, zero_reg))>;
6414 def : Pat<(int_arm_mve_vstr_scatter_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), memsz.TypeBits, 0),
6416 def : Pat<(int_arm_mve_vstr_scatter_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), memsz.TypeBits, memsz.shift),
6418 def : Pat<(int_arm_mve_vstr_scatter_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), memsz.TypeBits, 0, (VTI.Pred VCCR:$pred)),
6420 def : Pat<(int_arm_mve_vstr_scatter_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), memsz.TypeBits, memsz.shift, (VTI.Pred VCCR:$pred)),
6430 def : Pat<(int_arm_mve_vstr_scatter_offset GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), 8, 0),
6432 def : Pat<(int_arm_mve_vstr_scatter_offset_predicated GPR:$base, (VTIs[0].Vec MQPR:$offsets), (VTI.Vec MQPR:$data), 8, 0, (VTI.Pred VCCR:$pred)),
6508 def : Pat<(DVTI.Vec (int_arm_mve_vldr_gather_base
6509 (AVTI.Vec MQPR:$addr), (i32 imm:$offset))),
6510 (DVTI.Vec (Inst (AVTI.Vec MQPR:$addr), (i32 imm:$offset)))>;
6511 def : Pat<(DVTI.Vec (int_arm_mve_vldr_gather_base_predicated
6512 (AVTI.Vec MQPR:$addr), (i32 imm:$offset), (AVTI.Pred VCCR:$pred))),
6513 (DVTI.Vec (Inst (AVTI.Vec MQPR:$addr), (i32 imm:$offset),
6526 (AVTI.Vec MQPR:$addr), (i32 imm:$offset), (DVTI.Vec MQPR:$data)),
6527 (Inst (DVTI.Vec MQPR:$data), (AVTI.Vec MQPR:$addr),
6530 (AVTI.Vec MQPR:$addr), (i32 imm:$offset), (DVTI.Vec MQPR:$data), (AVTI.Pred VCCR:$pred)),
6531 (Inst (DVTI.Vec MQPR:$data), (AVTI.Vec MQPR:$addr),
6533 def : Pat<(AVTI.Vec (int_arm_mve_vstr_scatter_base_wb
6534 (AVTI.Vec MQPR:$addr), (i32 imm:$offset), (DVTI.Vec MQPR:$data))),
6535 (AVTI.Vec (InstPre (DVTI.Vec MQPR:$data), (AVTI.Vec MQPR:$addr),
6537 def : Pat<(AVTI.Vec (int_arm_mve_vstr_scatter_base_wb_predicated
6538 (AVTI.Vec MQPR:$addr), (i32 imm:$offset), (DVTI.Vec MQPR:$data), (AVTI.Pred VCCR:$pred))),
6539 (AVTI.Vec (InstPre (DVTI.Vec MQPR:$data), (AVTI.Vec MQPR:$addr),