]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-ccp.c (canonicalize_float_value): Rename to ...
authorRichard Biener <rguenther@suse.de>
Thu, 7 Nov 2013 11:33:03 +0000 (11:33 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 7 Nov 2013 11:33:03 +0000 (11:33 +0000)
2013-11-07  Richard Biener  <rguenther@suse.de>

* tree-ssa-ccp.c (canonicalize_float_value): Rename to ...
(canonicalize_value): ... this.  Also handle stripping of
TREE_OVERFLOW.
(get_value, set_lattice_value, get_value_for_expr): Adjust.
* gimple-fold.c (canonicalize_constructor_val): Strip
TREE_OVERFLOW.
* tree-ssa-threadedge.c (set_ssa_name_value): Likewise.

From-SVN: r204506

gcc/ChangeLog
gcc/gimple-fold.c
gcc/tree-ssa-ccp.c
gcc/tree-ssa-threadedge.c

index fa1d74bdcd028d542272b3282bbc106bb4999c80..72dd1c2b3e215e92fd2ebd3d90b2f64427c947ce 100644 (file)
@@ -1,3 +1,13 @@
+2013-11-07  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-ccp.c (canonicalize_float_value): Rename to ...
+       (canonicalize_value): ... this.  Also handle stripping of
+       TREE_OVERFLOW.
+       (get_value, set_lattice_value, get_value_for_expr): Adjust.
+       * gimple-fold.c (canonicalize_constructor_val): Strip
+       TREE_OVERFLOW.
+       * tree-ssa-threadedge.c (set_ssa_name_value): Likewise.
+
 2013-11-07  Richard Biener  <rguenther@suse.de>
 
        * tree-dfa.c (get_ref_base_and_extent): Fix casting.
index 844b65b0bf2bdb979a4ae38c60308bc195f31f5a..a4be3aae4d554c183ee9ef6190b3fc6d386e91d1 100644 (file)
@@ -205,6 +205,8 @@ canonicalize_constructor_val (tree cval, tree from_decl)
        cval = fold_convert (TREE_TYPE (orig_cval), cval);
       return cval;
     }
+  if (TREE_OVERFLOW_P (cval))
+    return drop_tree_overflow (cval);
   return orig_cval;
 }
 
index 5b6c0dbea28adfb1cbdf1a7758ffb2fbfec7b960..b4dfd4928cdcdbb9de1659c76f90768e32b6fc15 100644 (file)
@@ -168,7 +168,7 @@ typedef struct prop_value_d prop_value_t;
 static prop_value_t *const_val;
 static unsigned n_const_val;
 
-static void canonicalize_float_value (prop_value_t *);
+static void canonicalize_value (prop_value_t *);
 static bool ccp_fold_stmt (gimple_stmt_iterator *);
 
 /* Dump constant propagation value VAL to file OUTF prefixed by PREFIX.  */
@@ -326,7 +326,7 @@ get_value (tree var)
   if (val->lattice_val == UNINITIALIZED)
     *val = get_default_value (var);
 
-  canonicalize_float_value (val);
+  canonicalize_value (val);
 
   return val;
 }
@@ -378,17 +378,24 @@ set_value_varying (tree var)
      that HONOR_NANS is false, and we try to change the value of x to 0,
      causing an ICE.  With HONOR_NANS being false, the real appearance of
      NaN would cause undefined behavior, though, so claiming that y (and x)
-     are UNDEFINED initially is correct.  */
+     are UNDEFINED initially is correct.
+
+  For other constants, make sure to drop TREE_OVERFLOW.  */
 
 static void
-canonicalize_float_value (prop_value_t *val)
+canonicalize_value (prop_value_t *val)
 {
   enum machine_mode mode;
   tree type;
   REAL_VALUE_TYPE d;
 
-  if (val->lattice_val != CONSTANT
-      || TREE_CODE (val->value) != REAL_CST)
+  if (val->lattice_val != CONSTANT)
+    return;
+
+  if (TREE_OVERFLOW_P (val->value))
+    val->value = drop_tree_overflow (val->value);
+
+  if (TREE_CODE (val->value) != REAL_CST)
     return;
 
   d = TREE_REAL_CST (val->value);
@@ -454,7 +461,7 @@ set_lattice_value (tree var, prop_value_t new_val)
   /* We can deal with old UNINITIALIZED values just fine here.  */
   prop_value_t *old_val = &const_val[SSA_NAME_VERSION (var)];
 
-  canonicalize_float_value (&new_val);
+  canonicalize_value (&new_val);
 
   /* We have to be careful to not go up the bitwise lattice
      represented by the mask.
@@ -569,7 +576,7 @@ get_value_for_expr (tree expr, bool for_bits_p)
       val.lattice_val = CONSTANT;
       val.value = expr;
       val.mask = double_int_zero;
-      canonicalize_float_value (&val);
+      canonicalize_value (&val);
     }
   else if (TREE_CODE (expr) == ADDR_EXPR)
     val = get_value_from_alignment (expr);
index c3e7bd0d1388745ee10bf5c00afcc4befe235b6f..4cff16d6846b5f3281cb35c74199e479d1cf3726 100644 (file)
@@ -58,6 +58,8 @@ set_ssa_name_value (tree name, tree value)
 {
   if (SSA_NAME_VERSION (name) >= ssa_name_values.length ())
     ssa_name_values.safe_grow_cleared (SSA_NAME_VERSION (name) + 1);
+  if (value && TREE_OVERFLOW_P (value))
+    value = drop_tree_overflow (value);
   ssa_name_values[SSA_NAME_VERSION (name)] = value;
 }