gcc/ChangeLog.gimple-classes: * gimple-fold.h (rewrite_to_defined_overflow): Strengthen from gimple to gassign *. * gimple-fold.c (rewrite_to_defined_overflow): Likewise. * tree-scalar-evolution.c (scev_const_prop): Replace is_gimple_assign with a dyn_cast, introducing local "assign_stmt" and using it in place of "stmt" for typesafety. * tree-ssa-loop-im.c (move_computations_dom_walker::before_dom_children): Likewise. --- gcc/ChangeLog.gimple-classes | 11 +++++++++++ gcc/gimple-fold.c | 2 +- gcc/gimple-fold.h | 2 +- gcc/tree-scalar-evolution.c | 7 ++++--- gcc/tree-ssa-loop-im.c | 12 +++++++----- 5 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes index be9aa76..c766c36 100644 --- a/gcc/ChangeLog.gimple-classes +++ b/gcc/ChangeLog.gimple-classes @@ -1,5 +1,16 @@ 2014-11-03 David Malcolm <dmalc...@redhat.com> + * gimple-fold.h (rewrite_to_defined_overflow): Strengthen from + gimple to gassign *. + * gimple-fold.c (rewrite_to_defined_overflow): Likewise. + * tree-scalar-evolution.c (scev_const_prop): Replace + is_gimple_assign with a dyn_cast, introducing local "assign_stmt" + and using it in place of "stmt" for typesafety. + * tree-ssa-loop-im.c + (move_computations_dom_walker::before_dom_children): Likewise. + +2014-11-03 David Malcolm <dmalc...@redhat.com> + * gimple-fold.c (fold_gimple_assign): Strengthen local "stmt" from gimple to gassign * via a checked cast. (gsi_replace_with_seq_vops): Add a checked cast within region diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 3b85686..708be05 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -5503,7 +5503,7 @@ arith_code_with_undefined_signed_overflow (tree_code code) a modified form of STMT itself. */ gimple_seq -rewrite_to_defined_overflow (gimple stmt) +rewrite_to_defined_overflow (gassign *stmt) { if (dump_file && (dump_flags & TDF_DETAILS)) { diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 39c53ff..51d0225 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -45,7 +45,7 @@ extern tree gimple_get_virt_method_for_vtable (HOST_WIDE_INT, tree, extern bool gimple_val_nonnegative_real_p (tree); extern tree gimple_fold_indirect_ref (tree); extern bool arith_code_with_undefined_signed_overflow (tree_code); -extern gimple_seq rewrite_to_defined_overflow (gimple); +extern gimple_seq rewrite_to_defined_overflow (gassign *); /* gimple_build, functionally matching fold_buildN, outputs stmts int the provided sequence, matching and simplifying them on-the-fly. diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 38b0767..5c8767c 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -3518,13 +3518,14 @@ scev_const_prop (void) { gimple stmt = gsi_stmt (gsi2); gimple_stmt_iterator gsi3 = gsi2; + gassign *assign_stmt; gsi_next (&gsi2); gsi_remove (&gsi3, false); - if (is_gimple_assign (stmt) + if ((assign_stmt = dyn_cast <gassign *> (stmt)) && arith_code_with_undefined_signed_overflow - (gimple_assign_rhs_code (stmt))) + (gimple_assign_rhs_code (assign_stmt))) gsi_insert_seq_before (&gsi, - rewrite_to_defined_overflow (stmt), + rewrite_to_defined_overflow (assign_stmt), GSI_SAME_STMT); else gsi_insert_before (&gsi, stmt, GSI_SAME_STMT); diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index cb0ce4b..9fa556e 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -1244,6 +1244,7 @@ move_computations_dom_walker::before_dom_children (basic_block bb) edge e; gimple stmt = gsi_stmt (bsi); + gassign *assign_stmt; lim_data = get_lim_data (stmt); if (lim_data == NULL) @@ -1298,15 +1299,16 @@ move_computations_dom_walker::before_dom_children (basic_block bb) when the target loop header is executed and the stmt may invoke undefined integer or pointer overflow rewrite it to unsigned arithmetic. */ - if (is_gimple_assign (stmt) - && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt))) - && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt))) + if ((assign_stmt = dyn_cast <gassign *> (stmt)) + && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (assign_stmt))) + && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE ( + gimple_assign_lhs (assign_stmt))) && arith_code_with_undefined_signed_overflow - (gimple_assign_rhs_code (stmt)) + (gimple_assign_rhs_code (assign_stmt)) && (!ALWAYS_EXECUTED_IN (bb) || !(ALWAYS_EXECUTED_IN (bb) == level || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level)))) - gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt)); + gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (assign_stmt)); else gsi_insert_on_edge (e, stmt); } -- 1.7.11.7