This test is too aggressive. Constants have VOIDmode, so we need to let the through this phase of conditional move support.

Fixes several missed conditional moves with the trunk.

Committed to the trunk,

Jeff
commit 18c453f0e633abb9b317947b011ec6e07780fba8
Author: Jeff Law <j...@ventanamicro.com>
Date:   Mon Aug 7 14:34:40 2023 -0600

    [committed][RISC-V]Don't reject constants in cmov condition
    
    This test is too aggressive.  Constants have VOIDmode, so we need to let the
    through this phase of conditional move support.
    
    Fixes several missed conditional moves with the trunk.
    
    gcc/
            * config/riscv/riscv.cc (riscv_expand_conditional_move): Allow
            VOIDmode operands to conditional before canonicalization.

diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 279304afc19..5248dd3febe 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -3582,7 +3582,8 @@ riscv_expand_conditional_move (rtx dest, rtx op, rtx 
cons, rtx alt)
         enforce that so that we don't strip away a sign_extension
         thinking it is unnecessary.  We might consider using
         riscv_extend_operands if they are not already properly extended.  */
-      if (GET_MODE (op0) != word_mode || GET_MODE (op1) != word_mode)
+      if ((GET_MODE (op0) != word_mode && GET_MODE (op0) != VOIDmode)
+         || (GET_MODE (op1) != word_mode && GET_MODE (op1) != VOIDmode))
        return false;
 
       /* Canonicalize the comparison.  It must be an equality comparison

Reply via email to