diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-09-14 11:25:09 +0000 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2012-09-14 11:25:09 +0000 |
commit | 0f32251c4a984cb1b2b7a267d91e2b1859c33d25 (patch) | |
tree | 758efd5f6875b115f67d1d6b491fafa05c626e2c /gcc/tree-ssa-forwprop.c | |
parent | 2a9100f02f149ca34302d2f49e16849c62be7dba (diff) |
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.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@191292 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-forwprop.c')
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 27 |
1 files changed, 11 insertions, 16 deletions
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) |