This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Determine more IVs to be non-overflowing


> On Tue, 5 Jul 2016, Richard Biener wrote:
> 
> >given widest_int has only precision of TImode on x86_64?
> 
> Is that the case? The comments say:
> 
>      It is really finite precision math where the precision is 4 times the
>      size of the largest integer that the target port can represent.
> 
> And the target has
> 
> /* Keep the OI and XI modes from confusing the compiler into thinking
>    that these modes could actually be used for computation.  They are
>    only holders for vectors during data movement.  */
> #define MAX_BITSIZE_MODE_ANY_INT (128)
> 
> I would thus expect widest_int to have at 512 bits on x86_64
> (possibly more depending on the exact definition of largest
> integer).

I think that comment is just confusing. (I got trapped by it, too)

/* The MAX_BITSIZE_MODE_ANY_INT is automatically generated by a very
   early examination of the target's mode file.  The WIDE_INT_MAX_ELTS
   can accomodate at least 1 more bit so that unsigned numbers of that
   mode can be represented as a signed value.  Note that it is still
   possible to create fixed_wide_ints that have precisions greater than
   MAX_BITSIZE_MODE_ANY_INT.  This can be useful when representing a
   double-width multiplication result, for example.  */

#define WIDE_INT_MAX_ELTS \
  ((MAX_BITSIZE_MODE_ANY_INT + HOST_BITS_PER_WIDE_INT) / HOST_BITS_PER_WIDE_INT)

#define WIDE_INT_MAX_PRECISION (WIDE_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)

typedef FIXED_WIDE_INT (WIDE_INT_MAX_PRECISION) widest_int;

My reading is that the type will end up being 128+64 bits, but there is only
one extra bit guarnatee in general, which is taken by sign.

Honza
> 
> -- 
> Marc Glisse


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]