simplify-rtx: Punt for modes with precision above MAX_BITSIZE_MODE_ANY_INT [PR93376]

The following patch makes sure we punt in the 3 spots if precision is above
MAX_BITSIZE_MODE_ANY_INT.

2020-01-24  Jakub Jelinek  <jakub@redhat.com>

	PR target/93376
	* simplify-rtx.c (simplify_const_unary_operation,
	simplify_const_binary_operation): Punt for mode precision above
	MAX_BITSIZE_MODE_ANY_INT.
This commit is contained in:
Jakub Jelinek 2020-01-24 22:47:23 +01:00
parent 6ccc19bd4d
commit 14e5881e37
2 changed files with 15 additions and 1 deletions

View file

@ -1,3 +1,10 @@
2020-01-24 Jakub Jelinek <jakub@redhat.com>
PR target/93376
* simplify-rtx.c (simplify_const_unary_operation,
simplify_const_binary_operation): Punt for mode precision above
MAX_BITSIZE_MODE_ANY_INT.
2020-01-24 Andrew Pinski <apinski@marvell.com>
* config/arm/aarch-cost-tables.h (cortexa57_extra_costs): Change

View file

@ -1824,6 +1824,9 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode,
if (CONST_SCALAR_INT_P (op) && is_a <scalar_int_mode> (mode, &result_mode))
{
unsigned int width = GET_MODE_PRECISION (result_mode);
if (width > MAX_BITSIZE_MODE_ANY_INT)
return 0;
wide_int result;
scalar_int_mode imode = (op_mode == VOIDmode
? result_mode
@ -1968,6 +1971,9 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode,
&& is_int_mode (mode, &result_mode))
{
unsigned int width = GET_MODE_PRECISION (result_mode);
if (width > MAX_BITSIZE_MODE_ANY_INT)
return 0;
/* Although the overflow semantics of RTL's FIX and UNSIGNED_FIX
operators are intentionally left unspecified (to ease implementation
by target backends), for consistency, this routine implements the
@ -4422,7 +4428,8 @@ simplify_const_binary_operation (enum rtx_code code, machine_mode mode,
scalar_int_mode int_mode;
if (is_a <scalar_int_mode> (mode, &int_mode)
&& CONST_SCALAR_INT_P (op0)
&& CONST_SCALAR_INT_P (op1))
&& CONST_SCALAR_INT_P (op1)
&& GET_MODE_PRECISION (int_mode) <= MAX_BITSIZE_MODE_ANY_INT)
{
wide_int result;
wi::overflow_type overflow;