From 71d0e3de8de94f107e62db99eebae1d83bd24c94 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 13 Jan 2006 02:15:39 +0000 Subject: [PATCH] Add recognition and verification of new llvm.stacksave/llvm.stackrestore intrinsics git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25266 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Function.cpp | 10 ++++++---- lib/VMCore/Verifier.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 291e70a8f45..0cbe14ce041 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -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; diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index ef9706b983e..9dd7184b1d7 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -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;