Disable an xform we've had for a long time, pow(x,0.5) -> sqrt.
authorChris Lattner <sabre@nondot.org>
Thu, 10 Apr 2008 02:07:51 +0000 (02:07 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 10 Apr 2008 02:07:51 +0000 (02:07 +0000)
This is not safe for all inputs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49458 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/SimplifyLibCalls.cpp

index f7bc59fd2ee858ad053c64cf8134396449197b4f..6e4ac5ae4aee25f8e7ab612a4daab4ff6cf09fe9 100644 (file)
@@ -1179,9 +1179,17 @@ public:
       // pow(x, 0.0) -> 1.0
       return ReplaceCallWith(CI, ConstantFP::get(CI->getType(), 1.0));
     } else if (Op2C->isExactlyValue(0.5)) {
+      // FIXME: This is not safe for -0.0 and -inf.  This can only be done when
+      // 'unsafe' math optimizations are allowed.
+      // x    pow(x, 0.5)  sqrt(x)
+      // ---------------------------------------------
+      // -0.0    +0.0       -0.0
+      // -inf    +inf       NaN
+#if 0
       // pow(x, 0.5) -> sqrt(x)
       Value *Sqrt = CallInst::Create(SLC.get_sqrt(), Op1, "sqrt", CI);
       return ReplaceCallWith(CI, Sqrt);
+#endif
     } else if (Op2C->isExactlyValue(1.0)) {
       // pow(x, 1.0) -> x
       return ReplaceCallWith(CI, Op1);