From 6ce1d7dabb3c8c9a3c85bec434a9e695d854a1e6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 28 Sep 2005 01:34:32 +0000 Subject: [PATCH] Constant fold llvm.sqrt llvm-svn: 23487 --- lib/Transforms/Utils/Local.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index b1dd58331b6..a9cfcc0a920 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/lib/Transforms/Utils/Local.cpp @@ -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")