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
>

Reply via email to