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;
}