From e899705c27719afb24d34d194b787d2fc496b39c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 23 May 2004 21:16:51 +0000 Subject: Recognize and verify the new GC intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13687 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Verifier.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'lib/VMCore/Verifier.cpp') diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index b69511b..7d8f8ff 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -653,15 +653,14 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { NumArgs = 1; break; - case Intrinsic:: readio: { - const Type * ParamType = FT->getParamType(0); - const Type * ReturnType = FT->getReturnType(); + case Intrinsic::readio: { + const PointerType *ParamType = dyn_cast(FT->getParamType(0)); + const Type *ReturnType = FT->getReturnType(); Assert1(FT->getNumParams() == 1, "Illegal # arguments for intrinsic function!", IF); - Assert1(isa(ParamType), - "First argument not a pointer!", IF); - Assert1(((cast(ParamType)->getElementType()) == ReturnType), + Assert1(ParamType, "First argument not a pointer!", IF); + Assert1(ParamType->getElementType() == ReturnType, "Pointer type doesn't match return type!", IF); NumArgs = 1; break; @@ -672,6 +671,17 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { case Intrinsic::sigsetjmp: NumArgs = 2; break; case Intrinsic::siglongjmp: NumArgs = 2; break; + case Intrinsic::gcroot: + Assert1(FT->getNumParams() == 2, + "Illegal # arguments for intrinsic function!", IF); + Assert1(isa(CI.getOperand(2)) || + isa(CI.getOperand(2)), + "Second argument to llvm.gcroot must be a constant!", &CI); + NumArgs = 2; + break; + case Intrinsic::gcread: NumArgs = 1; break; + case Intrinsic::gcwrite: NumArgs = 2; break; + case Intrinsic::dbg_stoppoint: NumArgs = 4; break; case Intrinsic::dbg_region_start:NumArgs = 1; break; case Intrinsic::dbg_region_end: NumArgs = 1; break; -- cgit v1.1