Commit fd973d56 by Jan Hubicka Committed by Jan Hubicka

* regmove.c (regmove_optimize): Avoid increasing of register pressure.

From-SVN: r49864
parent 419a71d3
Tue Feb 19 12:37:23 CET 2002 Jan Hubicka <jh@suse.cz>
* regmove.c (regmove_optimize): Avoid increasing of register pressure.
2002-02-19 Neil Booth <neil@daikokuya.demon.co.uk> 2002-02-19 Neil Booth <neil@daikokuya.demon.co.uk>
PR other/5718 PR other/5718
......
...@@ -1328,19 +1328,22 @@ regmove_optimize (f, nregs, regmove_dump_file) ...@@ -1328,19 +1328,22 @@ regmove_optimize (f, nregs, regmove_dump_file)
} }
src_class = reg_preferred_class (REGNO (src)); src_class = reg_preferred_class (REGNO (src));
dst_class = reg_preferred_class (REGNO (dst)); 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) /* We used to force the copy here like in other cases, but
{ it produces worse code, as it eliminates no copy
copy_src = src; instructions and the copy emitted will be produced by
copy_dst = dst; 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; continue;
} }
/* Can not modify an earlier insn to set dst if this insn if (! regclass_compatible_p (src_class, dst_class))
uses an old value in the source. */
if (reg_overlap_mentioned_p (dst, SET_SRC (set)))
{ {
if (!copy_src) if (!copy_src)
{ {
...@@ -1350,7 +1353,9 @@ regmove_optimize (f, nregs, regmove_dump_file) ...@@ -1350,7 +1353,9 @@ regmove_optimize (f, nregs, regmove_dump_file)
continue; 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) if (!copy_src)
{ {
...@@ -1360,7 +1365,6 @@ regmove_optimize (f, nregs, regmove_dump_file) ...@@ -1360,7 +1365,6 @@ regmove_optimize (f, nregs, regmove_dump_file)
continue; continue;
} }
/* If src is set once in a different basic block, /* If src is set once in a different basic block,
and is set equal to a constant, then do not use and is set equal to a constant, then do not use
it for this optimization, as this would make it it for this optimization, as this would make it
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment