@@ -1,5 +1,16 @@
2014-11-03 David Malcolm <dmalcolm@redhat.com>
+ * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Within
+ case GIMPLE_ASSIGN, introduce local "assign_stmt" and use in place
+ of "stmt" for typesafety.
+ (mark_all_reaching_defs_necessary_1): Add a checked cast.
+ (propagate_necessity): Likewise.
+ (remove_dead_stmt): Introduce local gassign * "assign_stmt" from
+ result of gimple_assign_single_p and use it in place of "stmt" for
+ typesafety.
+
+2014-11-03 David Malcolm <dmalcolm@redhat.com>
+
* tree-ssa-copy.c (stmt_may_generate_copy): Replace check against
GIMPLE_ASSIGN with a dyn_cast, introducing local gassign *
"assign_stmt", using it in place of "stmt" for typesafety.
@@ -289,9 +289,12 @@ mark_stmt_if_obviously_necessary (gimple stmt, bool aggressive)
break;
case GIMPLE_ASSIGN:
- if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
- && TREE_CLOBBER_P (gimple_assign_rhs1 (stmt)))
- return;
+ {
+ gassign *assign_stmt = as_a <gassign *> (stmt);
+ if (TREE_CODE (gimple_assign_lhs (assign_stmt)) == SSA_NAME
+ && TREE_CLOBBER_P (gimple_assign_rhs1 (assign_stmt)))
+ return;
+ }
break;
default:
@@ -570,7 +573,7 @@ mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
if (!chain_ovfl
&& gimple_assign_single_p (def_stmt))
{
- tree lhs = gimple_assign_lhs (def_stmt);
+ tree lhs = gimple_assign_lhs (as_a <gassign *> (def_stmt));
if (!ref_may_be_aliased (lhs))
return false;
}
@@ -868,7 +871,7 @@ propagate_necessity (bool aggressive)
{
tree rhs;
/* If this is a load mark things necessary. */
- rhs = gimple_assign_rhs1 (stmt);
+ rhs = gimple_assign_rhs1 (as_a <gassign *> (stmt));
if (TREE_CODE (rhs) != SSA_NAME
&& !is_gimple_min_invariant (rhs)
&& TREE_CODE (rhs) != CONSTRUCTOR)
@@ -1125,18 +1128,19 @@ remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb)
/* If this is a store into a variable that is being optimized away,
add a debug bind stmt if possible. */
+ gassign *assign_stmt;
if (MAY_HAVE_DEBUG_STMTS
- && gimple_assign_single_p (stmt)
- && is_gimple_val (gimple_assign_rhs1 (stmt)))
+ && (assign_stmt = gimple_assign_single_p (stmt))
+ && is_gimple_val (gimple_assign_rhs1 (assign_stmt)))
{
- tree lhs = gimple_assign_lhs (stmt);
+ tree lhs = gimple_assign_lhs (assign_stmt);
if ((TREE_CODE (lhs) == VAR_DECL || TREE_CODE (lhs) == PARM_DECL)
&& !DECL_IGNORED_P (lhs)
&& is_gimple_reg_type (TREE_TYPE (lhs))
&& !is_global_var (lhs)
&& !DECL_HAS_VALUE_EXPR_P (lhs))
{
- tree rhs = gimple_assign_rhs1 (stmt);
+ tree rhs = gimple_assign_rhs1 (assign_stmt);
gdebug *note
= gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
gsi_insert_after (i, note, GSI_SAME_STMT);