[Bug tree-optimization/69489] missed vectorization for boolean loop, missed if-conversion

amker at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 28 14:02:00 GMT 2016


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

--- Comment #19 from amker at gcc dot gnu.org ---

  <bb 4>:
  # i_27 = PHI <0(3), i_21(5)>
  # n1_29 = PHI <0(3), n1_20(5)>
  # n2_28 = PHI <0(3), n2_34(5)>
  i.1_7 = (sizetype) i_27;
  _9 = u_8(D) + i.1_7;
  _11 = *_9;
  _13 = v_12(D) + i.1_7;
  _14 = *_13;
  _17 = v_12(D) + i.1_7;
  _18 = *_17;
  _31 = _18 != 0;
  _36 = (int) _31;
  _48 = (long int) _36;
  _45 = _11 != 0;
  _44 = _14 == 0;
  _43 = _44 & _45;
  _ifc__40 = _43 ? 1 : 0;
  n2_34 = n2_28 + _ifc__40;
  prephitmp_49 = _11 != 0 ? 0 : _48;
  n1_20 = n1_29 + prephitmp_49;
  i_21 = i_27 + 1;
  if (n_6(D) > i_21)
    goto <bb 5>;
  else
    goto <bb 6>;

  <bb 5>:
  goto <bb 4>;

The difficult part is "prephitmp_49 = _11 != 0 ? 0 : _48;", which cannot be
simplified into:
  _a = 18 != 0;
  _b = _11 == 0;
  _c = _a && _b;
  prephitmp_49 = (long int)_c;

I don't know if there is easy fix to ifcvt so that this case can be vectorized
without vcond_mask...


More information about the Gcc-bugs mailing list