diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d545ac42c14..eeb0febb311 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-03-09 Andrew Pinski + + * tree-ssa-phiopt.c (tree_ssa_phiopt): Add cfgchanged variable. + Set it when one of the replacement functions returned true. + Return TODO_cleanup_cfg if cfgchanged is true. + (pass_phiopt) : Remove TODO_cleanup_cfg. + 2006-03-09 Adam Nemet * combine.c (simplify_shift_const_1): Use gen_lowpart_or_truncate diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index ff96065eb41..a0059919650 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -139,6 +139,7 @@ tree_ssa_phiopt (void) basic_block bb; basic_block *bb_order; unsigned n, i; + bool cfgchanged = false; /* Search every basic block for COND_EXPR we may be able to optimize. @@ -227,17 +228,19 @@ tree_ssa_phiopt (void) /* Do the replacement of conditional if it can be done. */ if (conditional_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) - ; + cfgchanged = true; else if (value_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) - ; + cfgchanged = true; else if (abs_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) - ; - else - minmax_replacement (bb, bb1, e1, e2, phi, arg0, arg1); + cfgchanged = true; + else if (minmax_replacement (bb, bb1, e1, e2, phi, arg0, arg1)) + cfgchanged = true; } free (bb_order); - return 0; + + /* If the CFG has changed, we should cleanup the CFG. */ + return cfgchanged ? TODO_cleanup_cfg : 0; } /* Returns the list of basic blocks in the function in an order that guarantees @@ -1010,8 +1013,7 @@ struct tree_opt_pass pass_phiopt = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_cleanup_cfg - | TODO_dump_func + TODO_dump_func | TODO_ggc_collect | TODO_verify_ssa | TODO_verify_flow