aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-loop-niter.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index acaea11..10137d6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2018-07-06 Kugan Vivekanandarajah <kuganv@linaro.org>
+ * tree-ssa-loop-niter.c (number_of_iterations_popcount): If popcount
+ argument is checked for zero before entering loop, avoid checking again.
+
+2018-07-06 Kugan Vivekanandarajah <kuganv@linaro.org>
+
* gimplify.h (generic_expr_could_trap_p): Set as global function.
* gimplify.h (generic_expr_could_trap_p): Likwise.
* tree-scalar-evolution.c (expression_expensive_p): Handle COND_EXPR.
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 03588a0..f6fa2f7 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -2596,10 +2596,15 @@ number_of_iterations_popcount (loop_p loop, edge exit,
niter->niter = iter;
niter->assumptions = boolean_true_node;
+
if (adjust)
- niter->may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
+ {
+ tree may_be_zero = fold_build2 (EQ_EXPR, boolean_type_node, src,
build_zero_cst
(TREE_TYPE (src)));
+ niter->may_be_zero =
+ simplify_using_initial_conditions (loop, may_be_zero);
+ }
else
niter->may_be_zero = boolean_false_node;