gcc/ChangeLog.gimple-classes:
        * gimple.c (gimple_set_lhs): Add checked casts to gassign * and
        gcall * as appropriate.
        * tree-cfg.c (execute_fixup_cfg): Introduce local "call_stmt"
        via a dyn_cast and use it in place of "stmt" where appropriate
        * tree-cfgcleanup.c (split_bb_on_noreturn_calls): Strengthen
        local "stmt" from gimple to gcall *, replacing an is_gimple_call
        with a dyn_cast.
        * tree-cfgcleanup.h (fixup_noreturn_call): Strengthen param from
        gimple to gcall *.
        * tree-ssa-dce.c (eliminate_unnecessary_stmts): Replace
        is_gimple_call with a dyn_cast, introducing local "call_stmt" and
        using it in place of "stmt" for typesafety.
        * tree-ssa-propagate.c (finish_update_gimple_call): Strengthen
        params "new_stmt" and "stmt" from gimple to gcall *.
---
 gcc/ChangeLog.gimple-classes | 17 +++++++++++++++++
 gcc/gimple.c                 |  4 ++--
 gcc/tree-cfg.c               |  9 +++++----
 gcc/tree-cfgcleanup.c        |  4 ++--
 gcc/tree-cfgcleanup.h        |  2 +-
 gcc/tree-ssa-dce.c           | 10 +++++-----
 gcc/tree-ssa-propagate.c     |  4 ++--
 7 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index e2fb3d2..33bd5bf 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,5 +1,22 @@
 2014-10-31  David Malcolm  <dmalc...@redhat.com>
 
+       * gimple.c (gimple_set_lhs): Add checked casts to gassign * and
+       gcall * as appropriate.
+       * tree-cfg.c (execute_fixup_cfg): Introduce local "call_stmt"
+       via a dyn_cast and use it in place of "stmt" where appropriate
+       * tree-cfgcleanup.c (split_bb_on_noreturn_calls): Strengthen
+       local "stmt" from gimple to gcall *, replacing an is_gimple_call
+       with a dyn_cast.
+       * tree-cfgcleanup.h (fixup_noreturn_call): Strengthen param from
+       gimple to gcall *.
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Replace
+       is_gimple_call with a dyn_cast, introducing local "call_stmt" and
+       using it in place of "stmt" for typesafety.
+       * tree-ssa-propagate.c (finish_update_gimple_call): Strengthen
+       params "new_stmt" and "stmt" from gimple to gcall *.
+
+2014-10-31  David Malcolm  <dmalc...@redhat.com>
+
        * config/i386/i386.c (add_condition_to_bb): Strengthen local
        "call_cond_stmt" from gimple to gcall *.
        * gimple-fold.c (gimple_build): Likewise for local "stmt".
diff --git a/gcc/gimple.c b/gcc/gimple.c
index b58c9db..d86ca49 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -1640,9 +1640,9 @@ gimple_set_lhs (gimple stmt, tree lhs)
   enum gimple_code code = gimple_code (stmt);
 
   if (code == GIMPLE_ASSIGN)
-    gimple_assign_set_lhs (stmt, lhs);
+    gimple_assign_set_lhs (as_a <gassign *> (stmt), lhs);
   else if (code == GIMPLE_CALL)
-    gimple_call_set_lhs (stmt, lhs);
+    gimple_call_set_lhs (as_a <gcall *> (stmt), lhs);
   else
     gcc_unreachable ();
 }
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 1d1aaef..1ec250b 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -8555,12 +8555,13 @@ execute_fixup_cfg (void)
       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);)
        {
          gimple stmt = gsi_stmt (gsi);
-         tree decl = is_gimple_call (stmt)
-                     ? gimple_call_fndecl (stmt)
+         gcall *call_stmt = dyn_cast <gcall *> (stmt);
+         tree decl = call_stmt
+                     ? gimple_call_fndecl (call_stmt)
                      : NULL;
          if (decl)
            {
-             int flags = gimple_call_flags (stmt);
+             int flags = gimple_call_flags (call_stmt);
              if (flags & (ECF_CONST | ECF_PURE | ECF_LOOPING_CONST_OR_PURE))
                {
                  if (gimple_purge_dead_abnormal_call_edges (bb))
@@ -8574,7 +8575,7 @@ execute_fixup_cfg (void)
                }
 
              if (flags & ECF_NORETURN
-                 && fixup_noreturn_call (stmt))
+                 && fixup_noreturn_call (call_stmt))
                todo |= TODO_cleanup_cfg;
             }
 
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 7383924..fc9f2af 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -645,9 +645,9 @@ split_bb_on_noreturn_calls (basic_block bb)
 
   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
     {
-      gimple stmt = gsi_stmt (gsi);
+      gcall *stmt = dyn_cast <gcall *> (gsi_stmt (gsi));
 
-      if (!is_gimple_call (stmt))
+      if (!stmt)
        continue;
 
       if (gimple_call_noreturn_p (stmt))
diff --git a/gcc/tree-cfgcleanup.h b/gcc/tree-cfgcleanup.h
index 19ff170..9538ddd 100644
--- a/gcc/tree-cfgcleanup.h
+++ b/gcc/tree-cfgcleanup.h
@@ -23,6 +23,6 @@ along with GCC; see the file COPYING3.  If not see
 /* In tree-cfgcleanup.c  */
 extern bitmap cfgcleanup_altered_bbs;
 extern bool cleanup_tree_cfg (void);
-extern bool fixup_noreturn_call (gimple stmt);
+extern bool fixup_noreturn_call (gcall *stmt);
 
 #endif /* GCC_TREE_CFGCLEANUP_H */
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index 06ffb24..20a4e40 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -1229,11 +1229,11 @@ eliminate_unnecessary_stmts (void)
                something_changed = true;
              remove_dead_stmt (&gsi, bb);
            }
-         else if (is_gimple_call (stmt))
+         else if (gcall *call_stmt = dyn_cast <gcall *> (stmt))
            {
-             tree name = gimple_call_lhs (stmt);
+             tree name = gimple_call_lhs (call_stmt);
 
-             notice_special_calls (as_a <gcall *> (stmt));
+             notice_special_calls (call_stmt);
 
              /* When LHS of var = call (); is dead, simplify it into
                 call (); saving one operand.  */
@@ -1243,7 +1243,7 @@ eliminate_unnecessary_stmts (void)
                  /* Avoid doing so for allocation calls which we
                     did not mark as necessary, it will confuse the
                     special logic we apply to malloc/free pair removal.  */
-                 && (!(call = gimple_call_fndecl (stmt))
+                 && (!(call = gimple_call_fndecl (call_stmt))
                      || DECL_BUILT_IN_CLASS (call) != BUILT_IN_NORMAL
                      || (DECL_FUNCTION_CODE (call) != BUILT_IN_ALIGNED_ALLOC
                          && DECL_FUNCTION_CODE (call) != BUILT_IN_MALLOC
@@ -1260,7 +1260,7 @@ eliminate_unnecessary_stmts (void)
                      fprintf (dump_file, "\n");
                    }
 
-                 gimple_call_set_lhs (stmt, NULL_TREE);
+                 gimple_call_set_lhs (call_stmt, NULL_TREE);
                  maybe_clean_or_replace_eh_stmt (stmt, stmt);
                  update_stmt (stmt);
                  release_ssa_name (name);
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 6625000..478e8b9 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -727,8 +727,8 @@ move_ssa_defining_stmt_for_defs (gimple new_stmt, gimple 
old_stmt)
    A GIMPLE_CALL STMT is being replaced with GIMPLE_CALL NEW_STMT.  */
 
 static void
-finish_update_gimple_call (gimple_stmt_iterator *si_p, gimple new_stmt,
-                          gimple stmt)
+finish_update_gimple_call (gimple_stmt_iterator *si_p, gcall *new_stmt,
+                          gcall *stmt)
 {
   gimple_call_set_lhs (new_stmt, gimple_call_lhs (stmt));
   move_ssa_defining_stmt_for_defs (new_stmt, stmt);
-- 
1.7.11.7

Reply via email to