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

--- Comment #3 from GCC 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:698e0ec89bc0960e074d2222208bffe47f5addd9

commit r15-3992-g698e0ec89bc0960e074d2222208bffe47f5addd9
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Mon Sep 30 16:44:44 2024 +0000

    phi-opt: Improve factor heurstic with constants and conversions from bool
[PR116890]

    Take:
    ```
      if (t_3(D) != 0)
        goto <bb 3>;
      else
        goto <bb 4>;

      <bb 3>
      _8 = c_4(D) != 0;
      _9 = (int) _8;

      <bb 4>
      # e_2 = PHI <_9(3), 0(2)>
    ```

    We should factor out the conversion here as that will allow a simplfication
to
    `(t_3 != 0) & (c_4 != 0)`. Unlike most other types; `a ? b : CST` will
simplify
    for boolean result type to either `a | b` or `a & b` so allowing this
conversion
    for all operations will be always profitable.

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

    Note on the phi-opt-7.c testcase change, we are now able to optimize this
    and remove the if due to the factoring out now so this is an improvement.

            PR tree-optimization/116890

    gcc/ChangeLog:

            * tree-ssa-phiopt.cc (factor_out_conditional_operation):
Conversions
            from bool is also should be considered as wanting to happen.

    gcc/testsuite/ChangeLog:

            * gcc.dg/tree-ssa/phi-opt-7.c: Update testcase for no ifs left.
            * gcc.dg/tree-ssa/phi-opt-42.c: New test.
            * gcc.dg/tree-ssa/phi-opt-43.c: New test.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Reply via email to