From: Richard Guenther Date: Wed, 21 Jun 2006 08:11:28 +0000 (+0000) Subject: tree-ssa-loop-niter.c (simplify_using_initial_conditions): Limit iteration over the... X-Git-Tag: releases/gcc-4.2.0~2348 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b16fb82dac5eea61c804fa8538ea4d1600f0a919;p=thirdparty%2Fgcc.git tree-ssa-loop-niter.c (simplify_using_initial_conditions): Limit iteration over the dominators. 2006-06-21 Richrad Guenther * tree-ssa-loop-niter.c (simplify_using_initial_conditions): Limit iteration over the dominators. From-SVN: r114840 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de72952f56c4..9b190b48694b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-06-21 Richrad Guenther + + * tree-ssa-loop-niter.c (simplify_using_initial_conditions): + Limit iteration over the dominators. + 2006-06-20 Roger Sayle * config/mips/iris6.h (LIB_SPEC): Add support for -pthread. diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index a896d0327418..9428dd6a3aab 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -886,7 +886,12 @@ tree_simplify_using_condition (tree cond, tree expr) return tree_simplify_using_condition_1 (cond, expr); } - + +/* The maximum number of dominator BBs we search for conditions + of loop header copies we use for simplifying a conditional + expression. */ +#define MAX_DOMINATORS_TO_WALK 8 + /* Tries to simplify EXPR using the conditions on entry to LOOP. Record the conditions used for simplification to CONDS_USED. Returns the simplified expression (or EXPR unchanged, if no @@ -899,12 +904,16 @@ simplify_using_initial_conditions (struct loop *loop, tree expr, edge e; basic_block bb; tree exp, cond; + int cnt = 0; if (TREE_CODE (expr) == INTEGER_CST) return expr; + /* Limit walking the dominators to avoid quadraticness in + the number of BBs times the number of loops in degenerate + cases. */ for (bb = loop->header; - bb != ENTRY_BLOCK_PTR; + bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK; bb = get_immediate_dominator (CDI_DOMINATORS, bb)) { if (!single_pred_p (bb)) @@ -926,6 +935,7 @@ simplify_using_initial_conditions (struct loop *loop, tree expr, cond); expr = exp; + ++cnt; } return expr;