simplify-rtx: The truncation of an IOR can have all bits set (PR81423)

... if it is an IOR with a constant with all bits set in the mode
that is truncated to, for example.  Handle that case.


	PR rtl-optimization/81423
	* simplify-rtx.c (simplify_truncation): Handle truncating an IOR
	with a constant that is -1 in the truncated to mode.

From-SVN: r250363
This commit is contained in:
Segher Boessenkool 2017-07-19 21:28:41 +02:00 committed by Segher Boessenkool
parent ccfa843f67
commit 3d50b6045a
2 changed files with 15 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2017-07-19 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/81423
* simplify-rtx.c (simplify_truncation): Handle truncating an IOR
with a constant that is -1 in the truncated to mode.
2017-07-19 Jan Hubicka <hubicka@ucw.cz>
* predict.c (propagate_unlikely_bbs_forward): Break out from ...

View file

@ -857,6 +857,15 @@ simplify_truncation (machine_mode mode, rtx op,
return simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0),
GET_MODE (XEXP (op, 0)));
/* (truncate:A (ior X C)) is (const_int -1) if C is equal to that already,
in mode A. */
if (GET_CODE (op) == IOR
&& SCALAR_INT_MODE_P (mode)
&& SCALAR_INT_MODE_P (op_mode)
&& CONST_INT_P (XEXP (op, 1))
&& trunc_int_for_mode (INTVAL (XEXP (op, 1)), mode) == -1)
return constm1_rtx;
return NULL_RTX;
}