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<mode>): New pattern.
This commit is contained in:
parent
6176527a75
commit
da7b43fb02
1 changed files with 21 additions and 0 deletions
|
@ -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<mode>"
|
||||
[(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>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
|
||||
;; -------------------------------------------------------------------------
|
||||
|
|
Loading…
Add table
Reference in a new issue