On Thu, Jan 2, 2014 at 5:10 AM, Mike Stump <mikest...@comcast.net> wrote:
> On Nov 28, 2013, at 6:20 AM, Richard Biener <richard.guent...@gmail.com> 
> wrote:
>> On Thu, Nov 28, 2013 at 12:58 PM, Richard Sandiford
>> <rdsandif...@googlemail.com> wrote:
>>> Jakub Jelinek <ja...@redhat.com> writes:
>>>> On Mon, Nov 25, 2013 at 12:24:30PM +0100, Richard Biener wrote:
>>>>> On Sat, Nov 23, 2013 at 8:21 PM, Mike Stump <mikest...@comcast.net> wrote:
>>>>>> Richi has asked the we break the wide-int patch so that the
>>>>>> individual port and front end maintainers can review their parts
>>>>>> without have to go through the entire patch.  This patch covers the
>>>>>> gimple code.
>>>>>
>>>>> @@ -1754,7 +1754,7 @@ dump_ssaname_info (pretty_printer *buffer, tree
>>>>> node, int spc)
>>>>>   if (!POINTER_TYPE_P (TREE_TYPE (node))
>>>>>       && SSA_NAME_RANGE_INFO (node))
>>>>>     {
>>>>> -      double_int min, max, nonzero_bits;
>>>>> +      widest_int min, max, nonzero_bits;
>>>>>       value_range_type range_type = get_range_info (node, &min, &max);
>>>>>
>>>>>       if (range_type == VR_VARYING)
>>>>>
>>>>> this makes me suspect you are changing SSA_NAME_RANGE_INFO
>>>>> to embed two max wide_ints.  That's a no-no.
>>>>
>>>> Well, the range_info_def struct right now contains 3 double_ints, which is
>>>> unnecessary overhead for the most of the cases where the SSA_NAME's type
>>>> has just at most HOST_BITS_PER_WIDE_INT bits and thus we could fit all 3 of
>>>> them into 3 HOST_WIDE_INTs rather than 3 double_ints.  So supposedly struct
>>>> range_info_def could be a template on the type's precision rounded up to 
>>>> HWI
>>>> bits, or say have 3 alternatives there, use
>>>> FIXED_WIDE_INT (HOST_BITS_PER_WIDE_INT) for the smallest types,
>>>> FIXED_WIDE_INT (2 * HOST_BITS_PER_WIDE_INT) aka double_int for the larger
>>>> but still common ones, and widest_int for the rest, then the API to set/get
>>>> it could use widest_int everywhere, and just what storage we'd use would
>>>> depend on the precision of the type.
>>>
>>> This patch adds a trailing_wide_ints <N> that can be used at the end of
>>> a variable-length structure to store N wide_ints.  There's also a macro
>>> to declare get/set methods for each of the N elements.
>>>
>>> At the moment I've only defined non-const operator[].  It'd be possible
>>> to add a const version later if necessary.
>>>
>>> The size of range_info_def for precisions that fit in M HWIs is then
>>> 1 + 3 * M, so 4 for the common case (down from 6 on trunk).  The maximum
>>> is 7 for current x86_64 types (up from 6 on trunk).
>>>
>>> I wondered whether to keep the interface using widest_int, but I think
>>> wide_int works out more naturally.  The only caller that wants to extend
>>> beyond the precision is CCP, but that's already special because the upper
>>> bits are supposed to be set (i.e. it's not a normal sign or zero extension).
>>>
>>> This relies on the SSA_NAME_ANTI_RANGE_P patch I just posted.
>>>
>>> If this is OK I'll look at using the same structure elsewhere.
>>
>> Looks good to me.
>
> So, is that an Ok for the gimple patch and the follow on work?  Just double 
> checking.

Yes.

Reply via email to