simplify-rtx: Punt for modes with precision above MAX_BITSIZE_MODE_ANY_INT [PR93376]
authorJakub Jelinek <jakub@redhat.com>
Fri, 24 Jan 2020 21:47:23 +0000 (22:47 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 24 Jan 2020 21:47:23 +0000 (22:47 +0100)
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.

gcc/ChangeLog
gcc/simplify-rtx.c

index bac1a9baae6dba844ce4b2c04c59e1997b68511f..4061bd0b998b475def5538b61cfe086921007059 100644 (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
index 897de3f525dba2f1336a6ade372596e145ec80c5..eff1d07a2533c7bda5f0529cd318f08e6d5209d6 100644 (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;