Commit f930bfd0 by Jim Wilson Committed by Jim Wilson

Fix miscompilation of testcase 20021010-1.c for v850 target with -O -mv850e.

	* cse.c (fold_rtx): Don't perform associative optimization for DIV and
	UDIV.

From-SVN: r58026
parent 61fdde38
2002-10-10 Jim Wilson <wilson@redhat.com>
* cse.c (fold_rtx): Don't perform associative optimization for DIV and
UDIV.
2002-10-10 David Edelsohn <edelsohn@gnu.org> 2002-10-10 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/aix52.h: New file. * config/rs6000/aix52.h: New file.
......
...@@ -4212,7 +4212,7 @@ fold_rtx (x, insn) ...@@ -4212,7 +4212,7 @@ fold_rtx (x, insn)
from_plus: from_plus:
case SMIN: case SMAX: case UMIN: case UMAX: case SMIN: case SMAX: case UMIN: case UMAX:
case IOR: case AND: case XOR: case IOR: case AND: case XOR:
case MULT: case DIV: case UDIV: case MULT:
case ASHIFT: case LSHIFTRT: case ASHIFTRT: case ASHIFT: case LSHIFTRT: case ASHIFTRT:
/* If we have (<op> <reg> <const_int>) for an associative OP and REG /* If we have (<op> <reg> <const_int>) for an associative OP and REG
is known to be of similar form, we may be able to replace the is known to be of similar form, we may be able to replace the
...@@ -4260,11 +4260,9 @@ fold_rtx (x, insn) ...@@ -4260,11 +4260,9 @@ fold_rtx (x, insn)
break; break;
/* Compute the code used to compose the constants. For example, /* Compute the code used to compose the constants. For example,
A/C1/C2 is A/(C1 * C2), so if CODE == DIV, we want MULT. */ A-C1-C2 is A-(C1 + C2), so if CODE == MINUS, we want PLUS. */
associate_code associate_code = (is_shift || code == MINUS ? PLUS : code);
= (code == MULT || code == DIV || code == UDIV ? MULT
: is_shift || code == PLUS || code == MINUS ? PLUS : code);
new_const = simplify_binary_operation (associate_code, mode, new_const = simplify_binary_operation (associate_code, mode,
const_arg1, inner_const); const_arg1, inner_const);
...@@ -4302,6 +4300,14 @@ fold_rtx (x, insn) ...@@ -4302,6 +4300,14 @@ fold_rtx (x, insn)
} }
break; break;
case DIV: case UDIV:
/* ??? The associative optimization performed immediately above is
also possible for DIV and UDIV using associate_code of MULT.
However, we would need extra code to verify that the
multiplication does not overflow, that is, there is no overflow
in the calculation of new_const. */
break;
default: default:
break; break;
} }
......
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