tree-ssa-ccp.c (visit_assignment): Verify that result of VIEW_CONVERT_EXPR is_gimple_...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Thu, 24 Feb 2005 18:58:04 +0000 (18:58 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 24 Feb 2005 18:58:04 +0000 (13:58 -0500)
* tree-ssa-ccp.c (visit_assignment): Verify that result of
VIEW_CONVERT_EXPR is_gimple_min_invariant.

From-SVN: r95510

gcc/ChangeLog
gcc/tree-ssa-ccp.c

index cdc567124ef104bfa7e9c25215d1630852891d77..7677cf84bc8a537d98c01fcf1c7c984841c341f6 100644 (file)
@@ -1,5 +1,8 @@
 2005-02-24  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * tree-ssa-ccp.c (visit_assignment): Verify that result of
+       VIEW_CONVERT_EXPR is_gimple_min_invariant.
+
        * print-tree.c (print_node_brief): Print LABEL_DECL_UID.
        (print_node): Likewise.
        Print TYPE_SIZES_GIMPLIFIED.
index 211a484b8a93d419d9b45fba363fa081fcc78744..b255020917f73edcad366dc1d9850a6dcb319d3f 100644 (file)
@@ -1060,9 +1060,7 @@ visit_assignment (tree stmt, tree *output_p)
       val = evaluate_stmt (stmt);
 
   /* If the original LHS was a VIEW_CONVERT_EXPR, modify the constant
-     value to be a VIEW_CONVERT_EXPR of the old constant value.  This is
-     valid because a VIEW_CONVERT_EXPR is valid everywhere an operand of
-     aggregate type is valid.
+     value to be a VIEW_CONVERT_EXPR of the old constant value.
 
      ??? Also, if this was a definition of a bitfield, we need to widen
      the constant value into the type of the destination variable.  This
@@ -1073,10 +1071,18 @@ visit_assignment (tree stmt, tree *output_p)
     if (TREE_CODE (orig_lhs) == VIEW_CONVERT_EXPR
        && val.lattice_val == CONSTANT)
       {
-       val.const_val = build1 (VIEW_CONVERT_EXPR,
-                               TREE_TYPE (TREE_OPERAND (orig_lhs, 0)),
-                               val.const_val);
+       tree w = fold (build1 (VIEW_CONVERT_EXPR,
+                              TREE_TYPE (TREE_OPERAND (orig_lhs, 0)),
+                              val.const_val));
+
        orig_lhs = TREE_OPERAND (orig_lhs, 1);
+       if (w && is_gimple_min_invariant (w))
+         val.const_val = w;
+       else
+         {
+           val.lattice_val = VARYING;
+           val.const_val = NULL;
+         }
       }
 
     if (val.lattice_val == CONSTANT