diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-09-14 13:25:09 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2012-09-14 11:25:09 +0000 |
commit | 3ebd25e11b571812971df97c1c589a64f94634a6 (patch) | |
tree | 758efd5f6875b115f67d1d6b491fafa05c626e2c | |
parent | f79cc861cfdb5fd3303e71d2dc7ef410759d8780 (diff) | |
download | gcc-3ebd25e11b571812971df97c1c589a64f94634a6.tar.gz |
tree-ssa-forwprop.c (simplify_bitfield_ref): Call get_prop_source_stmt.
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 27 |
2 files changed, 18 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91a9033ba17..2ba65e53422 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index ad407269dd7..2d17bfa4d2f 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -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) |