Commit e5db3515 by Zdenek Dvorak Committed by Zdenek Dvorak

re PR tree-optimization/27548 (ICE: SSA corruption - Conflict across an abnormal edge)

	PR tree-optimization/27548
	* tree-scalar-evolution.c (scev_const_prop): Do not prolong life
	range of ssa names that appear on abnormal edges.
	* tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Export.
	* tree-flow.h (contains_abnormal_ssa_name_p): Declare.

From-SVN: r113853
parent 7bab4b90
2006-05-17 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/27548
* tree-scalar-evolution.c (scev_const_prop): Do not prolong life
range of ssa names that appear on abnormal edges.
* tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Export.
* tree-flow.h (contains_abnormal_ssa_name_p): Declare.
2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com> 2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com>
PR middle-end/27620 PR middle-end/27620
......
...@@ -842,6 +842,7 @@ bool can_unroll_loop_p (struct loop *loop, unsigned factor, ...@@ -842,6 +842,7 @@ bool can_unroll_loop_p (struct loop *loop, unsigned factor,
struct tree_niter_desc *niter); struct tree_niter_desc *niter);
void tree_unroll_loop (struct loops *, struct loop *, unsigned, void tree_unroll_loop (struct loops *, struct loop *, unsigned,
edge, struct tree_niter_desc *); edge, struct tree_niter_desc *);
bool contains_abnormal_ssa_name_p (tree);
/* In tree-ssa-threadedge.c */ /* In tree-ssa-threadedge.c */
extern bool potentially_threadable_block (basic_block); extern bool potentially_threadable_block (basic_block);
......
...@@ -2802,7 +2802,11 @@ scev_const_prop (void) ...@@ -2802,7 +2802,11 @@ scev_const_prop (void)
def = analyze_scalar_evolution_in_loop (ex_loop, loop, def, NULL); def = analyze_scalar_evolution_in_loop (ex_loop, loop, def, NULL);
def = compute_overall_effect_of_inner_loop (ex_loop, def); def = compute_overall_effect_of_inner_loop (ex_loop, def);
if (!tree_does_not_contain_chrecs (def) if (!tree_does_not_contain_chrecs (def)
|| chrec_contains_symbols_defined_in_loop (def, ex_loop->num)) || chrec_contains_symbols_defined_in_loop (def, ex_loop->num)
/* Moving the computation from the loop may prolong life range
of some ssa names, which may cause problems if they appear
on abnormal edges. */
|| contains_abnormal_ssa_name_p (def))
continue; continue;
/* Eliminate the phi node and replace it by a computation outside /* Eliminate the phi node and replace it by a computation outside
......
...@@ -678,7 +678,7 @@ idx_contains_abnormal_ssa_name_p (tree base, tree *index, ...@@ -678,7 +678,7 @@ idx_contains_abnormal_ssa_name_p (tree base, tree *index,
/* Returns true if EXPR contains a ssa name that occurs in an /* Returns true if EXPR contains a ssa name that occurs in an
abnormal phi node. */ abnormal phi node. */
static bool bool
contains_abnormal_ssa_name_p (tree expr) contains_abnormal_ssa_name_p (tree expr)
{ {
enum tree_code code; enum tree_code code;
......
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