OSDN Git Service

2011-09-06 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Sep 2011 10:45:09 +0000 (10:45 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Sep 2011 10:45:09 +0000 (10:45 +0000)
* tree-ssa-sccvn.c (visit_use): CSE stmt pieces and simplify
matching.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178584 138bc75d-0d04-0410-961f-82ee72b054a4

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

index a88e2dc..d1c5cee 100644 (file)
@@ -1,3 +1,8 @@
+2011-09-06  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-sccvn.c (visit_use): CSE stmt pieces and simplify
+       matching.
+
 2011-09-06  Tom de Vries  <tom@codesourcery.com>
 
        * recog.c (asm_labels_ok): New function.
index 4ccc0a2..e0d4ca9 100644 (file)
@@ -3043,16 +3043,17 @@ visit_use (tree use)
        changed = defs_to_varying (stmt);
       else if (is_gimple_assign (stmt))
        {
+         enum tree_code code = gimple_assign_rhs_code (stmt);
          tree lhs = gimple_assign_lhs (stmt);
+         tree rhs1 = gimple_assign_rhs1 (stmt);
          tree simplified;
 
          /* Shortcut for copies. Simplifying copies is pointless,
             since we copy the expression and value they represent.  */
-         if (gimple_assign_copy_p (stmt)
-             && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
+         if (code == SSA_NAME
              && TREE_CODE (lhs) == SSA_NAME)
            {
-             changed = visit_copy (lhs, gimple_assign_rhs1 (stmt));
+             changed = visit_copy (lhs, rhs1);
              goto done;
            }
          simplified = try_to_simplify (stmt);
@@ -3119,24 +3120,22 @@ visit_use (tree use)
               /* We can substitute SSA_NAMEs that are live over
                  abnormal edges with their constant value.  */
               && !(gimple_assign_copy_p (stmt)
-                   && is_gimple_min_invariant (gimple_assign_rhs1 (stmt)))
+                   && is_gimple_min_invariant (rhs1))
               && !(simplified
                    && is_gimple_min_invariant (simplified))
               && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
              /* Stores or copies from SSA_NAMEs that are live over
                 abnormal edges are a problem.  */
-             || (gimple_assign_single_p (stmt)
-                 && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
-                 && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_assign_rhs1 (stmt))))
+             || (code == SSA_NAME
+                 && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1)))
            changed = defs_to_varying (stmt);
-         else if (REFERENCE_CLASS_P (lhs) || DECL_P (lhs))
-           {
-             changed = visit_reference_op_store (lhs, gimple_assign_rhs1 (stmt), stmt);
-           }
+         else if (REFERENCE_CLASS_P (lhs)
+                  || DECL_P (lhs))
+           changed = visit_reference_op_store (lhs, rhs1, stmt);
          else if (TREE_CODE (lhs) == SSA_NAME)
            {
              if ((gimple_assign_copy_p (stmt)
-                  && is_gimple_min_invariant (gimple_assign_rhs1 (stmt)))
+                  && is_gimple_min_invariant (rhs1))
                  || (simplified
                      && is_gimple_min_invariant (simplified)))
                {
@@ -3144,11 +3143,11 @@ visit_use (tree use)
                  if (simplified)
                    changed = set_ssa_val_to (lhs, simplified);
                  else
-                   changed = set_ssa_val_to (lhs, gimple_assign_rhs1 (stmt));
+                   changed = set_ssa_val_to (lhs, rhs1);
                }
              else
                {
-                 switch (get_gimple_rhs_class (gimple_assign_rhs_code (stmt)))
+                 switch (get_gimple_rhs_class (code))
                    {
                    case GIMPLE_UNARY_RHS:
                    case GIMPLE_BINARY_RHS:
@@ -3156,25 +3155,24 @@ visit_use (tree use)
                      changed = visit_nary_op (lhs, stmt);
                      break;
                    case GIMPLE_SINGLE_RHS:
-                     switch (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)))
+                     switch (TREE_CODE_CLASS (code))
                        {
                        case tcc_reference:
                          /* VOP-less references can go through unary case.  */
-                         if ((gimple_assign_rhs_code (stmt) == REALPART_EXPR
-                              || gimple_assign_rhs_code (stmt) == IMAGPART_EXPR
-                              || gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR)
-                             && TREE_CODE (TREE_OPERAND (gimple_assign_rhs1 (stmt), 0)) == SSA_NAME)
+                         if ((code == REALPART_EXPR
+                              || code == IMAGPART_EXPR
+                              || code == VIEW_CONVERT_EXPR)
+                             && TREE_CODE (TREE_OPERAND (rhs1, 0)) == SSA_NAME)
                            {
                              changed = visit_nary_op (lhs, stmt);
                              break;
                            }
                          /* Fallthrough.  */
                        case tcc_declaration:
-                         changed = visit_reference_op_load
-                             (lhs, gimple_assign_rhs1 (stmt), stmt);
+                         changed = visit_reference_op_load (lhs, rhs1, stmt);
                          break;
                        case tcc_expression:
-                         if (gimple_assign_rhs_code (stmt) == ADDR_EXPR)
+                         if (code == ADDR_EXPR)
                            {
                              changed = visit_nary_op (lhs, stmt);
                              break;