https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95830

--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> ---
Thanks for reduction, I can confirm that. What happens:

mips-ps-5.c.171t.loopdone:

  _34 = vect__1.7_28 == vect__3.11_33;
  vect_iftmp.12_35 = VEC_COND_EXPR <_34, vect__1.7_28, vect__2.10_31>;

which is fine. But then during veclower21 we lower the first comparison to:

  _24 = (void *) ivtmp.17_4;
  vect__1.7_28 = MEM[base: _24, offset: 0B];
  _23 = (void *) ivtmp.20_1;
  vect__2.10_31 = MEM[base: _23, offset: 0B];
  vect__3.11_33 = vect__2.10_31 + vect_cst__32;
  _26 = BIT_FIELD_REF <vect__1.7_28, 32, 0>;
  _27 = BIT_FIELD_REF <vect__3.11_33, 32, 0>;
  _29 = _26 == _27 ? -1 : 0;
  _30 = BIT_FIELD_REF <vect__1.7_28, 32, 32>;
  _36 = BIT_FIELD_REF <vect__3.11_33, 32, 32>;
  _37 = _30 == _36 ? -1 : 0;
  _34 = {_29, _37};
  vect_iftmp.12_35 = VEC_COND_EXPR <_34, vect__1.7_28, vect__2.10_31>;

which is undesired. So similarly to isel we need to mark all SSA_NAMEs that are
first args of a VEC_COND_EXPR and ignore these from vect lowering.
Richi?

Reply via email to