https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103905
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- >From what I can see, ifcvt dump is the same between r12-1788 and r12-1789, vect has quite a few changes in that function, but the function is fairly simple in ifcvt, because almost nothing is inlined into it, so there is just the single for (i = 0; i < nelt; ++i) d.perm[i] = i * 2 + odd; loop in that function. I see similar changes on reduced: struct S { unsigned char perm[64]; }; void bar (struct S *); void foo (unsigned int nelt, unsigned odd) { struct S d; unsigned i; for (i = 0; i < nelt; ++i) d.perm[i] = i * 2 + odd; bar (&d); } 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...