From: Robin Dapp Date: Mon, 8 Dec 2025 14:26:33 +0000 (+0100) Subject: optabs: Fix creation of length and bias operands. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bf25e44243dcb34f84c3addb06e9abde5f3f122;p=thirdparty%2Fgcc.git 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 --git a/gcc/optabs.cc b/gcc/optabs.cc index 183ad910fcd..8dea94975c1 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));