VAX: Handle subtracting from self with QMATH DImode add/sub

Remove an assertion the failure of which has not been actually observed,
but which appears clearly dangerous, for when the QMATH DImode add/sub
handler is invoked with the subtrahend and the minuend both the same.
Instead handle the operation by emitting a move of constant 0 to the
output operand.  Adjust the relevant inline comment accordingly.

	gcc/
	* config/vax/vax.c (vax_expand_addsub_di_operands): Handle equal
	input operands with subtraction.
This commit is contained in:
Maciej W. Rozycki 2020-12-13 20:46:17 +00:00
parent ffb1dcf622
commit 294ca9eca0

View File

@ -2042,12 +2042,14 @@ vax_expand_addsub_di_operands (rtx * operands, enum rtx_code code)
}
else
{
/* If are adding the same value together, that's really a multiply by 2,
and that's just a left shift of 1. */
/* If we are adding a value to itself, that's really a multiply by 2,
and that's just a left shift by 1. If subtracting, it's just 0. */
if (rtx_equal_p (operands[1], operands[2]))
{
gcc_assert (code != MINUS);
emit_insn (gen_ashldi3 (operands[0], operands[1], const1_rtx));
if (code == PLUS)
emit_insn (gen_ashldi3 (operands[0], operands[1], const1_rtx));
else
emit_move_insn (operands[0], const0_rtx);
return;
}