summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2006-03-10 01:22:54 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-03-09 17:22:54 -0800
commit3e0a08d7115f4623f580e111230561a5740c4c18 (patch)
tree41090d7b945a287821c1684a417efe538999f9bd
parent0ade2ddf23d75245e4e9f0783604ece21a12be79 (diff)
downloadgcc-3e0a08d7115f4623f580e111230561a5740c4c18.tar.gz
tree-ssa-phiopt.c (tree_ssa_phiopt): Add cfgchanged variable.
2006-03-09 Andrew Pinski <pinskia@physics.uc.edu> * 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) <todo_flags_finish>: Remove TODO_cleanup_cfg. From-SVN: r111920
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-ssa-phiopt.c18
2 files changed, 17 insertions, 8 deletions
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 <pinskia@physics.uc.edu>
+
+ * 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) <todo_flags_finish>: Remove TODO_cleanup_cfg.
+
2006-03-09 Adam Nemet <anemet@caviumnetworks.com>
* 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