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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                 CC|                            |aldyh at gcc dot gnu.org,
                   |                            |amacleod at redhat dot com
   Last reconfirmed|                            |2021-06-28
     Ever confirmed|0                           |1
            Summary|[11/12 Regression] wrong    |[11/12 Regression] evrp
                   |code at -O2 and above on    |produces wrong code
                   |x86_64-linux-gnu            |

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The problem is in evrp.
Without evrp:
  # f_10 = PHI <0(3), c.0_1(4)>
  # g_11 = PHI <g_12(3), g_21(4)>
  c = f_10;
.....

With VRP:
  <bb 6> :
  # g_11 = PHI <g_12(3), g_21(4)>
  c = 0;

That is wrong.


c.0_1: int VARYING
_2: <unnamed-signed:1> VARYING
_3: <unnamed-signed:1> VARYING
_5: int [-1, 0]
_6: <unnamed-signed:1> VARYING
_8: int [-2147483647, 2]
d.2_9: int VARYING
g_11: int VARYING
g_12: int VARYING
g_15(D): UNDEFINED
e_18: int VARYING
g_21: int [-1, 0]


Huh:
Visiting PHI node: f_10 = PHI <0(3), c.0_1(4)>
    Argument #0 (3 -> 6 executable)
        0: int [0, 0]
    Argument #1 (4 -> 6 executable)
        c.0_1: int [c.0_1, c.0_1]
Meeting
  int [0, 0]
and
  int [c.0_1, c.0_1]
to
  int VARYING
Intersecting
  int VARYING
and
  int VARYING
to
  int VARYING

Visiting PHI node: g_11 = PHI <g_12(3), g_21(4)>
    Argument #0 (3 -> 6 executable)
        g_12: int [g_12, g_12]
    Argument #1 (4 -> 6 executable)
        g_21: int [-1, 0]
Meeting
  int [g_12, g_12]
and
  int [-1, 0]
to
  int VARYING
Intersecting
  int VARYING
and
  int VARYING
to
  int VARYING
Folding PHI node: f_10 = PHI <0(3), c.0_1(4)>
EVRP:hybrid: RVRP found singleton 0
Queued PHI for removal.  Folds to: 0
Folding PHI node: g_11 = PHI <g_12(3), g_21(4)>
recomputation attempt on edge 4->6 for g_21 : Calculated :int VARYING
No folding possible
evrp visiting stmt c = f_10;
Folding statement: c = f_10;
EVRP:hybrid: RVRP found singleton 0
Folded into: c = 0;

We got int VARYING but still folded it to 0.

Reply via email to