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

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
So we vectorize this to

  _97 = vect__4.15_91 == { 0, 0 };
  vect_patt_8.17_98 = VEC_COND_EXPR <_97, { 1, 1 }, { 0, 0 }>;
  _102 = vect__5.16_93 != { 0, 0 };
  vect_patt_19.18_103 = VEC_COND_EXPR <_102, { 1, 1 }, { 0, 0 }>;
  vect_patt_10.19_104 = vect_patt_8.17_98 | vect_patt_19.18_103;
  _108 = vect_patt_10.19_104 != { 0, 0 };
  vect_patt_7.20_109 = VEC_COND_EXPR <_108, { 1, 1 }, { 0, 0 }>;

where the _108/_109 defs are really redundant.  VRP2 is then the first
pass folding every stmt I think and it transforms this to

  _97 = vect__4.15_91 == { 0, 0 };
  _102 = vect__5.16_93 != { 0, 0 };
  _108 = VEC_COND_EXPR <_97, { -1, -1 }, _102>;
  vect_patt_7.20_109 = VEC_COND_EXPR <_108, { 1, 1 }, { 0, 0 }>;

I think this is matching

 (simplify
  (op (vec_cond:s @0 @1 @2) @3)
  (vec_cond @0 (op! @1 @3) (op! @2 @3)))

but since this changes the type of the vec_cond it has to verify it's
still supported.

Reply via email to