summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-09-14 13:25:09 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2012-09-14 11:25:09 +0000
commit3ebd25e11b571812971df97c1c589a64f94634a6 (patch)
tree758efd5f6875b115f67d1d6b491fafa05c626e2c
parentf79cc861cfdb5fd3303e71d2dc7ef410759d8780 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/tree-ssa-forwprop.c27
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)