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>
PR other/5718
......
......@@ -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
......
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