https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93934
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2020-02-26 Ever confirmed|0 |1 --- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Alexander Monakov from comment #5) > Ah, indeed. fld won't raise FE_INVALID for 80-bit long double, but here > 'result' is stored on the stack in 64-bit format. > > So: fcmov and 80-bit fldt don't trap, 32-bit flds and 64-bit fldl do. > > Somehow RTL if-conversion would have to check "-fsignaling-nans is requested > and the target may raise FE_INVALID on loads" among other reason to reject a > speculative load. > > I am afraid though that several other optimizations do not anticipate that > x87 fp loads can raise exceptions on SNaNs either, making -fsignaling-nans > difficult to implement in full. I suppose a fldt followed by "truncation" to 32/64 bit would then trap at the truncation step? But yes, this will be difficult to handle. We'd have to mark all loads from not must-initialized memory as possibly trapping and thus not eligible for if-conversion. And this applies to possibly uninitialized registers as well which might be spilled or allocated to the stack. So confirmed at least. It's also more a middle-end issue affecting a subset of targets only.