https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67975
Bug ID: 67975 Summary: Failure to optimise equality between two call sequences Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rsandifo at gcc dot gnu.org Target Milestone: --- We don't simplify the following test to "return 1", even with fast math enabled: int f1 (double x, double y) { double z1 = __builtin_cos(y<10 ? x : __builtin_tan(x<20 ? x : y)); double z2 = __builtin_cos(y<10 ? x : __builtin_tan(x<20 ? x : y)); return z1 == z2; } whereas we do for: int f1 (double x, double y) { return (__builtin_cos(y<10 ? x : __builtin_tan(x<20 ? x : y)) == __builtin_cos(y<10 ? x : __builtin_tan(x<20 ? x : y))); }