On Wed, Oct 17, 2012 at 11:47 PM, Kenneth Zadeck
<zad...@naturalbridge.com> wrote:
> Richi,
>
> I apologize for the size of this patch, but it only does one very small
> thing, it is just that it does it all over the middle end.
>
> This patch introduces a new api for extracting a signed or unsigned hwi from
> an integer cst.  There had been an abi for doing this, but it has some
> problems that were fixed here, and it was only used sometimes.
>
> The new abi consists of 6 functions, three for testing if the constant in
> the int cst will fit and three for actually pulling out the value.
>
> The ones for testing are tree_fits_uhwi_p, tree_fits_shwi_p,
> tree_fits_hwi_p.   The first two of these are unsigned and signed versions,
> and the second one takes a boolean parameter which is true if the value is
> positive.   This replaces the host_integerp which basically has the same
> functionality of tree_fits_hwi_p.   The reason for changing this is that
> there were about 400 calls to host_integerp and all but 4 of them took a
> constant parameter. These names are chosen to be similar to the similar
> functions in wide-int and are more mnemonic that the existing name since
> they use the more readable u and s prefixes that a lot of other places do.
>
> On the accessing side, there is tree_to_uhwi, tree_to_shwi, and tree_to_hwi.
> The first two do checking when checking is enabled. The last does no
> checking.

Just a quick note here - the changelog mentions tree_low_cst (as new
function!?) but not host_integerp.  You should probably get rid of both,
otherwise uses will creap back as people are familiar with them
(I'm not sure these changes for consistency are always good ...)

I don't like that tree_to_hwi does not do any checking.  In fact I don't
like that it _exists_, after all it has a return type which signedness
does not magically change.  Unchecked conversions should use
TREE_LOW_CST.

Thus, my 2 cents before I really look at the patch (which will likely
be next week only, so maybe you can do a followup with the above
suggestions).

Thanks,
Richard.

> it is expected normally, the unchecked accesses follows an explicit check,
> or if there is no explicit check, then one of the checked ones follows.
> This is always not the case for places that just want to look at the bottom
> bits of some large number, such as several places that compute alignment.
> These just use the naked unchecked access.
>
> There were a lot of places that either did no checking or did the checking
> inline.   This patch tracks down all of those places and they now use the
> same abi.
>
> There are three places where i found what appear to be bugs in the code.
> These are places where the existing code did an unsigned check and then
> followed it with a signed access (or visa versa). These places are marked
> with comments that contain the string "THE NEXT LINE IS POSSIBLY WRONG".
> With some guidance from the reviewer, i will fix these are remove the
> unacceptable comments.
>
> Aside from that, this patch is very very boring because it just makes this
> one transformation. Look for interesting stuff in tree.h.   Everything else
> is just forcing everywhere to use a single abi.
>
> This patch could go on with a little work without the other 5 patches or it
> can wait for them.
>
> kenny

Reply via email to