@@ -492,101 +492,62 @@ def SDTRVVVecReduce : SDTypeProfile<1, 6, [
492492 SDTCisVT<6, XLenVT>
493493]>;
494494
495- def riscv_add_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
496- node:$E),
497- (riscv_add_vl node:$A, node:$B, node:$C,
498- node:$D, node:$E), [{
499- return N->hasOneUse();
500- }]>;
501-
502- def riscv_sub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
503- node:$E),
504- (riscv_sub_vl node:$A, node:$B, node:$C,
505- node:$D, node:$E), [{
506- return N->hasOneUse();
507- }]>;
508-
509- def riscv_mul_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
510- node:$E),
511- (riscv_mul_vl node:$A, node:$B, node:$C,
512- node:$D, node:$E), [{
513- return N->hasOneUse();
514- }]>;
515-
516- def riscv_vwmul_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
495+ let HasOneUse = 1 in {
496+ def riscv_add_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
517497 node:$E),
518- (riscv_vwmul_vl node:$A, node:$B, node:$C,
519- node:$D, node:$E), [{
520- return N->hasOneUse();
521- }]>;
522-
523- def riscv_vwmulu_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
524- node:$E),
525- (riscv_vwmulu_vl node:$A, node:$B, node:$C,
526- node:$D, node:$E), [{
527- return N->hasOneUse();
528- }]>;
529-
530- def riscv_vwmulsu_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
498+ (riscv_add_vl node:$A, node:$B, node:$C,
499+ node:$D, node:$E)>;
500+ def riscv_sub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
501+ node:$E),
502+ (riscv_sub_vl node:$A, node:$B, node:$C,
503+ node:$D, node:$E)>;
504+ def riscv_mul_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
505+ node:$E),
506+ (riscv_mul_vl node:$A, node:$B, node:$C,
507+ node:$D, node:$E)>;
508+ def riscv_vwmul_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
531509 node:$E),
532- (riscv_vwmulsu_vl node:$A, node:$B, node:$C,
533- node:$D, node:$E), [{
534- return N->hasOneUse();
535- }]>;
536-
537- def riscv_sext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
538- (riscv_sext_vl node:$A, node:$B, node:$C), [{
539- return N->hasOneUse();
540- }]>;
541-
542- def riscv_zext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
543- (riscv_zext_vl node:$A, node:$B, node:$C), [{
544- return N->hasOneUse();
545- }]>;
546-
547- def riscv_ext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
548- (riscv_ext_vl node:$A, node:$B, node:$C), [{
549- return N->hasOneUse();
550- }]>;
551-
552- def riscv_fpextend_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
553- (riscv_fpextend_vl node:$A, node:$B, node:$C), [{
554- return N->hasOneUse();
555- }]>;
510+ (riscv_vwmul_vl node:$A, node:$B, node:$C,
511+ node:$D, node:$E)>;
512+ def riscv_vwmulu_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
513+ node:$E),
514+ (riscv_vwmulu_vl node:$A, node:$B, node:$C,
515+ node:$D, node:$E)>;
516+ def riscv_vwmulsu_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
517+ node:$E),
518+ (riscv_vwmulsu_vl node:$A, node:$B, node:$C,
519+ node:$D, node:$E)>;
520+ def riscv_sext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
521+ (riscv_sext_vl node:$A, node:$B, node:$C)>;
522+ def riscv_zext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
523+ (riscv_zext_vl node:$A, node:$B, node:$C)>;
524+ def riscv_ext_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
525+ (riscv_ext_vl node:$A, node:$B, node:$C)>;
526+ def riscv_fpextend_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C),
527+ (riscv_fpextend_vl node:$A, node:$B, node:$C)>;
528+ def riscv_vfmadd_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
529+ node:$E),
530+ (riscv_vfmadd_vl node:$A, node:$B,
531+ node:$C, node:$D, node:$E)>;
532+ def riscv_vfnmadd_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
533+ node:$E),
534+ (riscv_vfnmadd_vl node:$A, node:$B,
535+ node:$C, node:$D, node:$E)>;
536+ def riscv_vfmsub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
537+ node:$E),
538+ (riscv_vfmsub_vl node:$A, node:$B,
539+ node:$C, node:$D, node:$E)>;
540+ def riscv_vfnmsub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
541+ node:$E),
542+ (riscv_vfnmsub_vl node:$A, node:$B,
543+ node:$C, node:$D, node:$E)>;
544+ } // HasOneUse = 1
556545
557546def riscv_fpextend_vl_sameuser : PatFrag<(ops node:$A, node:$B, node:$C),
558547 (riscv_fpextend_vl node:$A, node:$B, node:$C), [{
559548 return !N->use_empty() && all_equal(N->users());
560549}]>;
561550
562- def riscv_vfmadd_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
563- node:$E),
564- (riscv_vfmadd_vl node:$A, node:$B,
565- node:$C, node:$D, node:$E), [{
566- return N->hasOneUse();
567- }]>;
568-
569- def riscv_vfnmadd_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
570- node:$E),
571- (riscv_vfnmadd_vl node:$A, node:$B,
572- node:$C, node:$D, node:$E), [{
573- return N->hasOneUse();
574- }]>;
575-
576- def riscv_vfmsub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
577- node:$E),
578- (riscv_vfmsub_vl node:$A, node:$B,
579- node:$C, node:$D, node:$E), [{
580- return N->hasOneUse();
581- }]>;
582-
583- def riscv_vfnmsub_vl_oneuse : PatFrag<(ops node:$A, node:$B, node:$C, node:$D,
584- node:$E),
585- (riscv_vfnmsub_vl node:$A, node:$B,
586- node:$C, node:$D, node:$E), [{
587- return N->hasOneUse();
588- }]>;
589-
590551foreach kind = ["ADD", "UMAX", "SMAX", "UMIN", "SMIN", "AND", "OR", "XOR",
591552 "FADD", "SEQ_FADD", "FMIN", "FMAX"] in
592553 def rvv_vecreduce_#kind#_vl : SDNode<"RISCVISD::VECREDUCE_"#kind#"_VL", SDTRVVVecReduce>;
0 commit comments