]> gcc.gnu.org Git - gcc.git/commitdiff
re PR middle-end/30443 (4.3 internal compiler error: verify_cgraph_node failed)
authorJan Hubicka <jh@suse.cz>
Fri, 12 Jan 2007 18:07:57 +0000 (19:07 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 12 Jan 2007 18:07:57 +0000 (18:07 +0000)
PR tree-optimization/30443
* tree-inline.c (tree_function_versioning): Do not optimize when
cloning for inlining.

From-SVN: r120730

gcc/ChangeLog
gcc/tree-inline.c

index 00dca633fc0f087dc6ffa3a08a791797bb2e1541..dcec75dcf8d6dcb7c15e1c511847d1060acb9586 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-12  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/30443
+       * tree-inline.c (tree_function_versioning): Do not optimize when
+       cloning for inlining.
+
 2007-01-12  Zdenek Dvorak <dvorakz@suse.cz>
 
        * doc/loop.texi: Document recording of loop exits.
index 3775585d5ecc2ee4398219f84b805ef28bf7f7f7..3da2cc2b4d70701f82ac9b2ce4499fbe4f05dce3 100644 (file)
@@ -3209,16 +3209,17 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map,
   DECL_ARTIFICIAL (new_decl) = 1;
   DECL_ABSTRACT_ORIGIN (new_decl) = DECL_ORIGIN (old_decl);
 
+  /* Prepare the data structures for the tree copy.  */
+  memset (&id, 0, sizeof (id));
+
   /* Generate a new name for the new version. */
   if (!update_clones)
     {
       DECL_NAME (new_decl) =  create_tmp_var_name (NULL);
       SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl));
       SET_DECL_RTL (new_decl, NULL_RTX);
+      id.statements_to_fold = pointer_set_create ();
     }
-
-  /* Prepare the data structures for the tree copy.  */
-  memset (&id, 0, sizeof (id));
   
   id.decl_map = splay_tree_new (splay_tree_compare_pointers, NULL, NULL);
   id.src_fn = old_decl;
@@ -3233,7 +3234,6 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map,
   id.transform_new_cfg = true;
   id.transform_return_to_modify = false;
   id.transform_lang_insert_block = false;
-  id.statements_to_fold = pointer_set_create ();
 
   current_function_decl = new_decl;
   old_entry_block = ENTRY_BLOCK_PTR_FOR_FUNCTION
@@ -3299,18 +3299,25 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map,
 
   /* Clean up.  */
   splay_tree_delete (id.decl_map);
-  fold_marked_statements (0, id.statements_to_fold);
-  pointer_set_destroy (id.statements_to_fold);
-  fold_cond_expr_cond ();
+  if (!update_clones)
+    {
+      fold_marked_statements (0, id.statements_to_fold);
+      pointer_set_destroy (id.statements_to_fold);
+      fold_cond_expr_cond ();
+    }
   if (gimple_in_ssa_p (cfun))
     {
       free_dominance_info (CDI_DOMINATORS);
       free_dominance_info (CDI_POST_DOMINATORS);
-      delete_unreachable_blocks ();
+      if (!update_clones)
+        delete_unreachable_blocks ();
       update_ssa (TODO_update_ssa);
-      fold_cond_expr_cond ();
-      if (need_ssa_update_p ())
-        update_ssa (TODO_update_ssa);
+      if (!update_clones)
+       {
+         fold_cond_expr_cond ();
+         if (need_ssa_update_p ())
+           update_ssa (TODO_update_ssa);
+       }
     }
   free_dominance_info (CDI_DOMINATORS);
   free_dominance_info (CDI_POST_DOMINATORS);
This page took 0.076135 seconds and 5 git commands to generate.