From: Juzhe-Zhong Date: Thu, 10 Aug 2023 10:37:05 +0000 (+0800) Subject: RISC-V: Add MASK vec_duplicate pattern[PR110962] X-Git-Tag: basepoints/gcc-15~7013 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da7b43fb0224cdce5157a747fdd6975b7c81c6cf;p=thirdparty%2Fgcc.git RISC-V: Add MASK vec_duplicate pattern[PR110962] This patch fix bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110962 SUBROUTINE a(b,c,d) LOGICAL,DIMENSION(INOUT) :: b LOGICAL e REAL, DIMENSION(IN) :: c REAL, DIMENSION(INOUT) :: d REAL, DIMENSION(SIZE(c)) :: f WHERE (b.AND.e) WHERE (f>=0.) d = g ENDWHERE ENDWHERE END SUBROUTINE a PR target/110962 gcc/ChangeLog: PR target/110962 * config/riscv/autovec.md (vec_duplicate): New pattern. --- diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md index 6cb5fa3ed272..3b396a9a9904 100644 --- a/gcc/config/riscv/autovec.md +++ b/gcc/config/riscv/autovec.md @@ -287,6 +287,27 @@ ;; == Vector creation ;; ========================================================================= +;; ------------------------------------------------------------------------- +;; ---- [BOOL] Duplicate element +;; ------------------------------------------------------------------------- +;; The patterns in this section are synthetic. +;; ------------------------------------------------------------------------- + +;; Implement a predicate broadcast by shifting the low bit of the scalar +;; input into the top bit by duplicate the input and do a compare with zero. +(define_expand "vec_duplicate" + [(set (match_operand:VB 0 "register_operand") + (vec_duplicate:VB (match_operand:QI 1 "register_operand")))] + "TARGET_VECTOR" + { + poly_int64 nunits = GET_MODE_NUNITS (mode); + machine_mode mode = riscv_vector::get_vector_mode (QImode, nunits).require (); + rtx dup = expand_vector_broadcast (mode, operands[1]); + riscv_vector::expand_vec_cmp (operands[0], NE, dup, CONST0_RTX (mode)); + DONE; + } +) + ;; ------------------------------------------------------------------------- ;; ---- [INT] Linear series ;; -------------------------------------------------------------------------