Commit e16e3291 by Ulrich Weigand Committed by Ulrich Weigand

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
parent 348c9efc
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> Wed Mar 6 20:32:09 CET 2002 Jan Hubicka <jh@suse.cz>
* toplev.c (rest_of_compilation): Do jump threading before SSA path; * toplev.c (rest_of_compilation): Do jump threading before SSA path;
......
...@@ -1278,6 +1278,11 @@ reload (first, global) ...@@ -1278,6 +1278,11 @@ reload (first, global)
unused_insn_chains = 0; unused_insn_chains = 0;
fixup_abnormal_edges (); 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; return failure;
} }
......
...@@ -143,9 +143,13 @@ simplify_gen_binary (code, mode, op0, op1) ...@@ -143,9 +143,13 @@ simplify_gen_binary (code, mode, op0, op1)
the operation. */ the operation. */
if (code == PLUS || code == MINUS) if (code == PLUS || code == MINUS)
return simplify_plus_minus (code, mode, op0, op1, 1); {
else tem = simplify_plus_minus (code, mode, op0, op1, 1);
return gen_rtx_fmt_ee (code, mode, op0, op1); 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. /* If X is a MEM referencing the constant pool, return the real value.
...@@ -1649,7 +1653,9 @@ simplify_binary_operation (code, mode, op0, op1) ...@@ -1649,7 +1653,9 @@ simplify_binary_operation (code, mode, op0, op1)
we rebuild the operation. we rebuild the operation.
If FORCE is true, then always generate the rtx. This is used to 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 struct simplify_plus_minus_op_data
{ {
...@@ -1708,11 +1714,7 @@ simplify_plus_minus (code, mode, op0, op1, force) ...@@ -1708,11 +1714,7 @@ simplify_plus_minus (code, mode, op0, op1, force)
case PLUS: case PLUS:
case MINUS: case MINUS:
if (n_ops == 7) if (n_ops == 7)
{ return NULL_RTX;
if (force)
abort ();
return NULL_RTX;
}
ops[n_ops].op = XEXP (this_op, 1); ops[n_ops].op = XEXP (this_op, 1);
ops[n_ops].neg = (this_code == MINUS) ^ this_neg; ops[n_ops].neg = (this_code == MINUS) ^ this_neg;
......
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