compile it by itself, defer decision till end of compilation.
finish_compilation will call rest_of_compilation again
for those functions that need to be output. Also defer those
- functions that we are supposed to defer. */
-
- if (DECL_DEFER_OUTPUT (decl)
- || ((specd || DECL_INLINE (decl))
- && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
- && ! flag_keep_inline_functions)
- || DECL_EXTERNAL (decl))))
+ functions that we are supposed to defer. We cannot defer
+ functions containing nested functions since the nested function
+ data is in our non-saved obstack. */
+
+ if (! current_function_contains_functions
+ && (DECL_DEFER_OUTPUT (decl)
+ || ((specd || DECL_INLINE (decl))
+ && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
+ && ! flag_keep_inline_functions)
+ || DECL_EXTERNAL (decl)))))
{
DECL_DEFER_OUTPUT (decl) = 1;
#if !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)
warning ("`-a' option (basic block profile) not supported");
#else
- profile_block_flag = 1;
+ profile_block_flag = (profile_block_flag < 2) ? 1 : 3;
+#endif
+ }
+ else if (!strcmp (str, "ax"))
+ {
+#if !defined (FUNCTION_BLOCK_PROFILER_EXIT) || !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)
+ warning ("`-ax' option (jump profiling) not supported");
+#else
+ profile_block_flag = (!profile_block_flag
+ || profile_block_flag == 2) ? 2 : 3;
#endif
}
else if (str[0] == 'g')
OVERRIDE_OPTIONS;
#endif
+ if (profile_block_flag == 3)
+ {
+ warning ("`-ax' and `-a' are conflicting options. `-a' ignored.");
+ profile_block_flag = 2;
+ }
+
/* Unrolling all loops implies that standard loop unrolling must also
be done. */
if (flag_unroll_all_loops)