gcc/ChangeLog.gimple-classes: * tree-ssa-threadedge.c (lhs_of_dominating_assert): Capture result of gimple_assign_single_p as new local gassign * "use_assign", using it in place of "use_stmt" for typesafety. (fold_assignment_stmt): Strengthen param "stmt" from gimple to gassign *. (record_temporary_equivalences_from_stmts_at_dest): Replace check against GIMPLE_ASSIGN with a dyn_cast, introducing local gassign * "assign_stmt", using it in place of "stmt" for typesafety. Later, use it to capture the result of gimple_assign_single_p, and use it in place of "stmt" for typesafety. Add checked cast. --- gcc/ChangeLog.gimple-classes | 13 +++++++++++++ gcc/tree-ssa-threadedge.c | 33 ++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes index 43c05ec..c85c138 100644 --- a/gcc/ChangeLog.gimple-classes +++ b/gcc/ChangeLog.gimple-classes @@ -1,5 +1,18 @@ 2014-11-06 David Malcolm <dmalc...@redhat.com> + * tree-ssa-threadedge.c (lhs_of_dominating_assert): Capture result + of gimple_assign_single_p as new local gassign * "use_assign", + using it in place of "use_stmt" for typesafety. + (fold_assignment_stmt): Strengthen param "stmt" from gimple to + gassign *. + (record_temporary_equivalences_from_stmts_at_dest): Replace check + against GIMPLE_ASSIGN with a dyn_cast, introducing local gassign * + "assign_stmt", using it in place of "stmt" for typesafety. Later, + use it to capture the result of gimple_assign_single_p, and use it + in place of "stmt" for typesafety. Add checked cast. + +2014-11-06 David Malcolm <dmalc...@redhat.com> + * tree-ssa-ter.c (find_replaceable_in_bb): Replace is_gimple_assign with a dyn_cast, introducing local "def_assign" and using it in place of "def_stmt" for typesafety. Add a checked diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c index d5b2941..c0b1c82 100644 --- a/gcc/tree-ssa-threadedge.c +++ b/gcc/tree-ssa-threadedge.c @@ -132,14 +132,15 @@ lhs_of_dominating_assert (tree op, basic_block bb, gimple stmt) FOR_EACH_IMM_USE_FAST (use_p, imm_iter, op) { + gassign *use_assign; use_stmt = USE_STMT (use_p); if (use_stmt != stmt - && gimple_assign_single_p (use_stmt) - && TREE_CODE (gimple_assign_rhs1 (use_stmt)) == ASSERT_EXPR - && TREE_OPERAND (gimple_assign_rhs1 (use_stmt), 0) == op - && dominated_by_p (CDI_DOMINATORS, bb, gimple_bb (use_stmt))) + && (use_assign = gimple_assign_single_p (use_stmt)) + && TREE_CODE (gimple_assign_rhs1 (use_assign)) == ASSERT_EXPR + && TREE_OPERAND (gimple_assign_rhs1 (use_assign), 0) == op + && dominated_by_p (CDI_DOMINATORS, bb, gimple_bb (use_assign))) { - return gimple_assign_lhs (use_stmt); + return gimple_assign_lhs (use_assign); } } return op; @@ -243,7 +244,7 @@ record_temporary_equivalences_from_phis (edge e, vec<tree> *stack) May return NULL_TREE if no simplification is possible. */ static tree -fold_assignment_stmt (gimple stmt) +fold_assignment_stmt (gassign *stmt) { enum tree_code subcode = gimple_assign_rhs_code (stmt); @@ -365,8 +366,9 @@ record_temporary_equivalences_from_stmts_at_dest (edge e, /* If this is not a statement that sets an SSA_NAME to a new value, then do not try to simplify this statement as it will not simplify in any way that is helpful for jump threading. */ - if ((gimple_code (stmt) != GIMPLE_ASSIGN - || TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME) + gassign *assign_stmt = dyn_cast <gassign *> (stmt); + if ((!assign_stmt + || TREE_CODE (gimple_assign_lhs (assign_stmt)) != SSA_NAME) && (gimple_code (stmt) != GIMPLE_CALL || gimple_call_lhs (stmt) == NULL_TREE || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME)) @@ -435,12 +437,13 @@ record_temporary_equivalences_from_stmts_at_dest (edge e, Handle simple copy operations as well as implied copies from ASSERT_EXPRs. */ - if (gimple_assign_single_p (stmt) - && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME) - cached_lhs = gimple_assign_rhs1 (stmt); - else if (gimple_assign_single_p (stmt) - && TREE_CODE (gimple_assign_rhs1 (stmt)) == ASSERT_EXPR) - cached_lhs = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0); + assign_stmt = gimple_assign_single_p (stmt); + if (assign_stmt + && TREE_CODE (gimple_assign_rhs1 (assign_stmt)) == SSA_NAME) + cached_lhs = gimple_assign_rhs1 (assign_stmt); + else if (assign_stmt + && TREE_CODE (gimple_assign_rhs1 (assign_stmt)) == ASSERT_EXPR) + cached_lhs = TREE_OPERAND (gimple_assign_rhs1 (assign_stmt), 0); else { /* A statement that is not a trivial copy or ASSERT_EXPR. @@ -473,7 +476,7 @@ record_temporary_equivalences_from_stmts_at_dest (edge e, if (is_gimple_call (stmt)) cached_lhs = fold_call_stmt (as_a <gcall *> (stmt), false); else - cached_lhs = fold_assignment_stmt (stmt); + cached_lhs = fold_assignment_stmt (as_a <gassign *> (stmt)); if (!cached_lhs || (TREE_CODE (cached_lhs) != SSA_NAME -- 1.7.11.7