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

--- Comment #3 from Hongtao.liu <crazylht at gmail dot com> ---
A three-operand phi make ifcvt generate worse code

 <bb 4> [local count: 10737414]:
  # iftmp.1_16 = PHI <2.5e-1(13), 5.0e-1(2)>
  # iftmp.0_34 = PHI <4.0e+0(13), 2.0e+0(2)>
  # prephitmp_40 = PHI <-2.5e-1(13), -5.0e-1(2)>
  # prephitmp_41 = PHI <1.25e+0(13), 1.5e+0(2)>
  # prephitmp_42 = PHI <-1.25e+0(13), -1.5e+0(2)>
  # DEBUG f1 => NULL
  # DEBUG f2 => iftmp.1_16
  # DEBUG BEGIN_STMT
  # DEBUG i => 0
  # DEBUG BEGIN_STMT
  if (_3 != 0)
    goto <bb 28>; [50.00%]
  else
    goto <bb 29>; [50.00%]

  <bb 29> [local count: 5368707]:

  <bb 17> [local count: 531502204]:
  # i_18 = PHI <0(29), i_47(26)>
  # ivtmp_15 = PHI <256(29), ivtmp_43(26)>
  # DEBUG i => i_18
  # DEBUG BEGIN_STMT
  _38 = (long unsigned int) i_18;
  _37 = _38 * 4;
  _36 = af_24(D) + _37;
  x_20 = *_36;
  # DEBUG x => x_20
  # DEBUG BEGIN_STMT
  # DEBUG D#1 => x_20 < 0.0
  # DEBUG z => (int) D#1
  # DEBUG BEGIN_STMT
  if (x_20 >= 0.0)
    goto <bb 19>; [59.00%]
  else
    goto <bb 22>; [41.00%]

  <bb 19> [local count: 313586303]:
  if (x_20 < iftmp.0_34)
    goto <bb 22>; [20.00%]
  else
    goto <bb 21>; [80.00%]

  <bb 21> [local count: 250869041]:

  <bb 22> [local count: 531502205]:
  # prephitmp_17 = PHI <2.0e+0(17), prephitmp_41(19), iftmp.1_16(21)>
  # DEBUG t1 => D#2
  # DEBUG BEGIN_STMT
  # DEBUG neg_t1 => -D#2
  # DEBUG BEGIN_STMT
  # DEBUG t2 => prephitmp_17
  # DEBUG BEGIN_STMT
  _12 = res_28(D) + _37;
  _26 = *_12;
  _27 = _26 + x_20;
  _45 = prephitmp_17 + _27;
  *_12 = _45;
  # DEBUG BEGIN_STMT
  i_47 = i_18 + 1;
  # DEBUG i => i_47
  # DEBUG BEGIN_STMT
  ivtmp_43 = ivtmp_15 - 1;
  if (ivtmp_43 != 0)

Reply via email to