diff options
author | Alexandre Oliva <oliva@adacore.com> | 2021-12-08 23:37:14 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2021-12-08 23:37:14 -0300 |
commit | 50e8b0c9bca6cdc57804f860ec5311b641753fbb (patch) | |
tree | 611ff19bef2b5e3ea11233f2c16b58f324e11503 /gcc/expr.c | |
parent | 2bff91f3b4e6f697823a261222186f4b5b052e86 (diff) | |
download | gcc-50e8b0c9bca6cdc57804f860ec5311b641753fbb.zip gcc-50e8b0c9bca6cdc57804f860ec5311b641753fbb.tar.gz gcc-50e8b0c9bca6cdc57804f860ec5311b641753fbb.tar.bz2 |
[PR103302] skip multi-word pre-move clobber during lra
If we emit clobbers before multi-word moves during lra, we get
confused if a copy ends up with input or output replaced with each
other: the clobber then kills the previous set, and it gets deleted.
This patch avoids emitting such clobbers when lra_in_progress.
for gcc/ChangeLog
PR target/103302
* expr.c (emit_move_multi_word): Skip clobber during lra.
for gcc/testsuite/ChangeLog
PR target/103302
* gcc.target/riscv/pr103302.c: New.
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -3929,7 +3929,7 @@ emit_move_multi_word (machine_mode mode, rtx x, rtx y) hard regs shouldn't appear here except as return values. We never want to emit such a clobber after reload. */ if (x != y - && ! (reload_in_progress || reload_completed) + && ! (lra_in_progress || reload_in_progress || reload_completed) && need_clobber != 0) emit_clobber (x); |