From fd973d5630bb29a2a0a90aa325b26395b8882320 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 19 Feb 2002 12:39:01 +0100 Subject: [PATCH] * regmove.c (regmove_optimize): Avoid increasing of register pressure. From-SVN: r49864 --- gcc/ChangeLog | 4 ++++ gcc/regmove.c | 26 +++++++++++++++----------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ffb087cf2fd..b6f6a1c1de0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Tue Feb 19 12:37:23 CET 2002 Jan Hubicka + + * regmove.c (regmove_optimize): Avoid increasing of register pressure. + 2002-02-19 Neil Booth PR other/5718 diff --git a/gcc/regmove.c b/gcc/regmove.c index 9530128721a..aa1c17bbcee 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -1328,6 +1328,21 @@ regmove_optimize (f, nregs, regmove_dump_file) } src_class = reg_preferred_class (REGNO (src)); dst_class = reg_preferred_class (REGNO (dst)); + + if (! (src_note = find_reg_note (insn, REG_DEAD, src))) + { + /* We used to force the copy here like in other cases, but + it produces worse code, as it eliminates no copy + instructions and the copy emitted will be produced by + reload anyway. On patterns with multiple alternatives, + there may be better sollution availble. + + In particular this change produced slower code for numeric + i387 programs. */ + + continue; + } + if (! regclass_compatible_p (src_class, dst_class)) { if (!copy_src) @@ -1350,17 +1365,6 @@ regmove_optimize (f, nregs, regmove_dump_file) continue; } - if (! (src_note = find_reg_note (insn, REG_DEAD, src))) - { - if (!copy_src) - { - copy_src = src; - copy_dst = dst; - } - continue; - } - - /* If src is set once in a different basic block, and is set equal to a constant, then do not use it for this optimization, as this would make it