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)
{ {
copy_src = src; /* We used to force the copy here like in other cases, but
copy_dst = dst; 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; 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