aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/gimple-expr.c4
-rw-r--r--gcc/gimple-expr.h10
-rw-r--r--gcc/gimple.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr70177.c15
-rw-r--r--gcc/tree-ssa-forwprop.c2
-rw-r--r--gcc/tree-ssa-loop-niter.c4
8 files changed, 46 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2014d7f..d39d197 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,17 @@
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70177
+ * gimple-expr.h (extract_ops_from_tree_1): Renamed to ...
+ (extract_ops_from_tree): ... this. In the 2 argument
+ overload remove _1 suffix.
+ * gimple-expr.c (extract_ops_from_tree_1): Renamed to ...
+ (extract_ops_from_tree): ... this.
+ * gimple.c (gimple_build_assign, gimple_assign_set_rhs_from_tree):
+ Adjust callers.
+ * tree-ssa-loop-niter.c (derive_constant_upper_bound): Likewise.
+ * tree-ssa-forwprop.c (defcodefor_name): Call 3 operand
+ extract_ops_from_tree instead of 2 operand one.
+
2016-03-11 Alan Lawrence <alan.lawrence@arm.com>
PR tree-optimization/70013
diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c
index 15bef7f..29e9c0a 100644
--- a/gcc/gimple-expr.c
+++ b/gcc/gimple-expr.c
@@ -519,8 +519,8 @@ create_tmp_reg_fn (struct function *fn, tree type, const char *prefix)
*OP1_P, *OP2_P and *OP3_P respectively. */
void
-extract_ops_from_tree_1 (tree expr, enum tree_code *subcode_p, tree *op1_p,
- tree *op2_p, tree *op3_p)
+extract_ops_from_tree (tree expr, enum tree_code *subcode_p, tree *op1_p,
+ tree *op2_p, tree *op3_p)
{
enum gimple_rhs_class grhs_class;
diff --git a/gcc/gimple-expr.h b/gcc/gimple-expr.h
index 7f9c90d..f2ccd29 100644
--- a/gcc/gimple-expr.h
+++ b/gcc/gimple-expr.h
@@ -35,8 +35,8 @@ extern tree create_tmp_reg (tree, const char * = NULL);
extern tree create_tmp_reg_fn (struct function *, tree, const char *);
-extern void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *,
- tree *);
+extern void extract_ops_from_tree (tree, enum tree_code *, tree *, tree *,
+ tree *);
extern void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *,
tree *);
extern bool is_gimple_lvalue (tree);
@@ -146,15 +146,15 @@ is_gimple_constant (const_tree t)
}
}
-/* A wrapper around extract_ops_from_tree_1, for callers which expect
- to see only a maximum of two operands. */
+/* A wrapper around extract_ops_from_tree with 3 ops, for callers which
+ expect to see only a maximum of two operands. */
static inline void
extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0,
tree *op1)
{
tree op2;
- extract_ops_from_tree_1 (expr, code, op0, op1, &op2);
+ extract_ops_from_tree (expr, code, op0, op1, &op2);
gcc_assert (op2 == NULL_TREE);
}
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 850e546..b0e19d5 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -387,7 +387,7 @@ gimple_build_assign (tree lhs, tree rhs MEM_STAT_DECL)
enum tree_code subcode;
tree op1, op2, op3;
- extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
+ extract_ops_from_tree (rhs, &subcode, &op1, &op2, &op3);
return gimple_build_assign (lhs, subcode, op1, op2, op3 PASS_MEM_STAT);
}
@@ -1578,7 +1578,7 @@ gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *gsi, tree expr)
enum tree_code subcode;
tree op1, op2, op3;
- extract_ops_from_tree_1 (expr, &subcode, &op1, &op2, &op3);
+ extract_ops_from_tree (expr, &subcode, &op1, &op2, &op3);
gimple_assign_set_rhs_with_ops (gsi, subcode, op1, op2, op3);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cc3ad50..c6ec930 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/70177
+ * gcc.dg/pr70177.c: New test.
+
2016-03-11 Alan Lawrence <alan.lawrence@arm.com>
* gfortran.dg/unconstrained_commons.f: Widen regexp to match j_<N>.
diff --git a/gcc/testsuite/gcc.dg/pr70177.c b/gcc/testsuite/gcc.dg/pr70177.c
new file mode 100644
index 0000000..1b2bec1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr70177.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/70177 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int b[128];
+
+void
+foo (int i, int j)
+{
+ int c, f, g, h;
+ for (g = 0; g < 64; g++)
+ for (h = g, f = 0; f <= i; f++, h++)
+ for (c = 0; c < j; c++)
+ b[h] = 0;
+}
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 6575d50..f64ee0a 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -1477,7 +1477,7 @@ defcodefor_name (tree name, enum tree_code *code, tree *arg1, tree *arg2)
|| GIMPLE_BINARY_RHS
|| GIMPLE_UNARY_RHS
|| GIMPLE_SINGLE_RHS)
- extract_ops_from_tree_1 (name, &code1, &arg11, &arg21, &arg31);
+ extract_ops_from_tree (name, &code1, &arg11, &arg21, &arg31);
*code = code1;
*arg1 = arg11;
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 43632ed..81689fc 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2742,9 +2742,9 @@ static widest_int
derive_constant_upper_bound (tree val)
{
enum tree_code code;
- tree op0, op1;
+ tree op0, op1, op2;
- extract_ops_from_tree (val, &code, &op0, &op1);
+ extract_ops_from_tree (val, &code, &op0, &op1, &op2);
return derive_constant_upper_bound_ops (TREE_TYPE (val), op0, code, op1);
}