On 10/4/18 1:43 PM, Joseph Myers wrote: > On Thu, 4 Oct 2018, Jeff Law wrote: > >>> I doubt you could prove that without LTO of the whole program because an >>> errno value set by a libm function call could always be checked in the >>> caller of whatever function is being compiled. >> Right, but if you have a series of calls like >> >> >> t1 = sqrt (x); >> t2 = sqrt (y); >> t3 = sqrt (z); >> return t1 + t2 + t3; >> >> You know that errno from the first two isn't examined and you could emit >> the hardware insn for sqrt in those cases. You couldn't do so for the >> 3rd because you don't necessarily have the caller context. > > No, you don't know that error from the first two isn't examined. sqrt > doesn't set errno on success. A caller could set errno to 0 before that > code, then check for errno == EDOM afterwards, meaning that any of the > sqrt arguments were negative. (The caller could also check whether the > result is a NaN and so not need errno, of course.) You're right of course.
Jeff