[Bug middle-end/106030] [13 Regression] ice in emit_move_insn, at expr.cc:4026

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jun 21 09:39:49 GMT 2022


--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:


commit r13-1185-g2df1df945fac85d7b3d084001414a66a2709d8fe
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Jun 21 11:38:59 2022 +0200

    expand: Fix up expand_cond_expr_using_cmove [PR106030]

    If expand_cond_expr_using_cmove can't find a cmove optab for a particular
    mode, it tries to promote the mode and perform the cmove in the promoted

    The testcase in the patch ICEs on arm because in that case we pass temp
    has the promoted mode (SImode) as target to expand_operands where the
    operands have the non-promoted mode (QImode).
    Later on the function uses paradoxical subregs:
      if (GET_MODE (op1) != mode)
        op1 = gen_lowpart (mode, op1);

      if (GET_MODE (op2) != mode)
        op2 = gen_lowpart (mode, op2);
    to change the operand modes.

    The following patch fixes it by passing NULL_RTX as target if it has
    promoted mode.

    2022-06-21  Jakub Jelinek  <jakub@redhat.com>

            PR middle-end/106030
            * expr.cc (expand_cond_expr_using_cmove): Pass NULL_RTX instead of
            temp to expand_operands if mode has been promoted.

            * gcc.c-torture/compile/pr106030.c: New test.

More information about the Gcc-bugs mailing list