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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-01-05
            Version|unknown                     |11.0
      Known to fail|                            |11.0
     Ever confirmed|0                           |1
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is a completely hosed profile:

  <bb 2> [local count: 108459]:
  _17 = x_15(D) + 131056;
  ivtmp.25_16 = (unsigned long) _17;
  ivtmp.26_41 = (unsigned long) x_15(D);
  _53 = ivtmp.26_41 + 4294836212;

  <bb 3> [local count: 108459]:
  # _43 = PHI <0.0(2), sum_50(5)>
  # ivtmp.25_45 = PHI <ivtmp.25_16(2), ivtmp.25_24(5)>
  # ivtmp.26_46 = PHI <ivtmp.26_41(2), ivtmp.26_27(5)>

  <bb 4> [local count: 650754]:
  # vect__44.6_21 = PHI <{ 0.0, 0.0, 0.0, 0.0 }(3), vect_sum_39.10_25(4)>
  # ivtmp.15_19 = PHI <ivtmp.26_46(3), ivtmp.15_44(4)>
  _10 = (void *) ivtmp.15_19;
  vect__34.9_28 = MEM <vector(4) float> [(float *)_10];
  vect_sum_39.10_25 = vect__44.6_21 + vect__34.9_28;
  ivtmp.15_44 = ivtmp.15_19 + 16;
  if (ivtmp.15_44 != ivtmp.25_45)
    goto <bb 4>; [100.00%]
  else
    goto <bb 5>; [0.00%]

  <bb 5> [count: 0]:
  _38 = .REDUC_PLUS (vect_sum_39.10_25);
  _51 = (void *) ivtmp.25_45;
  _34 = MEM[(float *)_51];
  _5 = MEM[(float *)_51 + 4B];
  _1 = _5 + _34;
  _49 = MEM[(float *)_51 + 8B];
  _52 = _43 + _49;
  _35 = _1 + _52;
  sum_50 = _35 + _38;
  ivtmp.25_24 = ivtmp.25_45 + 131068;
  ivtmp.26_27 = ivtmp.26_46 + 131068;
  if (ivtmp.25_24 != _53)
    goto <bb 3>; [100.00%]
  else
    goto <bb 6>; [0.00%]

  <bb 6> [count: 0]:
  return sum_50;


We recompute the local profile after graphite but that doesn't seem to result
in anything sensible:

Predictions for bb 21
  first match heuristics: 99.00%  exec 54230 (estimated locally) hit 54230
(estimated locally) (100.0%)
  combined heuristics: 99.00%  exec 54230 (estimated locally) hit 54230
(estimated locally) (100.0%)
  loop iterations heuristics of edge 21->20: 1.00%  exec 54230 (estimated
locally) hit 108460 (estimated locally) (200.0%)
Predictions for bb 22
1 edges in bb 22 predicted to even probabilities
Predictions for bb 20
  first match heuristics: 99.00%  exec 108459 (estimated locally) hit 108459
(estimated locally) (100.0%)
  combined heuristics: 99.00%  exec 108459 (estimated locally) hit 108459
(estimated locally) (100.0%)
  loop iterations heuristics of edge 20->15: 1.00%  exec 108459 (estimated
locally) hit 216918 (estimated locally) (200.0%)


GRAPHITE does (graphite.c:graphite_transform_loops)

  if (changed)
    {
      cleanup_tree_cfg ();
      profile_status_for_fn (cfun) = PROFILE_ABSENT;
      release_recorded_exits (cfun);
      tree_estimate_probability (false);
    }

not releasing recorded exits doesn't help.

Reply via email to