On 20/10/2011, at 10:32 PM, Jan Hubicka wrote:

> Hi,
>> Jan,
>> 
>> The following patch started as a one-liner for ipa-inline-analysis.c: 
>> account_size_time() to merge predicates when we are adding data to entry[0] 
>> (i.e., when space for 32 size_time entries is exhausted):
>> 
>> @@ -537,6 +592,9 @@ account_size_time (struct inline_summary
>>     }
>>   else
>>     {
>> +      e->predicate = or_predicates (summary->conds, &e->predicate, pred);
>>       e->size += size;
>>       e->time += time;
>>       if (e->time > MAX_TIME * INLINE_TIME_SCALE)
> 
> As we discussed, this is not needed in current form because we arrange first 
> predicate to be always
> true and thus we could always place there all the costs that did not fit 
> elwhere.
> 
> The patch has a problem with fact that the predicates must be always 
> conservative i.e. when
> they are proved to be false the code must be unreachable after inlining.

I don't understand your point.  The OR-ing of the predicates allows us to merge 
size_time_entries and keep the total number of them under a desired limit.  
Currently all merging goes into entry[0], and the patch makes the extra 
information to get distributed across more entries.  Because we OR the 
predicates, we keep the information conservative; now in order to say that 
certain code will be unreachable the inliner has to prove to be false the OR-ed 
predicate.

Now, one can argue whether it is actually a benefit to distribute the 
information more evenly and, consequently, making more predicates harder to 
disprove.  In current scheme we have the surplus of size_time information under 
one impossible-to-disprove predicate and many entries with 
easier-to-disprove-predicates.  My patch changes the situation to having most 
of the size_time information in entries with harder-but-possible-to-disprove 
predicates.

Am I missing something?

> 
> We could either go with your patch with the distance fuction modified to 
> accept
> only predicates such that the new predicate is implied by them.  If you are
> willing to play with this, I have no problem with going for this.

Yes, favoring predicates that already imply the new one is a good suggestion.


Thank you,

--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics




Reply via email to