https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103905
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2022-01-05
--- Comment #7 from Martin Liška <marxin at gcc dot gnu.org> ---
>
> Do you know what nelt and odd values are used during the misbehaving
> *_vec_even_odd on your testcase? If so, perhaps we could make bar noipa and
> add perm verification in there, make foo also noipa and just call it from
> main with those arguments...
Thanks Jakub for the hint. Apparently, I was quite close to the testcase, but
one needs nelt=8 and 64 elements of the perm array.
So there's simplified test-case:
$ cat xop.C
int N = 8;
char perm[64];
void
__attribute__((noipa))
check (void)
{
for (int i = 0; i < N; ++i)
__builtin_printf("perm[%d]=%d\n", i, perm[i]);
if (perm[7] != 7)
__builtin_abort ();
}
int main()
{
for (int i = 0; i < N; ++i)
perm[i] = i;
check ();
return 0;
}
$ gcc xop.C -march=bdver1 -O3
$ ./a.out
perm[0]=0
perm[1]=1
perm[2]=0
perm[3]=0
perm[4]=4
perm[5]=5
perm[6]=0
perm[7]=0
Aborted (core dumped)