From: Jan Hubicka Date: Tue, 19 Feb 2002 11:39:01 +0000 (+0100) Subject: * regmove.c (regmove_optimize): Avoid increasing of register pressure. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fd973d5630bb29a2a0a90aa325b26395b8882320;p=gcc.git * regmove.c (regmove_optimize): Avoid increasing of register pressure. From-SVN: r49864 --- 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,19 +1328,22 @@ regmove_optimize (f, nregs, regmove_dump_file) } src_class = reg_preferred_class (REGNO (src)); dst_class = reg_preferred_class (REGNO (dst)); - if (! regclass_compatible_p (src_class, dst_class)) + + if (! (src_note = find_reg_note (insn, REG_DEAD, src))) { - if (!copy_src) - { - copy_src = src; - copy_dst = dst; - } + /* 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; } - /* Can not modify an earlier insn to set dst if this insn - uses an old value in the source. */ - if (reg_overlap_mentioned_p (dst, SET_SRC (set))) + if (! regclass_compatible_p (src_class, dst_class)) { if (!copy_src) { @@ -1350,7 +1353,9 @@ regmove_optimize (f, nregs, regmove_dump_file) continue; } - if (! (src_note = find_reg_note (insn, REG_DEAD, src))) + /* Can not modify an earlier insn to set dst if this insn + uses an old value in the source. */ + if (reg_overlap_mentioned_p (dst, SET_SRC (set))) { if (!copy_src) { @@ -1360,7 +1365,6 @@ regmove_optimize (f, nregs, regmove_dump_file) 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