]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/tree-optimize.c
backport: ChangeLog.tuples: ChangeLog from gimple-tuples-branch.
[thirdparty/gcc.git] / gcc / tree-optimize.c
index 820df4c2ce009a006fb3da18cba904cd8fcf5757..ba3d0fcc9e0f8b08c779cc898922374d88e6752b 100644 (file)
@@ -289,7 +289,7 @@ unsigned int
 execute_fixup_cfg (void)
 {
   basic_block bb;
-  block_stmt_iterator bsi;
+  gimple_stmt_iterator gsi;
   int todo = gimple_in_ssa_p (cfun) ? TODO_verify_ssa : 0;
 
   cfun->after_inlining = true;
@@ -297,35 +297,36 @@ execute_fixup_cfg (void)
   if (cfun->eh)
     FOR_EACH_BB (bb)
       {
-       for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
+       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
          {
-           tree stmt = bsi_stmt (bsi);
-           tree call = get_call_expr_in (stmt);
-           tree decl = call ? get_callee_fndecl (call) : NULL;
-
-           if (decl && call_expr_flags (call) & (ECF_CONST | ECF_PURE 
-                                                 | ECF_LOOPING_CONST_OR_PURE)
-               && TREE_SIDE_EFFECTS (call))
+           gimple stmt = gsi_stmt (gsi);
+           tree decl = is_gimple_call (stmt)
+                       ? gimple_call_fndecl (stmt)
+                       : NULL;
+
+           if (decl
+               && gimple_call_flags (stmt) & (ECF_CONST
+                                              | ECF_PURE 
+                                              | ECF_LOOPING_CONST_OR_PURE))
              {
                if (gimple_in_ssa_p (cfun))
                  {
                    todo |= TODO_update_ssa | TODO_cleanup_cfg;
                    update_stmt (stmt);
                  }
-               TREE_SIDE_EFFECTS (call) = 0;
              }
-           if (decl && TREE_NOTHROW (decl))
-             TREE_NOTHROW (call) = 1;
-           if (!tree_could_throw_p (stmt) && lookup_stmt_eh_region (stmt))
+
+           if (!stmt_could_throw_p (stmt) && lookup_stmt_eh_region (stmt))
              remove_stmt_from_eh_region (stmt);
          }
-       if (tree_purge_dead_eh_edges (bb))
+
+       if (gimple_purge_dead_eh_edges (bb))
           todo |= TODO_cleanup_cfg;
       }
 
   /* Dump a textual representation of the flowgraph.  */
   if (dump_file)
-    dump_tree_cfg (dump_file, dump_flags);
+    gimple_dump_cfg (dump_file, dump_flags);
 
   return todo;
 }
@@ -367,7 +368,7 @@ tree_lowering_passes (tree fn)
 
   current_function_decl = fn;
   push_cfun (DECL_STRUCT_FUNCTION (fn));
-  tree_register_cfg_hooks ();
+  gimple_register_cfg_hooks ();
   bitmap_obstack_initialize (NULL);
   execute_pass_list (all_lowering_passes);
   if (optimize && cgraph_global_info_ready)
@@ -410,7 +411,7 @@ tree_rest_of_compilation (tree fndecl)
      not safe to try to expand expressions involving them.  */
   cfun->dont_save_pending_sizes_p = 1;
   
-  tree_register_cfg_hooks ();
+  gimple_register_cfg_hooks ();
 
   bitmap_obstack_initialize (&reg_obstack); /* FIXME, only at RTL generation*/
   /* Perform all tree transforms and optimizations.  */
@@ -421,7 +422,6 @@ tree_rest_of_compilation (tree fndecl)
   /* Release the default bitmap obstack.  */
   bitmap_obstack_release (NULL);
   
-  DECL_SAVED_TREE (fndecl) = NULL;
   set_cfun (NULL);
 
   /* If requested, warn about function definitions where the function will
@@ -448,7 +448,7 @@ tree_rest_of_compilation (tree fndecl)
        }
     }
 
-  DECL_SAVED_TREE (fndecl) = NULL;
+  gimple_set_body (fndecl, NULL);
   if (DECL_STRUCT_FUNCTION (fndecl) == 0
       && !cgraph_node (fndecl)->origin)
     {