[PATCH] D65399: [InstCombine] canonicalize fneg before fmul/fdiv
Cameron McInally via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 29 11:37:10 PDT 2019
cameron.mcinally added a comment.
> 2. The reassociation tests show that we were missing an optimization opportunity to fold away fneg-of-fneg. My reading of IEEE-754 says that all of these transforms are allowed (regardless of binop/unop fneg version) because:
>
> "For all other operations [besides copy/abs/negate/copysign], this standard does not specify the sign bit of a NaN result."
>
> In all of these transforms, we always have some other binop (fadd/fsub/fmul/fdiv), so we are free to flip the sign bit of a potential intermediate NaN operand. (If that interpretation is wrong, then we must already have a bug in the existing transforms?)
Oh, that's an interesting thought...
There's one edge-case I've been playing with that is worth mentioning. This transform could cause problems with denormals and Flush-To-Zero (FTZ). For example:
-0.0 - D --> 0.0
negate(D) --> -D
AFAICT, FTZ breaks IEEE-754 compatibility already, so all bets are off at that point. My certainty-level is low about this though. I still need to work through it.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65399/new/
https://reviews.llvm.org/D65399
More information about the llvm-commits
mailing list