https://gcc.gnu.org/g:9bf25e44243dcb34f84c3addb06e9abde5f3f122

commit r16-6289-g9bf25e44243dcb34f84c3addb06e9abde5f3f122
Author: Robin Dapp <[email protected]>
Date:   Mon Dec 8 15:26:33 2025 +0100

    optabs: Fix creation of length and bias operands.
    
    In the vec_cbranch_all/any optimization we prepared the length and bias
    operands slightly differently than expected.  This patch fixes it.
    
    gcc/ChangeLog:
    
            * optabs.cc (emit_cmp_and_jump_insns): Fix len/bias operands.

Diff:
---
 gcc/optabs.cc | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcc/optabs.cc b/gcc/optabs.cc
index 183ad910fcd7..8dea94975c15 100644
--- a/gcc/optabs.cc
+++ b/gcc/optabs.cc
@@ -4928,11 +4928,16 @@ emit_cmp_and_jump_insns (rtx x, rtx y, enum rtx_code 
comparison, rtx size,
                  rtx len_bias_rtx = expand_normal (len_bias);
                  tree lhs = gimple_get_lhs (def_stmt);
                  auto mask_mode = TYPE_MODE (TREE_TYPE (lhs));
+                 /* ??? We could use something like internal_fn's
+                    add_mask_else_and_len_args here.  Currently it
+                    only supports a fixed, consecutive order of
+                    mask and len, though.  */
                  create_input_operand (&ops[0], CONSTM1_RTX (mask_mode),
                                        mask_mode);
-                 create_input_operand (&ops[3], len_rtx, GET_MODE (len_rtx));
-                 create_input_operand (&ops[4], len_bias_rtx,
-                                       GET_MODE (len_bias_rtx));
+                 create_convert_operand_from
+                   (&ops[3], len_rtx, TYPE_MODE (TREE_TYPE (len_op)),
+                    TYPE_UNSIGNED (TREE_TYPE (len_op)));
+                 create_input_operand (&ops[4], len_bias_rtx, QImode);
                }
 
              int unsignedp2 = TYPE_UNSIGNED (TREE_TYPE (t_op0));

Reply via email to