function.h (struct function): Add rtl_inline_init, saved_for_inline.
authorRichard Henderson <rth@redhat.com>
Fri, 29 Aug 2003 22:44:05 +0000 (15:44 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 29 Aug 2003 22:44:05 +0000 (15:44 -0700)
        * function.h (struct function): Add rtl_inline_init, saved_for_inline.
        * integrate.c (save_for_inline): Set saved_for_inline.
        * c-semantics.c (genrtl_scope_stmt): Check it.
        * toplev.c (wrapup_global_declarations): Check it.
        (rest_of_handle_inlining): Set and check rtl_inline_init.
        (rest_of_compilation): Remove out of date comment.

From-SVN: r70931

gcc/ChangeLog
gcc/c-semantics.c
gcc/function.h
gcc/integrate.c
gcc/toplev.c

index d3443b51638e20e02680f113ea147bf031afc87a..d573615b6e3b3e270810cfe95c47a9aa8afe791b 100644 (file)
@@ -1,3 +1,12 @@
+2003-08-29  Richard Henderson  <rth@redhat.com>
+
+       * function.h (struct function): Add rtl_inline_init, saved_for_inline.
+       * integrate.c (save_for_inline): Set saved_for_inline.
+       * c-semantics.c (genrtl_scope_stmt): Check it.
+       * toplev.c (wrapup_global_declarations): Check it.
+       (rest_of_handle_inlining): Set and check rtl_inline_init.
+       (rest_of_compilation): Remove out of date comment.
+
 2003-08-29  Richard Henderson  <rth@redhat.com>
 
        * function.c (allocate_struct_function): New, split out of ...
index cbffbe09411d6d451d58369cc756908b06ab9596..4163d44919901a108e699601fd7f30dcdf689920 100644 (file)
@@ -645,6 +645,7 @@ genrtl_scope_stmt (tree t)
          if (TREE_CODE (fn) == FUNCTION_DECL
              && DECL_CONTEXT (fn) == current_function_decl
              && DECL_SAVED_INSNS (fn)
+             && DECL_SAVED_INSNS (fn)->saved_for_inline
              && !TREE_ASM_WRITTEN (fn)
              && TREE_ADDRESSABLE (fn))
            {
index 4216acb6a2551a55f87ddb4b97f54ded74bbe53d..f94a64286f3e13c7260d3e678be8e27b02920536 100644 (file)
@@ -504,6 +504,13 @@ struct function GTY(())
 
   /* Nonzero if code to initialize arg_pointer_save_area has been emitted.  */
   unsigned int arg_pointer_save_area_init : 1;
+
+  /* Flag for use by ther rtl inliner, to tell if the function has been
+     processed at least once.  */
+  unsigned int rtl_inline_init : 1;
+
+  /* Nonzero if the rtl inliner has saved the function for inlining.  */
+  unsigned int saved_for_inline : 1;
 };
 
 /* The function currently being compiled.  */
index a8ee4faa5f3857c313dacb60ca63aee806e2ffe7..15474ba3f248eae0cf2438ffe14cd750610c216d 100644 (file)
@@ -492,7 +492,7 @@ save_for_inline (tree fndecl)
     }
   cfun->original_decl_initial = DECL_INITIAL (fndecl);
   cfun->no_debugging_symbols = (write_symbols == NO_DEBUG);
-  DECL_SAVED_INSNS (fndecl) = cfun;
+  cfun->saved_for_inline = 1;
 
   /* Clean up.  */
   if (! flag_no_inline)
index 418fa3575eef58881596a6b585617de962c8a06b..3e639c6a151c8a6033ef1efaecd0ff7e67d8b6e7 100644 (file)
@@ -1588,6 +1588,7 @@ wrapup_global_declarations (tree *vec, int len)
          if (TREE_CODE (decl) == FUNCTION_DECL
              && DECL_INITIAL (decl) != 0
              && DECL_SAVED_INSNS (decl) != 0
+             && DECL_SAVED_INSNS (decl)->saved_for_inline
              && (flag_keep_inline_functions
                  || (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
                  || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
@@ -2464,8 +2465,9 @@ rest_of_handle_inlining (tree decl)
 
   /* If we are reconsidering an inline function at the end of
      compilation, skip the stuff for making it inline.  */
-  if (DECL_SAVED_INSNS (decl) != 0)
+  if (cfun->rtl_inline_init)
     return 0;
+  cfun->rtl_inline_init = 1;
 
   /* If this is nested inside an inlined external function, pretend
      it was only declared.  Since we cannot inline such functions,
@@ -2522,7 +2524,7 @@ rest_of_handle_inlining (tree decl)
 
   if (open_dump_file (DFI_rtl, decl))
     {
-      if (DECL_SAVED_INSNS (decl))
+      if (DECL_SAVED_INSNS (decl) && DECL_SAVED_INSNS (decl)->saved_for_inline)
        fprintf (rtl_dump_file, ";; (integrable)\n\n");
       close_dump_file (DFI_rtl, print_rtl, insns);
     }
@@ -3553,9 +3555,6 @@ rest_of_compilation (tree decl)
   if (! DECL_DEFER_OUTPUT (decl))
     {
       free_after_compilation (cfun);
-
-      /* Clear integrate.c's pointer to the cfun structure we just
-        destroyed.  */
       DECL_SAVED_INSNS (decl) = 0;
     }
   cfun = 0;