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));
