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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-09-17

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed.

Looks like this is a latent bug in cselim.


Before cselim we have:
```
  if (iftmp.1_29 != 0)
    goto <bb 12>; [66.67%]
  else
    goto <bb 11>; [33.33%]

  <bb 11> [local count: 59055800]:
  # _51 = PHI <_50(10)>
  _94 = f[_51];
  _73 = _94 & 1;
  d[e.0_43] = _73;
  _57 = f[_51];
  _58 = _57 & 1;
  d[e.0_43] = _58;
  _101 = f[_51];
  _80 = _101 & 1;
  d[e.0_43] = _80;
  goto <bb 13>; [100.00%]

  <bb 12> [local count: 59055800]:
  # _55 = PHI <_50(10)>
  _10 = f[_55];
  _17 = _10 & 1;
  d[e.0_43] = _17;
  _63 = f[_55];
  _41 = _63 & 1;
  d[e.0_43] = _41;

  <bb 13> [local count: 118111600]:
  # _53 = PHI <_55(12), _51(11)>
```

Notice how there are uneven # of stores on one side of the if.
so we match up the pairs and for one of them we double up.

Reply via email to