tree-ssa-pre.c (get_sccvn_value): Create missing VNs via vn_lookup_or_add.
authorRichard Guenther <rguenther@suse.de>
Fri, 29 Feb 2008 14:01:09 +0000 (14:01 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 29 Feb 2008 14:01:09 +0000 (14:01 +0000)
2008-02-29  Richard Guenther  <rguenther@suse.de>

* tree-ssa-pre.c (get_sccvn_value): Create missing VNs via
vn_lookup_or_add.
* tree-ssa-sccnv.c (visit_reference_op_store): Use the rhs
value for comparing for a store match.
(simplify_unary_expression): Do nothing for SSA_NAMEs.
(try_to_simplify): Do not do a full-blown reference lookup.

From-SVN: r132768

gcc/ChangeLog
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c

index 4563e5290371fe7315645c3af0072be20a2dee43..5094c331a94fd387510cc0c5af39b23011574435 100644 (file)
@@ -1,3 +1,12 @@
+2008-02-29  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-pre.c (get_sccvn_value): Create missing VNs via
+       vn_lookup_or_add.
+       * tree-ssa-sccnv.c (visit_reference_op_store): Use the rhs
+       value for comparing for a store match.
+       (simplify_unary_expression): Do nothing for SSA_NAMEs.
+       (try_to_simplify): Do not do a full-blown reference lookup.
+
 2008-02-29  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * config/sh/sh.c (sh_scalar_mode_supported_p): New function.
index 6a06b2a80047f56545328b5a72178482f7348676..a488257fdd4aa73ff39111b896d09d5f055eec7e 100644 (file)
@@ -3256,7 +3256,9 @@ get_sccvn_value (tree name)
                !ZERO_SSA_OPERANDS (defstmt2, SSA_OP_ALL_VIRTUALS))
              gcc_assert (defstmt);
          }
-         valvh = vn_lookup_or_add_with_stmt (val, defstmt);
+         /* We lookup with the LHS, so do not use vn_lookup_or_add_with_stmt
+            here, as that will result in useless reference lookups.  */
+         valvh = vn_lookup_or_add (val);
        }
 
       if (dump_file && (dump_flags & TDF_DETAILS))
index 2030a81c438d45ec041568435ffe0eb3a43dfde9..929354e763d3699b4817d350e8c106a4be6b3790 100644 (file)
@@ -1231,6 +1231,8 @@ visit_reference_op_store (tree lhs, tree op, tree stmt)
     {
       if (TREE_CODE (result) == SSA_NAME)
        result = SSA_VAL (result);
+      if (TREE_CODE (op) == SSA_NAME)
+       op = SSA_VAL (op);
       resultsame = expressions_equal_p (result, op);
     }
 
@@ -1527,13 +1529,10 @@ simplify_unary_expression (tree rhs)
 static tree
 try_to_simplify (tree stmt, tree rhs)
 {
+  /* For stores we can end up simplifying a SSA_NAME rhs.  Just return
+     in this case, there is no point in doing extra work.  */
   if (TREE_CODE (rhs) == SSA_NAME)
-    {
-      if (is_gimple_min_invariant (SSA_VAL (rhs)))
-       return SSA_VAL (rhs);
-      else if (VN_INFO (rhs)->has_constants)
-       return VN_INFO (rhs)->expr;
-    }
+    return rhs;
   else
     {
       switch (TREE_CODE_CLASS (TREE_CODE (rhs)))
@@ -1550,13 +1549,11 @@ try_to_simplify (tree stmt, tree rhs)
 
            /* Fallthrough. */
        case tcc_reference:
-         {
-           tree result = vn_reference_lookup (rhs,
-                                              shared_vuses_from_stmt (stmt));
-           if (result)
-             return result;
-         }
-         /* Fallthrough for some codes.  */
+         /* Do not do full-blown reference lookup here.
+            ???  But like for tcc_declaration, we should simplify
+                 from constant initializers.  */
+
+         /* Fallthrough for some codes that can operate on registers.  */
          if (!(TREE_CODE (rhs) == REALPART_EXPR
                || TREE_CODE (rhs) == IMAGPART_EXPR))
            break;