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.