https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123775
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
Last reconfirmed| |2026-01-23
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed. Early break related I guess. ISEL sees
vect__4.13_55 = VEC_COND_EXPR <_2, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>;
vect__20.22_64 = VEC_COND_EXPR <mask__22.20_62, { -1, -1, -1, -1 }, { 0, 0,
0, 0 }>;
mask_patt_27.23_65 = vect__4.13_55 != vect__20.22_64;
if (mask_patt_27.23_65 != { 0, 0, 0, 0 })
but vect had
vect__4.13_55 = MEM[(vector(4) int *)vectp_ires.11_53];
vect_patt_28.21_63 = VEC_COND_EXPR <mask__22.20_62, { 1, 1, 1, 1 }, { 0, 0,
0, 0 }>;
vect__20.22_64 = -vect_patt_28.21_63;
mask_patt_27.23_65 = vect__4.13_55 != vect__20.22_64;
if (mask_patt_27.23_65 != { 0, 0, 0, 0 })
and we're processing vect__4.13_55.
t.c.193t.fre4: vect__4.13_55 = VIEW_CONVERT_EXPR<vector(4) int>(ires_83);
...
t.c.210t.fre5: vect__4.13_55 = VEC_COND_EXPR <_2, { -1, -1, -1, -1 }, { 0, 0,
0, 0 }>;
after unrolling we see
_2 = _1 > { 0, 3, 2, -23 };
_3 = VEC_COND_EXPR <_2, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>;
ires = _3;
vect__4.13_55 = MEM[(vector(4) int *)&ires];
this is already from the testcase. Either vector lowering or ISEL is wrong
here. Needs to be investigated further.