Add recognition and verification of new llvm.stacksave/llvm.stackrestore intrinsics
authorChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 02:15:39 +0000 (02:15 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 02:15:39 +0000 (02:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25266 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Function.cpp
lib/VMCore/Verifier.cpp

index 291e70a8f45b1d91f57bb47b6af44caa767933c6..0cbe14ce0416fb616f924bdb49862b23a7ee1fad 100644 (file)
@@ -249,10 +249,12 @@ unsigned Function::getIntrinsicID() const {
     if (getName() == "llvm.readcyclecounter") return Intrinsic::readcyclecounter;
     break;
   case 's':
-    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;
+    if (getName() == "llvm.setjmp")       return Intrinsic::setjmp;
+    if (getName() == "llvm.sigsetjmp")    return Intrinsic::sigsetjmp;
+    if (getName() == "llvm.siglongjmp")   return Intrinsic::siglongjmp;
+    if (getName() == "llvm.stackrestore") return Intrinsic::stackrestore;
+    if (getName() == "llvm.stacksave")    return Intrinsic::stacksave;
+    if (getName() == "llvm.sqrt")         return Intrinsic::sqrt;
     break;
   case 'v':
     if (getName() == "llvm.va_copy")  return Intrinsic::vacopy;
index ef9706b983ee9f00810ad6f0997226857f7b06c1..9dd7184b1d7f31c418ef21ccfcab6345a7710610 100644 (file)
@@ -796,6 +796,18 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
   case Intrinsic::memmove:         NumArgs = 4; break;
   case Intrinsic::memset:          NumArgs = 4; break;
 
+  case Intrinsic::stacksave:
+    NumArgs = 0;
+    Assert1(CI.getType() == PointerType::get(Type::SByteTy),
+            "llvm.stacksave must return an sbyte*", &CI);
+    break;
+  case Intrinsic::stackrestore:
+    NumArgs = 1;
+    Assert1(CI.getOperand(1)->getType() == PointerType::get(Type::SByteTy),
+            "llvm.stackrestore must take an sbyte*", &CI);
+    Assert1(CI.getType() == Type::VoidTy,
+            "llvm.stackrestore return void", &CI);
+    break;
   case Intrinsic::prefetch:        NumArgs = 3; break;
   case Intrinsic::pcmarker:
     NumArgs = 1;