aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-forwprop.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-09-14 11:25:09 +0000
committerMarc Glisse <marc.glisse@inria.fr>2012-09-14 11:25:09 +0000
commit0f32251c4a984cb1b2b7a267d91e2b1859c33d25 (patch)
tree758efd5f6875b115f67d1d6b491fafa05c626e2c /gcc/tree-ssa-forwprop.c
parent2a9100f02f149ca34302d2f49e16849c62be7dba (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.c27
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)