Commit b16fb82d by Richard Guenther Committed by Richard Biener

tree-ssa-loop-niter.c (simplify_using_initial_conditions): Limit iteration over the dominators.

2006-06-21  Richrad Guenther  <rguenther@suse.de>

	* tree-ssa-loop-niter.c (simplify_using_initial_conditions):
	Limit iteration over the dominators.

From-SVN: r114840
parent 470145e7
2006-06-21 Richrad Guenther <rguenther@suse.de>
* tree-ssa-loop-niter.c (simplify_using_initial_conditions):
Limit iteration over the dominators.
2006-06-20 Roger Sayle <roger@eyesopen.com> 2006-06-20 Roger Sayle <roger@eyesopen.com>
* config/mips/iris6.h (LIB_SPEC): Add support for -pthread. * config/mips/iris6.h (LIB_SPEC): Add support for -pthread.
......
...@@ -886,7 +886,12 @@ tree_simplify_using_condition (tree cond, tree expr) ...@@ -886,7 +886,12 @@ tree_simplify_using_condition (tree cond, tree expr)
return tree_simplify_using_condition_1 (cond, 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. /* Tries to simplify EXPR using the conditions on entry to LOOP.
Record the conditions used for simplification to CONDS_USED. Record the conditions used for simplification to CONDS_USED.
Returns the simplified expression (or EXPR unchanged, if no Returns the simplified expression (or EXPR unchanged, if no
...@@ -899,12 +904,16 @@ simplify_using_initial_conditions (struct loop *loop, tree expr, ...@@ -899,12 +904,16 @@ simplify_using_initial_conditions (struct loop *loop, tree expr,
edge e; edge e;
basic_block bb; basic_block bb;
tree exp, cond; tree exp, cond;
int cnt = 0;
if (TREE_CODE (expr) == INTEGER_CST) if (TREE_CODE (expr) == INTEGER_CST)
return expr; 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; for (bb = loop->header;
bb != ENTRY_BLOCK_PTR; bb != ENTRY_BLOCK_PTR && cnt < MAX_DOMINATORS_TO_WALK;
bb = get_immediate_dominator (CDI_DOMINATORS, bb)) bb = get_immediate_dominator (CDI_DOMINATORS, bb))
{ {
if (!single_pred_p (bb)) if (!single_pred_p (bb))
...@@ -926,6 +935,7 @@ simplify_using_initial_conditions (struct loop *loop, tree expr, ...@@ -926,6 +935,7 @@ simplify_using_initial_conditions (struct loop *loop, tree expr,
cond); cond);
expr = exp; expr = exp;
++cnt;
} }
return expr; return expr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment