[wide-int] More optimisations
Kenneth Zadeck
zadeck@naturalbridge.com
Tue Oct 29 15:45:00 GMT 2013
On 10/29/2013 08:43 AM, Richard Sandiford wrote:
> Richard Biener <rguenther@suse.de> writes:
>> On Sun, 27 Oct 2013, Richard Sandiford wrote:
>>> This patch adds some more optimisations to the wi:: comparison functions.
>>> It uses the:
>>>
>>> #define CONSTANT(X) (__builtin_constant_p (X) && (X))
>>>
>>> idiom that was mentioned before, except that I thought CONSTANT would be
>>> too easily confused with CONSTANT_P, so I went for CAN_TELL instead.
>>> Better names welcome.
>> STATIC_CONSTANT_P similar to static_assert?
> Sounds good.
>
>>> The changes are:
>>>
>>> - Add a fast path to eq_p for when one of the inputs isn't sign-extended.
>>> This includes code to handle compile-time 0 specially.
>>>
>>> - Add the opposite optimisation to Mike's lts_p change, if we can tell at
>>> compile time that it applies.
>> I think the cases Mike added should only be enabled when we can figure
>> them out at compile-time, too.
> Well, the idea with most of these functions was to handle the simple
> "everything is one HWI" cases inline. For operations like addition this
> needs to be based on the precision, since that's the only cheap way of
> knowing whether the result is also a single HWI. But for logic operations
> like AND and OR, it can be based on whether the inputs are single HWIs,
> since single-HWI inputs give a single-HWI output. This catches more cases.
>
> lts_p is a bit like AND and OR in this respect. fits_shwi_p is the
> same as "len == 1", which is simple to check and is often true. If we
> restrict the optimisation to STATIC_CONSTANT_P we'll end up using the
> out-of-line comparison for all TREE_INT_CST_LTs, even the int-int ones
> that we currently handle inline.
This has always been my way of looking at it.
kenny
> Thanks,
> Richard
>
More information about the Gcc-patches
mailing list