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.

Reply via email to