[PATCH] Speed-up def_builtin_const (ix86_valid_target_attribute)

Martin Liška mliska@suse.cz
Fri Mar 20 14:07:00 GMT 2015


On 03/20/2015 12:24 PM, Jakub Jelinek wrote:
> On Fri, Mar 20, 2015 at 11:33:09AM +0100, Martin Liška wrote:
>> @@ -30670,6 +30673,20 @@ def_builtin_const (HOST_WIDE_INT mask, const char *name,
>>   static void
>>   ix86_add_new_builtins (HOST_WIDE_INT isa)
>>   {
>> +  /* Last cached isa value.  */
>> +  static HOST_WIDE_INT last_tested_isa_value = 0;
>> +
>> +  /* We iterate through all defined builtins just if the last tested
>> +     values is different from ISA and just in case there is any intersection
>> +     between ISA value and union of all possible configurations.
>> +     Last condition skips iterations if ISA is changed by the change has
>> +     empty intersection with defined_isa_values.  */
>> +  if ((isa & defined_isa_values) == 0 || isa == last_tested_isa_value
>> +       || ((isa ^ last_tested_isa_value) & defined_isa_values) == 0)
>> +    return;
>> +
>> +  last_tested_isa_value = isa;
>
> Isn't at least the isa == last_tested_isa_value test useless?
> I mean, if they are equal, then (isa ^ last_tested_isa_value) is 0
> and so the third test is true.
>
> Also, given that the loop does something only for
>    (ix86_builtins_isa[i].isa & isa) != 0
> it means once you call ix86_add_new_builtins with some particular
> bit set in the isa, it doesn't make sense to try that bit again.
>
> So, I think it would be better:
> 1) rename defined_isa_values bitmask to say deferred_isa_values
>     (as in, isa bits that might still enable any new builtins)
> 2) in def_builtin, don't or in the mask unconditionally, but only
>     in the else case - when add_builtin_function is not called
> 3) in ix86_add_new_builtins, don't add last_tested_isa_value at all, instead
>     do:
>    if ((isa & deferred_isa_values) == 0)
>      return;
>
>    deferred_isa_values &= ~isa;
>
> That way, when you actually enable all builtins (either immediately in
> def_builtin because it wasn't C/C++-like FE, or because all ISAs were
> enabled from the start, or because ix86_add_new_builtins has been already
> called with sufficiently full bitmask), deferred_isa_values will be 0 and
> you won't do anything in the function any more.
>
> 	Jakub
>

Thank you Jakub for smart solution.
I've just implemented new patch, which I've been testing.

What do you think about it?
Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Speed-up-def_builtin_const-ix86_valid_target_attribu.patch
Type: text/x-patch
Size: 1932 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150320/cf9d2937/attachment.bin>


More information about the Gcc-patches mailing list