[PATCH] D16696: InstCombine: fabs(x) * fabs(x) -> x * x

Amaury SECHET via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 29 13:46:55 PST 2016

deadalnix added a subscriber: deadalnix.

Comment at: lib/Transforms/InstCombine/InstCombineMulDivRem.cpp:621
@@ -620,1 +620,3 @@
+      // fabs(X) * fabs(X) -> X * X
+      if (II->getIntrinsicID() == Intrinsic::fabs) {
DavidKreitzer wrote:
> arsenm wrote:
> > I'm pretty sure this is always safe
> If X is -NaN, this transform will change the result of fabs(X) * fabs(X) from +NaN to -NaN. (In all other cases, it will produce the same result.)
> So my recommendation is to guard this transformation by I.hasNoNaNs().
My understanding of the standard is that NaN has a sign in order to avoid special casing it for operation like fabs. There is no expectation that it has a well defined value.


More information about the llvm-commits mailing list