]> git.ipfire.org Git - thirdparty/gcc.git/commit
split-path: Improve ifcvt heurstic for split path [PR112402]
authorAndrew Pinski <quic_apinski@quicinc.com>
Tue, 3 Sep 2024 04:34:53 +0000 (21:34 -0700)
committerAndrew Pinski <quic_apinski@quicinc.com>
Tue, 3 Sep 2024 23:38:03 +0000 (16:38 -0700)
commitb2b20b277988ab9ddb6ea82141075147b7b98f74
tree52094d5a6dc1e97d6aeb1a870998a391a788b7f5
parent77e17558fcda8992fbe731ccd12bde445e48d6f4
split-path: Improve ifcvt heurstic for split path [PR112402]

This simplifies the heurstic for split path to see if the join
bb is a ifcvt candidate.
For the predecessors bbs need either to be empty or only have one
statement in them which could be a decent ifcvt candidate.
The previous heurstics would miss that:
```
if (a) goto B else goto C;
B:  goto C;
C:
c = PHI<d,e>
```

Would be a decent ifcvt candidate. And would also miss:
```
if (a) goto B else goto C;
B: d = f + 1;  goto C;
C:
c = PHI<d,e>
```

Also since currently the max number of cmovs being able to produced is 3, we
should only assume `<= 3` phis can be ifcvt candidates.

The testcase changes for split-path-6.c is that lookharder function
is a true ifcvt case where we would get cmov as expected; it looks like it
was not a candidate when the heurstic was added but became one later on.
pr88797.C is now rejected via it being an ifcvt candidate rather than being about
DCE/const prop.

The rest of the testsuite changes are just slight change in the dump,
removing the "*diamnond" part as it was removed from the print.

Bootstrapped and tested on x86_64.

PR tree-optimization/112402

gcc/ChangeLog:

* gimple-ssa-split-paths.cc (poor_ifcvt_pred): New function.
(is_feasible_trace): Remove old heurstics for ifcvt cases.
For num_stmts <=1 for both pred check poor_ifcvt_pred on both
pred.

gcc/testsuite/ChangeLog:

* gcc.dg/tree-ssa/split-path-11.c: Update scan.
* gcc.dg/tree-ssa/split-path-2.c: Update scan.
* gcc.dg/tree-ssa/split-path-5.c: Update scan.
* gcc.dg/tree-ssa/split-path-6.c: Update scan.
* g++.dg/tree-ssa/pr88797.C: Update scan.
* gcc.dg/tree-ssa/split-path-13.c: New test.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
gcc/gimple-ssa-split-paths.cc
gcc/testsuite/g++.dg/tree-ssa/pr88797.C
gcc/testsuite/gcc.dg/tree-ssa/split-path-11.c
gcc/testsuite/gcc.dg/tree-ssa/split-path-13.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/split-path-2.c
gcc/testsuite/gcc.dg/tree-ssa/split-path-5.c
gcc/testsuite/gcc.dg/tree-ssa/split-path-6.c