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 <[email protected]>
School of Aerospace Science and Technology, Xidian University