On Fri, 2021-12-10 at 15:43 +0800, Chenghua Xu wrote:
> +
> +INT_MODE (OI, 32);
> +
> +/* Keep the OI 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)

This can't prevent the compiler from using OImode for calculation.  And
to make things even worse, in wide-int.h we have:

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

/* ... */

> class GTY(()) wide_int_storage
> {
> private:
>   HOST_WIDE_INT val[WIDE_INT_MAX_ELTS];

When the compiler uses OImode, this array will eventually be accessed
out-of-bound, causing ICE on fp-uint64-convert-double-{1,2}.c.

All other ports don't define it (and let genmode to determine the value
automatically).  I drafted https://github.com/loongson/gcc/pull/64 to
remove the MAX_BITSIZE_MODE_ANY_INT definition.  Not sure if it's the
"proper" fix though.
-- 
Xi Ruoyao <xry...@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University

Reply via email to