]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-forwprop.c (simplify_bitfield_ref): Call get_prop_source_stmt.
authorMarc Glisse <marc.glisse@inria.fr>
Fri, 14 Sep 2012 11:25:09 +0000 (13:25 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Fri, 14 Sep 2012 11:25:09 +0000 (11:25 +0000)
2012-09-14  Marc Glisse  <marc.glisse@inria.fr>

* tree-ssa-forwprop.c (simplify_bitfield_ref): Call
get_prop_source_stmt.
(simplify_permutation): Likewise.
(simplify_vector_constructor): Likewise.

From-SVN: r191292

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

index 91a9033ba1749691119e2b17aacfdc20a040b604..2ba65e53422b8f581324d670a2555045e94939fe 100644 (file)
@@ -1,3 +1,10 @@
+2012-09-14  Marc Glisse  <marc.glisse@inria.fr>
+
+       * tree-ssa-forwprop.c (simplify_bitfield_ref): Call
+       get_prop_source_stmt.
+       (simplify_permutation): Likewise.
+       (simplify_vector_constructor): Likewise.
+
 2012-09-14  Richard Guenther  <rguenther@suse.de>
 
        * builtin-types.def (BT_FN_CONST_STRING): Add.
index ad407269dd7a2128cdf45132db1857e30b023147..2d17bfa4d2f1b756c3f7b53b28daf7eb176b3ea2 100644 (file)
@@ -2606,9 +2606,8 @@ simplify_bitfield_ref (gimple_stmt_iterator *gsi)
   if (n != 1)
     return false;
 
-  def_stmt = SSA_NAME_DEF_STMT (op0);
-  if (!def_stmt || !is_gimple_assign (def_stmt)
-      || !can_propagate_from (def_stmt))
+  def_stmt = get_prop_source_stmt (op0, false, NULL);
+  if (!def_stmt || !can_propagate_from (def_stmt))
     return false;
 
   op2 = TREE_OPERAND (op, 2);
@@ -2637,7 +2636,7 @@ simplify_bitfield_ref (gimple_stmt_iterator *gsi)
        }
       index = build_int_cst (TREE_TYPE (TREE_TYPE (m)), idx * size);
       tem = build3 (BIT_FIELD_REF, TREE_TYPE (op),
-                        unshare_expr (p), op1, index);
+                   unshare_expr (p), op1, index);
       gimple_assign_set_rhs1 (stmt, tem);
       fold_stmt (gsi);
       update_stmt (gsi_stmt (*gsi));
@@ -2689,6 +2688,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
   gimple def_stmt;
   tree op0, op1, op2, op3, arg0, arg1;
   enum tree_code code;
+  bool single_use_op0 = false;
 
   gcc_checking_assert (gimple_assign_rhs_code (stmt) == VEC_PERM_EXPR);
 
@@ -2706,9 +2706,8 @@ simplify_permutation (gimple_stmt_iterator *gsi)
     }
   else if (TREE_CODE (op0) == SSA_NAME)
     {
-      def_stmt = SSA_NAME_DEF_STMT (op0);
-      if (!def_stmt || !is_gimple_assign (def_stmt)
-         || !can_propagate_from (def_stmt))
+      def_stmt = get_prop_source_stmt (op0, false, &single_use_op0);
+      if (!def_stmt || !can_propagate_from (def_stmt))
        return 0;
 
       code = gimple_assign_rhs_code (def_stmt);
@@ -2747,7 +2746,7 @@ simplify_permutation (gimple_stmt_iterator *gsi)
       bool ret = false;
       if (op0 != op1)
        {
-         if (TREE_CODE (op0) == SSA_NAME && !has_single_use (op0))
+         if (TREE_CODE (op0) == SSA_NAME && !single_use_op0)
            return 0;
 
          if (TREE_CODE (op1) == VECTOR_CST)
@@ -2756,12 +2755,8 @@ simplify_permutation (gimple_stmt_iterator *gsi)
            {
              enum tree_code code2;
 
-             if (!has_single_use (op1))
-               return 0;
-
-             gimple def_stmt2 = SSA_NAME_DEF_STMT (op1);
-             if (!def_stmt2 || !is_gimple_assign (def_stmt2)
-                 || !can_propagate_from (def_stmt2))
+             gimple def_stmt2 = get_prop_source_stmt (op1, true, NULL);
+             if (!def_stmt2 || !can_propagate_from (def_stmt2))
                return 0;
 
              code2 = gimple_assign_rhs_code (def_stmt2);
@@ -2831,8 +2826,8 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
 
       if (TREE_CODE (elt->value) != SSA_NAME)
        return false;
-      def_stmt = SSA_NAME_DEF_STMT (elt->value);
-      if (!def_stmt || !is_gimple_assign (def_stmt))
+      def_stmt = get_prop_source_stmt (elt->value, false, NULL);
+      if (!def_stmt)
        return false;
       code = gimple_assign_rhs_code (def_stmt);
       if (code != BIT_FIELD_REF)