Pinging this for GCC15. Thanks
On Tue, Apr 23, 2024 at 1:47 PM Manolis Tsamis <manolis.tsa...@vrull.eu> wrote: > > > noce_convert_multiple_sets has been introduced and extended over time to > handle > if conversion for blocks with multiple sets. Currently this is focused on > register moves and rejects any sort of arithmetic operations. > > This series is an extension to allow more sequences to take part in if > conversion. The first patch is a required change to emit correct code and the > second patch whitelists a larger number of operations through > bb_ok_for_noce_convert_multiple_sets. The third patch adds support to rewire > multiple registers in noce_convert_multiple_sets_1 and refactors the code with > a new helper info struct. The fourth patch removes some old code that should > not be needed anymore. > > For targets that have a rich selection of conditional instructions, > like aarch64, I have seen an ~5x increase of profitable if conversions for > multiple set blocks in SPEC benchmarks. Also tested with a wide variety of > benchmarks and I have not seen performance regressions on either x64 / > aarch64. > > Some samples that previously resulted in a branch but now better use these > instructions can be seen in the provided test cases. > > Bootstrapped and tested on AArch64 and x86-64. > > > Changes in v4: > - Remove unnecessary hardcoded list of allowed ops in > bb_ok_for_noce_convert_multiple_sets. > - Set need_cmov based on BB live_out instead of REG_DEAD notes. > - Fix preexisting issues and improve the code that sets > read_comparison. > > Manolis Tsamis (3): > [RFC] ifcvt: handle sequences that clobber flags in > noce_convert_multiple_sets > [RFC] ifcvt: Allow more operations in multiple set if conversion > [RFC] ifcvt: Handle multiple rewired regs and refactor > noce_convert_multiple_sets > > gcc/ifcvt.cc | 383 ++++++++---------- > gcc/ifcvt.h | 16 + > .../aarch64/ifcvt_multiple_sets_arithm.c | 79 ++++ > .../aarch64/ifcvt_multiple_sets_rewire.c | 20 + > 4 files changed, 292 insertions(+), 206 deletions(-) > create mode 100644 > gcc/testsuite/gcc.target/aarch64/ifcvt_multiple_sets_arithm.c > create mode 100644 > gcc/testsuite/gcc.target/aarch64/ifcvt_multiple_sets_rewire.c > > -- > 2.34.1 >