Constant fold llvm.sqrt
authorChris Lattner <sabre@nondot.org>
Wed, 28 Sep 2005 01:34:32 +0000 (01:34 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 28 Sep 2005 01:34:32 +0000 (01:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23487 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/Local.cpp

index b1dd58331b6092e319f145fed5756b9ecba9c07e..a9cfcc0a9209d4cc18c11d0a22b3424e08d39905 100644 (file)
@@ -240,7 +240,9 @@ bool llvm::canConstantFoldCallTo(Function *F) {
   const std::string &Name = F->getName();
 
   switch (F->getIntrinsicID()) {
-  case Intrinsic::isunordered: return true;
+  case Intrinsic::isunordered:
+  case Intrinsic::sqrt:
+    return true;
   default: break;
   }
 
@@ -321,6 +323,12 @@ Constant *llvm::ConstantFoldCall(Function *F,
             return ConstantFP::get(Ty, log(V));
           else if (Name == "log10" && V > 0)
             return ConstantFoldFP(log10, V, Ty);
+          else if (Name == "llvm.sqrt") {
+            if (V >= -0.0)
+              return ConstantFP::get(Ty, sqrt(V));
+            else // Undefined
+              return ConstantFP::get(Ty, 0.0);
+          }
           break;
         case 's':
           if (Name == "sin")