diff options
author | Chris Lattner <sabre@nondot.org> | 2006-01-13 02:15:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-01-13 02:15:39 +0000 |
commit | 71d0e3de8de94f107e62db99eebae1d83bd24c94 (patch) | |
tree | 741991709d760c9b1e9dd9a22fb0934c0edb38e7 | |
parent | 2113db8b3fa93c21d78fa1db282fb481c4328b68 (diff) |
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
-rw-r--r-- | lib/VMCore/Function.cpp | 10 | ||||
-rw-r--r-- | 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 291e70a8f4..0cbe14ce04 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 ef9706b983..9dd7184b1d 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; |