summaryrefslogtreecommitdiff
path: root/gcc/lra-lives.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/lra-lives.c')
-rw-r--r--gcc/lra-lives.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 16e1f386b3e..5157c85895e 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -768,7 +768,15 @@ process_bb_lives (basic_block bb, int &curr_point, bool dead_insn_p)
dst_regno = REGNO (SET_DEST (set));
if (dst_regno >= lra_constraint_new_regno_start
&& src_regno >= lra_constraint_new_regno_start)
- lra_create_copy (dst_regno, src_regno, freq);
+ {
+ /* It might be still an original (non-reload) insn with
+ one unused output and a constraint requiring to use
+ the same reg for input/output operands. In this case
+ dst_regno and src_regno have the same value, we don't
+ need a misleading copy for this case. */
+ if (dst_regno != src_regno)
+ lra_create_copy (dst_regno, src_regno, freq);
+ }
else if (dst_regno >= lra_constraint_new_regno_start)
{
if ((hard_regno = src_regno) >= FIRST_PSEUDO_REGISTER)