[Bug rtl-optimization/126347] [17 Regression] ICE: in swap_condition, at jump.cc:625 during ce2 with a floating-point condition

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126347

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Philipp Tomsich <[email protected]>:

https://gcc.gnu.org/g:dcb8c8d3e7333b09081f81c29358e03e73d59a12

commit r17-2669-gdcb8c8d3e7333b09081f81c29358e03e73d59a12
Author: Philipp Tomsich <[email protected]>
Date:   Tue Jul 21 21:19:53 2026 +0200

    ifcvt: do not emit a store flag for an irreversible condition [PR126347]

    noce_emit_store_flag feeds the possibly-reversed comparison code to a
    store-flag insn, and to emit_store_flag, without checking that the
    reversal succeeded.  reversed_comparison_code returns UNKNOWN for
    UNLT/UNLE/UNGT/UNGE, and for a MODE_CC comparison it cannot trace back
    to its COMPARE -- common for a floating-point condition on targets that
    compare into a condition-code register.  emit_store_flag then reaches
    its floating-point path and calls swap_condition (UNKNOWN), which aborts.

    This was latent until r17-2519-ga33f26607eb4f3 made
    noce_try_shifted_store_flag the first caller to reach
    noce_emit_store_flag with REVERSEP set for such a condition.

    Bail out early when the reversal failed.

    Bootstrapped and regression tested on aarch64-unknown-linux-gnu with no
    regressions.

            PR rtl-optimization/126347
    gcc/
            * ifcvt.cc (noce_emit_store_flag): Return NULL_RTX when the
            comparison code is UNKNOWN.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.