ipa-cp heuristic tweek

Ilya Enkovich enkovich.gnu@gmail.com
Fri Apr 3 16:33:00 GMT 2015


2015-03-31 15:32 GMT+03:00 Ilya Enkovich <enkovich.gnu@gmail.com>:
> 2015-03-29 18:43 GMT+03:00 Jan Hubicka <hubicka@ucw.cz>:
>> +static bool
>> +set_single_call_flag (cgraph_node *node, void *)
>> +{
>> +  cgraph_edge *cs = node->callers;
>> +  /* Local thunks can be handled transparently, skip them.  */
>> +  while (cs && cs->caller->thunk.thunk_p && cs->caller->local.local)
>> +    cs = cs->next_caller;
>> +  if (cs)
>> +    {
>> +      gcc_assert (!cs->next_caller);
>
> This assert assumes the only non-thunk caller is always at the end of
> a callers list. Is it actually guaranteed?
>
>> +      IPA_NODE_REF (cs->caller)->node_calling_single_call = true;
>> +      return true;
>> +    }
>> +  return false;
>> +}
>> +
>>  /* Initialize ipcp_lattices.  */
>
>
> Thanks,
> Ilya

Hi Honza,

For chkp testing I see cases when gcc asserts in set_single_call_flag
because instrumentation thunk is not the last one in a callers list. I
want to install following patch to fix it. Is it OK?

Thanks,
Ilya
--
2015-04-03  Ilya Enkovich  <ilya.enkovich@intel.com>

        * ipa-cp (set_single_call_flag): Remove too
        restrictive assert.


diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index d9aa92e..bfe4821 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -839,7 +839,6 @@ set_single_call_flag (cgraph_node *node, void *)
     cs = cs->next_caller;
   if (cs)
     {
-      gcc_assert (!cs->next_caller);
       IPA_NODE_REF (cs->caller)->node_calling_single_call = true;
       return true;
     }



More information about the Gcc-patches mailing list