This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Remove unreachable nodes before IPA profile pass (PR ipa/87706).


On 11/8/18 12:19 PM, Jan Hubicka wrote:
>> Hi.
>>
>> In order to fix the warnings mentioned in the PR, we need
>> to run remove_unreachable_nodes after early tree passes. That's
>> however possible only within a IPA pass. Thus I'm calling that
>> before the profile PASS.
>>
>> Patch survives regression tests on ppc64le-linux-gnu and majority
>> of warnings are gone in profiledbootstrap.
>>
>> Ready for trunk?
> 
> I think we want to do that even with no -fprofile-generate because the
> unreachable code otherwise goes into all other IPA passes for no good
> reason.  So perhaps adding it as todo after the early optimization
> metapass?

That fails due to gcc_assert.
So one needs:

diff --git a/gcc/passes.c b/gcc/passes.c
index d838d909941..be92a2f3be3 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -485,7 +485,7 @@ const pass_data pass_data_all_early_optimizations =
   0, /* properties_provided */
   0, /* properties_destroyed */
   0, /* todo_flags_start */
-  0, /* todo_flags_finish */
+  TODO_remove_functions | TODO_rebuild_cgraph_edges, /* todo_flags_finish */
 };
 
 class pass_all_early_optimizations : public gimple_opt_pass
@@ -1989,7 +1989,8 @@ execute_todo (unsigned int flags)
      of IPA pass queue.  */
   if (flags & TODO_remove_functions)
     {
-      gcc_assert (!cfun);
+      gcc_assert (!cfun
+		  || strcmp (current_pass->name, "early_optimizations") == 0);
       symtab->remove_unreachable_nodes (dump_file);
     }
 

Or do you prefer to a new pass_remove_functions pass that will be added after
pass_local_optimization_passes ?

Martin

> 
> Honza
>> Thanks,
>> Martin
>>
>> gcc/ChangeLog:
>>
>> 2018-11-08  Martin Liska  <mliska@suse.cz>
>>
>> 	* tree-profile.c: Run TODO_remove_functions before "profile"
>> 	pass in order to remove dead functions that will trigger
>> 	-Wmissing-profile.
>> ---
>>  gcc/tree-profile.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>>
> 
>> diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
>> index d8f2a3b1ba4..c14ebc556a6 100644
>> --- a/gcc/tree-profile.c
>> +++ b/gcc/tree-profile.c
>> @@ -776,7 +776,7 @@ const pass_data pass_data_ipa_tree_profile =
>>    0, /* properties_required */
>>    0, /* properties_provided */
>>    0, /* properties_destroyed */
>> -  0, /* todo_flags_start */
>> +  TODO_remove_functions, /* todo_flags_start */
>>    TODO_dump_symtab, /* todo_flags_finish */
>>  };
>>  
>>
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]