This is the mail archive of the
mailing list for the GCC project.
Re: wide-int branch updated.
- From: Richard Biener <rguenther at suse dot de>
- To: Kenneth Zadeck <zadeck at naturalbridge dot com>
- Cc: Richard Sandiford <r dot sandiford at uk dot ibm dot com>, Mike Stump <mrs at mrs dot kithrup dot com>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 28 Aug 2013 09:45:40 +0200 (CEST)
- Subject: Re: wide-int branch updated.
- Authentication-results: sourceware.org; auth=none
- References: <521CE56E dot 5010605 at naturalbridge dot com>
On Tue, 27 Aug 2013, Kenneth Zadeck wrote:
> removed all knowledge of SHIFT_COUNT_TRUNCATED from wide-int
> both Richard Biener and Richard Sandiford had commented negatively about
> fixed bug with wide-int::fits_uhwi_p.
wide_int_ro::fits_uhwi_p () const
- return (len == 1 && val >= 0) || (len == 2 && val == 0);
+ return (precision <= HOST_BITS_PER_WIDE_INT)
+ || (len == 1 && val >= 0)
+ || (len == 2 && (precision >= 2 * HOST_BITS_PER_WIDE_INT) && (val
+ || (len == 2 && (sext_hwi (val, precision &
- 1)) == 0));
it now get's scary ;) Still wrong for precision == 0?
I wonder what it's semantic is ... in double_int we simply require
high == 0 (thus, negative numbers are not allowed). with
precision <= HOST_BITS_PER_WIDE_INT you allow negative numbers.
Matching what double-int fits_uhwi does would be
(len == 1 && ((signed HOST_WIDE_INT)val) >= 0)
|| (len == 2 && val == 0)
(I don't remember off-hand the signedness of val, but eventually
you missed the conversion to signed)
Now, what double-int does is supposed to match
host_integerp (..., 1) which I think it does.