gcc/ChangeLog.gimple-classes: * tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Strengthen param "stmt" from gimple to gassign *. (follow_ssa_edge): Add checked cast within case GIMPLE_ASSIGN. (interpret_rhs_expr): Replace is_gimple_assign with a dyn_cast, strengthening local "def" from gimple to gassign *. (interpret_gimple_assign): Strengthen param "stmt" from gimple to gassign *. (analyze_scalar_evolution_1): Add checked cast within case GIMPLE_ASSIGN. --- gcc/ChangeLog.gimple-classes | 12 ++++++++++++ gcc/tree-scalar-evolution.c | 15 ++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes index 45fe6ed..f799570 100644 --- a/gcc/ChangeLog.gimple-classes +++ b/gcc/ChangeLog.gimple-classes @@ -1,5 +1,17 @@ 2014-11-06 David Malcolm <dmalc...@redhat.com> + * tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Strengthen + param "stmt" from gimple to gassign *. + (follow_ssa_edge): Add checked cast within case GIMPLE_ASSIGN. + (interpret_rhs_expr): Replace is_gimple_assign with a dyn_cast, + strengthening local "def" from gimple to gassign *. + (interpret_gimple_assign): Strengthen param "stmt" from gimple to + gassign *. + (analyze_scalar_evolution_1): Add checked cast within case + GIMPLE_ASSIGN. + +2014-11-06 David Malcolm <dmalc...@redhat.com> + * tree-predcom.c (name_for_ref): Replace is_gimple_assign with a dyn_cast, introducing local gassign * "ref_assign", using it place of ref->stmt for typesafety. diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 5c8767c..d5a7bfd 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -1150,7 +1150,7 @@ follow_ssa_edge_expr (struct loop *loop, gimple at_stmt, tree expr, Return true if the strongly connected component has been found. */ static t_bool -follow_ssa_edge_in_rhs (struct loop *loop, gimple stmt, +follow_ssa_edge_in_rhs (struct loop *loop, gassign *stmt, gphi *halting_phi, tree *evolution_of_loop, int limit) { @@ -1388,7 +1388,8 @@ follow_ssa_edge (struct loop *loop, gimple def, gphi *halting_phi, return t_false; case GIMPLE_ASSIGN: - return follow_ssa_edge_in_rhs (loop, def, halting_phi, + return follow_ssa_edge_in_rhs (loop, as_a <gassign *> (def), + halting_phi, evolution_of_loop, limit); default: @@ -1716,7 +1717,7 @@ interpret_rhs_expr (struct loop *loop, gimple at_stmt, tree type, tree rhs1, enum tree_code code, tree rhs2) { tree res, chrec1, chrec2; - gimple def; + gassign *def; if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS) { @@ -1866,8 +1867,8 @@ interpret_rhs_expr (struct loop *loop, gimple at_stmt, && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (rhs1)) && TYPE_OVERFLOW_UNDEFINED (type) && TREE_CODE (rhs1) == SSA_NAME - && (def = SSA_NAME_DEF_STMT (rhs1)) - && is_gimple_assign (def) + && (SSA_NAME_DEF_STMT (rhs1)) + && (def = dyn_cast <gassign *> (SSA_NAME_DEF_STMT (rhs1))) && TREE_CODE_CLASS (gimple_assign_rhs_code (def)) == tcc_binary && TREE_CODE (gimple_assign_rhs2 (def)) == INTEGER_CST) { @@ -1914,7 +1915,7 @@ interpret_expr (struct loop *loop, gimple at_stmt, tree expr) /* Interpret the rhs of the assignment STMT. */ static tree -interpret_gimple_assign (struct loop *loop, gimple stmt) +interpret_gimple_assign (struct loop *loop, gassign *stmt) { tree type = TREE_TYPE (gimple_assign_lhs (stmt)); enum tree_code code = gimple_assign_rhs_code (stmt); @@ -2003,7 +2004,7 @@ analyze_scalar_evolution_1 (struct loop *loop, tree var, tree res) switch (gimple_code (def)) { case GIMPLE_ASSIGN: - res = interpret_gimple_assign (loop, def); + res = interpret_gimple_assign (loop, as_a <gassign *> (def)); break; case GIMPLE_PHI: -- 1.7.11.7