Add llvm.sqrt intrinsic, patch contributed by Morten Ofstad
authorChris Lattner <sabre@nondot.org>
Sat, 30 Apr 2005 03:44:07 +0000 (03:44 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 30 Apr 2005 03:44:07 +0000 (03:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21627 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Intrinsics.h
lib/Analysis/BasicAliasAnalysis.cpp
lib/VMCore/Function.cpp
lib/VMCore/Verifier.cpp

index 569f80a187e98a3021c64d7e1618627fa712283b..7acd5ca71a33bfd448daa3e42583203f89c21920 100644 (file)
@@ -63,6 +63,7 @@ namespace Intrinsic {
 
     // libm related functions.
     isunordered,    // Return true if either argument is a NaN
+    sqrt,
 
     // Input/Output intrinsics.
     readport,
index 7d9e21cb94c82870e6ae703cbac68e080b021037..21c6543f7545018b88a5301073086de167d548cb 100644 (file)
@@ -702,7 +702,7 @@ namespace {
 static const char *DoesntAccessMemoryTable[] = {
   // LLVM intrinsics:
   "llvm.frameaddress", "llvm.returnaddress", "llvm.readport",
-  "llvm.isunordered",
+  "llvm.isunordered", "llvm.sqrt",
 
   "abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl",
   "trunc", "truncf", "truncl", "ldexp",
index 2672e892c74a70441e6306dac5cb51edd3dda9ad..6740c6bbb0dec749794b237af9186f7c610cd9d1 100644 (file)
@@ -245,6 +245,7 @@ unsigned Function::getIntrinsicID() const {
     if (getName() == "llvm.setjmp")     return Intrinsic::setjmp;
     if (getName() == "llvm.sigsetjmp")  return Intrinsic::sigsetjmp;
     if (getName() == "llvm.siglongjmp") return Intrinsic::siglongjmp;
+    if (getName() == "llvm.sqrt")       return Intrinsic::sqrt;
     break;
   case 'v':
     if (getName() == "llvm.va_copy")  return Intrinsic::vacopy;
index da14c00065e03d43e455e0eb08a382180cc00f1e..d7b8f509621b59e7ef21043f5de3e7f7efabd15a 100644 (file)
@@ -723,6 +723,16 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
     NumArgs = 2;
     break;
 
+  case Intrinsic::sqrt:
+    Assert1(FT->getNumParams() == 1,
+            "Illegal # arguments for intrinsic function!", IF);
+    Assert1(FT->getParamType(0)->isFloatingPoint(),
+            "Argument is not a floating point type!", IF);
+    Assert1(FT->getReturnType() == FT->getParamType(0),
+            "Return type is not the same as argument type!", IF);
+    NumArgs = 1;
+    break;
+
   case Intrinsic::setjmp:          NumArgs = 1; break;
   case Intrinsic::longjmp:         NumArgs = 2; break;
   case Intrinsic::sigsetjmp:       NumArgs = 2; break;