From 99e6bdda90bc96029f692df81028dcdaa65e3dea Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 18 Jun 2005 23:35:52 -0700 Subject: [PATCH] tree-complex.c (init_dont_simulate_again): Clear DONT_SIMULATE_AGAIN for control-altering statements; set it again for returns. * tree-complex.c (init_dont_simulate_again): Clear DONT_SIMULATE_AGAIN for control-altering statements; set it again for returns. (complex_visit_stmt): Return SSA_PROP_VARYING for stmts that are not MODIFY_EXPR. From-SVN: r101178 --- gcc/ChangeLog | 7 +++++++ gcc/tree-complex.c | 19 +++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 293b0a5..6e25cbb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2005-06-18 Richard Henderson + * tree-complex.c (init_dont_simulate_again): Clear DONT_SIMULATE_AGAIN + for control-altering statements; set it again for returns. + (complex_visit_stmt): Return SSA_PROP_VARYING for stmts that are + not MODIFY_EXPR. + +2005-06-18 Richard Henderson + PR tree-opt/22116 * tree-ssa-pre.c (create_expression_by_pieces): Set DECL_COMPLEX_GIMPLE_REG_P. diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c index a3470b1..f949633 100644 --- a/gcc/tree-complex.c +++ b/gcc/tree-complex.c @@ -160,12 +160,20 @@ init_dont_simulate_again (void) for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { tree orig_stmt, stmt, rhs = NULL; - bool dsa = true; + bool dsa; orig_stmt = stmt = bsi_stmt (bsi); + + /* Most control-altering statements must be initially + simulated, else we won't cover the entire cfg. */ + dsa = !stmt_ends_bb_p (stmt); + switch (TREE_CODE (stmt)) { case RETURN_EXPR: + /* We don't care what the lattice value of is, + since it's never used as an input to another computation. */ + dsa = true; stmt = TREE_OPERAND (stmt, 0); if (!stmt || TREE_CODE (stmt) != MODIFY_EXPR) break; @@ -228,15 +236,14 @@ complex_visit_stmt (tree stmt, edge *taken_edge_p ATTRIBUTE_UNUSED, unsigned int ver; tree lhs, rhs; - /* These conditions should be satisfied due to the initial filter - set up in init_dont_simulate_again. */ - if (TREE_CODE (stmt) == RETURN_EXPR) - stmt = TREE_OPERAND (stmt, 0); - gcc_assert (TREE_CODE (stmt) == MODIFY_EXPR); + if (TREE_CODE (stmt) != MODIFY_EXPR) + return SSA_PROP_VARYING; lhs = TREE_OPERAND (stmt, 0); rhs = TREE_OPERAND (stmt, 1); + /* These conditions should be satisfied due to the initial filter + set up in init_dont_simulate_again. */ gcc_assert (TREE_CODE (lhs) == SSA_NAME); gcc_assert (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE); -- 2.7.4