https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67971
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2015-10-15 Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- VRP jump-threads this into sth PRE then can transform to <bb 2>: if (cond_3(D) != 0) goto <bb 3>; else goto <bb 4>; <bb 3>: z1_5 = __builtin_cos (x_4(D)); goto <bb 5>; <bb 4>: z1_7 = __builtin_cos (y_6(D)); <bb 5>: # iftmp.0_2 = PHI <y_6(D)(4), x_4(D)(3)> # z1_13 = PHI <z1_7(4), z1_5(3)> # prephitmp_1 = PHI <z1_7(4), z1_5(3)> # RANGE [0, 1] _9 = prephitmp_1 == z1_13; # RANGE [0, 1] NONZERO 1 _10 = (int) _9; return _10; leaving the followup missed equivalency for the inserted PHI. but then somehow DOM running later CSEing z1_13 and prephitmp_1 fails to fold the comparison and we end up with _9 = z1_13 == z1_13; which even forwprop doesn't simplify (even though it is supposed to fold all stmts). We do have (simplify (eq @0 @0) (if (! FLOAT_TYPE_P (TREE_TYPE (@0)) || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0)))) { constant_boolean_node (true, type); })) but for some reason it doesn't trigger. Investigating.