On 7/25/23 09:40, Richard Biener wrote:
The following removes the code checking whether a noop copy
is between something involved in the return sequence composed
of a SET and USE.  Instead of checking for this special-case
the following makes us only ever remove noop copies between
pseudos - which is the case that is necessary for IRA/LRA
interfacing to function according to the comment.  That makes
looking for the return reg special case unnecessary, reducing
the compile-time in LRA non-specific to zero for the testcase.

Bootstrapped and tested on x86_64-unknown-linux-gnu with
all languages and {,-m32}.

OK?

Richard, sorry for the delay with the answer.  I was on vacation.

There is a lot of history of changes of the code.  I believe your change is right.  I don't think that RTL will ever contain noop return move insn involving the return hard register especially after removing hard reg propagation couple years ago, at least IRA/LRA do not generate such insns during its work.

So the patch is OK for me.  I specially like that the big part of code is removed.  No code, no problem (including performance one).  Thank you for the patch.

        PR rtl-optimization/110587
        * lra-spills.cc (return_regno_p): Remove.
        (regno_in_use_p): Likewise.
        (lra_final_code_change): Do not remove noop moves
        between hard registers.
---
  gcc/lra-spills.cc | 69 +----------------------------------------------
  1 file changed, 1 insertion(+), 68 deletions(-)

diff --git a/gcc/lra-spills.cc b/gcc/lra-spills.cc
index 3a7bb7e8cd9..fe58f162d05 100644
--- a/gcc/lra-spills.cc
+++ b/gcc/lra-spills.cc
@@ -705,72 +705,6 @@ alter_subregs (rtx *loc, bool final_p)
    return res;
  }

Reply via email to