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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

https://gcc.gnu.org/g:68fa82e2d8f868a233103102dff2449a416bc566

commit r14-4279-g68fa82e2d8f868a233103102dff2449a416bc566
Author: Andrew Pinski <apin...@marvell.com>
Date:   Thu Sep 21 03:05:17 2023 +0000

    PHIOPT: Fix minmax_replacement for three way

    So when diamond bb support was added to minmax_replacement in
r13-1950-g9bb19e143cfe,
    the code was not expecting the alt_middle_bb not to exist if it was empty
(for threeway_p).
    So when factor_out_conditional_conversion was used to factor out
conversions, it turns out
    the assumption for alt_middle_bb to be wrong and we ended up with
threeway_p being true but
    having middle_bb being empty but alt_middle_bb not being empty which causes
wrong code in
    many cases.

    This patch fixes the issue by adding a test for the 2 cases where the
assumption on
    threeway_p case having the other bb being empty.

    Changes made:
    v2: Fix test for `(a <= u) b = MAX(a, d) else b = u`.

    Note my plan for GCC 15 is remove minmax_replacement as match.pd will catch
all cases
    at that point.

    OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

            PR tree-optimization/111469

    gcc/ChangeLog:

            * tree-ssa-phiopt.cc (minmax_replacement): Fix
            the assumption for the `non-diamond` handling cases
            of diamond code.

    gcc/testsuite/ChangeLog:

            * gcc.c-torture/execute/pr111469-1.c: New test.

Reply via email to