https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107972
Bug ID: 107972 Summary: backward propagation of finite property not performed Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: drepper.fsp+rhbz at gmail dot com Target Milestone: --- Here is another example where with the help of the FP ranger capabilities the compiler should generate better code than it does today (trunk): double f(double a, double b) { if (!__builtin_isfinite(a)) return -1.0; double res = a + b; if (! __builtin_isfinite(res)) __builtin_unreachable(); return res; } The condition guaranteed by the __builtin_unreachable implies that neither a nor b cannot be finite. Hence the initial comparison can be elided. The same is true for - and * and also for the first operand of /.