https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117032
Tamar Christina <tnfchris at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |tnfchris at gcc dot gnu.org
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2024-10-08
--- Comment #1 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
Confirmed.
Note that we miss the general case (e.g. without the FLOAT_EXPR) for both
direct and indirect.
static inline
void g(unsigned short *a, int *b)
{
b[0] = a[0];
b[1] = a[1];
b[2] = a[2];
b[3] = a[3];
}
static inline
void g2(int *a, long long *b)
{
b[0] = a[0];
b[1] = a[1];
b[2] = a[2];
b[3] = a[3];
}
void indirect(unsigned short *a, long long *b)
{
int t[4];
g(a, t);
g2(t, b);
}
void direct(unsigned short *a, long long *b)
{
b[0] = a[0];
b[1] = a[1];
b[2] = a[2];
b[3] = a[3];
}
This is due to the way vec_unpack is implemented in the backend.
We rewrite it the mode to VHALF to model the intermediate vec_select, however
that means that V4HI is unmodel-able as that requires a V2HI.
I have a patch that adds direct conversion support, but this fails atm due
to the aarch64 backend not supporting 64-bit to 128-bit vector permutes yet
until another series of mine gets in.