]> git.ipfire.org Git - thirdparty/gcc.git/commit
phi-opt: Improve factor heurstic with constants and conversions from bool [PR116890]
authorAndrew Pinski <quic_apinski@quicinc.com>
Mon, 30 Sep 2024 16:44:44 +0000 (16:44 +0000)
committerAndrew Pinski <quic_apinski@quicinc.com>
Tue, 1 Oct 2024 14:09:35 +0000 (07:09 -0700)
commit698e0ec89bc0960e074d2222208bffe47f5addd9
tree3e524dc0fadc73f9745f8af66f99399b11859566
parent8273e31adfa1ba5f0722eb37bcc8aeca8718a472
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_apinski@quicinc.com>
gcc/testsuite/gcc.dg/tree-ssa/phi-opt-42.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/phi-opt-43.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/phi-opt-7.c
gcc/tree-ssa-phiopt.cc