RA: Implement reuse of equivalent memory for caller saves optimization
authorVladimir N. Makarov <vmakarov@redhat.com>
Tue, 7 Feb 2023 13:27:36 +0000 (08:27 -0500)
committerVladimir N. Makarov <vmakarov@redhat.com>
Tue, 7 Feb 2023 13:46:35 +0000 (08:46 -0500)
commitf661c0bb6371f355966a67b5ce71398e80792948
tree2fed39477f056cd4366a0ededc2e6f8d580f9e7e
parent295adfc9ed20468cdaba3afe258d57b58a8df792
RA: Implement reuse of equivalent memory for caller saves optimization

The test case shows opportunity to reuse memory with constant address for
caller saves optimization for constant or pure function call.  The patch
implements the memory reuse.

        PR rtl-optimization/103541

gcc/ChangeLog:

* ira.h (struct ira_reg_equiv_s): Add new field caller_save_p.
* ira.cc (validate_equiv_mem): Check memref address variance.
(update_equiv_regs): Define caller save equivalence for
valid_combine.
(setup_reg_equiv): Clear defined_p flag for caller save equivalence.
* lra-constraints.cc (lra_copy_reg_equiv): Add new arg
call_save_p.  Use caller save equivalence depending on the arg.
(split_reg): Adjust the call.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr103541.c: New.
gcc/ira.cc
gcc/ira.h
gcc/lra-constraints.cc
gcc/testsuite/gcc.target/i386/pr103541.c [new file with mode: 0644]