This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: GCC 4.8.0 Status Report (2012-10-29), Stage 1 to end soon
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Kenneth Zadeck <zadeck at naturalbridge dot com>, Jakub Jelinek <jakub at redhat dot com>, Richard Biener <richard dot guenther at gmail dot com>, gcc at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org, rdsandiford at googlemail dot com
- Date: Sun, 4 Nov 2012 17:54:09 +0100
- Subject: Re: GCC 4.8.0 Status Report (2012-10-29), Stage 1 to end soon
- References: <20121029175642.GK1752@tucnak.redhat.com> <5090410F.5010801@naturalbridge.com> <CAFiYyc1go51+Srjy9erkBBC+o-MC5U08S23e6A6vNuE9BxOgvg@mail.gmail.com> <877gq73qsm.fsf@sandifor-thinkpad.stglab.manchester.uk.ibm.com> <50912B52.60207@naturalbridge.com> <20121031135508.GI1752@tucnak.redhat.com> <5091300A.9020101@naturalbridge.com> <20121031142743.GK1752@tucnak.redhat.com> <50916BB1.1050507@naturalbridge.com> <50926EB3.8030604@naturalbridge.com> <87pq3x1nbm.fsf@sandifor-thinkpad.stglab.manchester.uk.ibm.com>
On Thu, Nov 1, 2012 at 2:10 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> Kenneth Zadeck <zadeck@naturalbridge.com> writes:
>> I would like you to respond to at least point 1 of this email. In it
>> there is code from the rtl level that was written twice, once for the
>> case when the size of the mode is less than the size of a HWI and once
>> for the case where the size of the mode is less that 2 HWIs.
>>
>> my patch changes this to one instance of the code that works no matter
>> how large the data passed to it is.
>>
>> you have made a specific requirement for wide int to be a template that
>> can be instantiated in several sizes, one for 1 HWI, one for 2 HWI. I
>> would like to know how this particular fragment is to be rewritten in
>> this model? It seems that I would have to retain the structure where
>> there is one version of the code for each size that the template is
>> instantiated.
>
> I think richi's argument was that wide_int should be split into two.
> There should be a "bare-metal" class that just has a length and HWIs,
> and the main wide_int class should be an extension on top of that
> that does things to a bit precision instead. Presumably with some
> template magic so that the length (number of HWIs) is a constant for:
>
> typedef foo<2> double_int;
>
> and a variable for wide_int (because in wide_int the length would be
> the number of significant HWIs rather than the size of the underlying
> array). wide_int would also record the precision and apply it after
> the full HWI operation.
>
> So the wide_int class would still provide "as wide as we need" arithmetic,
> as in your rtl patch. I don't think he was objecting to that.
That summarizes one part of my complaints / suggestions correctly. In other
mails I suggested to not make it a template but a constant over object lifetime
'bitsize' (or maxlen) field. Both suggestions likely require more thought than
I put into them. The main reason is that with C++ you can abstract from where
wide-int information pieces are stored and thus use the arithmetic / operation
workers without copying the (source) "wide-int" objects. Thus you should
be able to write adaptors for double-int storage, tree or RTX storage.
> As is probably obvious, I don't agree FWIW. It seems like an unnecessary
> complication without any clear use. Especially since the number of
Maybe the double_int typedef is without any clear use. Properly
abstracting from the storage / information providers will save
compile-time, memory and code though. I don't see that any thought
was spent on how to avoid excessive copying or dealing with
long(er)-lived objects and their storage needs.
> significant HWIs in a wide_int isn't always going to be the same for
> both operands to a binary operation, and it's not clear to me whether
> that should be handled in the base class or wide_int.
It certainly depends.
Richard.
> Richard