reload1.c (reload): Unshare all rtl after reload is done.
* reload1.c (reload): Unshare all rtl after reload is done. * simplify-rtx.c (simplify_plus_minus): Do not abort, but simply fail if the expression is too complex to simplify. (simplify_gen_binary): Handle simplify_plus_minus failures. From-SVN: r50380
This commit is contained in:
parent
348c9efcd3
commit
e16e32914a
@ -1,3 +1,11 @@
|
||||
2002-03-06 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* reload1.c (reload): Unshare all rtl after reload is done.
|
||||
|
||||
* simplify-rtx.c (simplify_plus_minus): Do not abort,
|
||||
but simply fail if the expression is too complex to simplify.
|
||||
(simplify_gen_binary): Handle simplify_plus_minus failures.
|
||||
|
||||
Wed Mar 6 20:32:09 CET 2002 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* toplev.c (rest_of_compilation): Do jump threading before SSA path;
|
||||
|
@ -1278,6 +1278,11 @@ reload (first, global)
|
||||
unused_insn_chains = 0;
|
||||
fixup_abnormal_edges ();
|
||||
|
||||
/* Replacing pseudos with their memory equivalents might have
|
||||
created shared rtx. Subsequent passes would get confused
|
||||
by this, so unshare everything here. */
|
||||
unshare_all_rtl_again (first);
|
||||
|
||||
return failure;
|
||||
}
|
||||
|
||||
|
@ -143,9 +143,13 @@ simplify_gen_binary (code, mode, op0, op1)
|
||||
the operation. */
|
||||
|
||||
if (code == PLUS || code == MINUS)
|
||||
return simplify_plus_minus (code, mode, op0, op1, 1);
|
||||
else
|
||||
return gen_rtx_fmt_ee (code, mode, op0, op1);
|
||||
{
|
||||
tem = simplify_plus_minus (code, mode, op0, op1, 1);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
|
||||
return gen_rtx_fmt_ee (code, mode, op0, op1);
|
||||
}
|
||||
|
||||
/* If X is a MEM referencing the constant pool, return the real value.
|
||||
@ -1649,7 +1653,9 @@ simplify_binary_operation (code, mode, op0, op1)
|
||||
we rebuild the operation.
|
||||
|
||||
If FORCE is true, then always generate the rtx. This is used to
|
||||
canonicalize stuff emitted from simplify_gen_binary. */
|
||||
canonicalize stuff emitted from simplify_gen_binary. Note that this
|
||||
can still fail if the rtx is too complex. It won't fail just because
|
||||
the result is not 'simpler' than the input, however. */
|
||||
|
||||
struct simplify_plus_minus_op_data
|
||||
{
|
||||
@ -1708,11 +1714,7 @@ simplify_plus_minus (code, mode, op0, op1, force)
|
||||
case PLUS:
|
||||
case MINUS:
|
||||
if (n_ops == 7)
|
||||
{
|
||||
if (force)
|
||||
abort ();
|
||||
return NULL_RTX;
|
||||
}
|
||||
return NULL_RTX;
|
||||
|
||||
ops[n_ops].op = XEXP (this_op, 1);
|
||||
ops[n_ops].neg = (this_code == MINUS) ^ this_neg;
|
||||
|
Loading…
Reference in New Issue
Block a user