Commit 14e5881e by Jakub Jelinek

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.
parent 6ccc19bd
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> 2020-01-24 Andrew Pinski <apinski@marvell.com>
* config/arm/aarch-cost-tables.h (cortexa57_extra_costs): Change * config/arm/aarch-cost-tables.h (cortexa57_extra_costs): Change
......
...@@ -1824,6 +1824,9 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode, ...@@ -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)) if (CONST_SCALAR_INT_P (op) && is_a <scalar_int_mode> (mode, &result_mode))
{ {
unsigned int width = GET_MODE_PRECISION (result_mode); unsigned int width = GET_MODE_PRECISION (result_mode);
if (width > MAX_BITSIZE_MODE_ANY_INT)
return 0;
wide_int result; wide_int result;
scalar_int_mode imode = (op_mode == VOIDmode scalar_int_mode imode = (op_mode == VOIDmode
? result_mode ? result_mode
...@@ -1968,6 +1971,9 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode, ...@@ -1968,6 +1971,9 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode,
&& is_int_mode (mode, &result_mode)) && is_int_mode (mode, &result_mode))
{ {
unsigned int width = GET_MODE_PRECISION (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 /* Although the overflow semantics of RTL's FIX and UNSIGNED_FIX
operators are intentionally left unspecified (to ease implementation operators are intentionally left unspecified (to ease implementation
by target backends), for consistency, this routine implements the by target backends), for consistency, this routine implements the
...@@ -4422,7 +4428,8 @@ simplify_const_binary_operation (enum rtx_code code, machine_mode mode, ...@@ -4422,7 +4428,8 @@ simplify_const_binary_operation (enum rtx_code code, machine_mode mode,
scalar_int_mode int_mode; scalar_int_mode int_mode;
if (is_a <scalar_int_mode> (mode, &int_mode) if (is_a <scalar_int_mode> (mode, &int_mode)
&& CONST_SCALAR_INT_P (op0) && 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; wide_int result;
wi::overflow_type overflow; wi::overflow_type overflow;
......
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