https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107322

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

https://gcc.gnu.org/g:5792208f5124f687376f25798668d105d7ddb270

commit r13-3439-g5792208f5124f687376f25798668d105d7ddb270
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri Oct 21 18:34:37 2022 +0200

    i386: Fix up BFmode comparisons in conditional moves [PR107322]

    As the testcase shows, when cbranchbf4/cstorebf4 patterns are defined,
    we can get ICEs for conditional moves.
    The problem is that the generic conditional move expansion just calls
    prepare_cmp_insn which just checks that such a cbranch<mode>4 exists
    and returns directly such comparison and passes it down to the conditional
    move optabs.
    The following patch fixes it by punting if the comparisons aren't
    ix86_fp_comparison_operator (to tell the generic code it should separately
    compare) and to handle the promotion of BFmode comparison operands to
    SFmode such that comparison is performed in SFmode.

    2022-10-21  Jakub Jelinek  <ja...@redhat.com>

            PR target/107322
            * config/i386/i386-expand.cc (ix86_prepare_fp_compare_args): For
            BFmode comparisons promote arguments to SFmode and recurse.
            (ix86_expand_int_movcc, ix86_expand_fp_movcc): Return false early
            if comparison operands are BFmode and operands[1] is not
            ix86_fp_comparison_operator.

            * gcc.target/i386/pr107322.c: New test.

Reply via email to