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

--- Comment #5 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
Looks like the RPO pass is causing match.pd to simply

  vect_iftmp.10_41 = vect__1.9_38 * vect_cst__40;
  vect_iftmp.10_42 = vect__1.9_39 * vect_cst__40;
  iftmp.0_8 = _1 * 2.0e+0;
  mask_patt_19.11_44 = vect_vec_iv_.8_36 != vect_cst__43;
  mask_patt_20.12_45 = [vec_unpack_lo_expr] mask_patt_19.11_44;
  mask_patt_20.12_46 = [vec_unpack_hi_expr] mask_patt_19.11_44;
  vect_patt_21.13_48 = VEC_COND_EXPR <mask_patt_20.12_45, vect_iftmp.10_41,
vect_cst__47>;
  vect_patt_21.13_49 = VEC_COND_EXPR <mask_patt_20.12_46, vect_iftmp.10_42,
vect_cst__47>;

into
  _54 = .COND_MUL (mask_patt_20.12_45, vect__1.9_38, { 2.0e+0, 2.0e+0, 2.0e+0,
2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0 }, { 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0,
1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0 });
  vect_patt_21.13_48 = _54;
  _55 = .COND_MUL (mask_patt_20.12_46, vect__1.9_39, { 2.0e+0, 2.0e+0, 2.0e+0,
2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0 }, { 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0,
1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0 });
  vect_patt_21.13_49 = _55;
  iftmp.0_3 = i_10 != 0 ? iftmp.0_8 : 1.0e+0;

which is perfectly valid and much simpler, so need to see why DCE6 mangles
this.

Reply via email to