diff options
-rw-r--r-- | lib/VMCore/Function.cpp | 3 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 7d24916b65..332d598787 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -227,6 +227,7 @@ unsigned Function::getIntrinsicID() const { break; case 'r': if (getName() == "llvm.returnaddress") return Intrinsic::returnaddress; + if (getName() == "llvm.readport") return Intrinsic::readport; break; case 's': if (getName() == "llvm.setjmp") return Intrinsic::setjmp; @@ -237,6 +238,8 @@ unsigned Function::getIntrinsicID() const { if (getName() == "llvm.va_copy") return Intrinsic::vacopy; if (getName() == "llvm.va_end") return Intrinsic::vaend; if (getName() == "llvm.va_start") return Intrinsic::vastart; + case 'w': + if (getName() == "llvm.writeport") return Intrinsic::writeport; break; } // The "llvm." namespace is reserved! diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 30b37ff6ff..73192eb77f 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -606,6 +606,26 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { NumArgs = 1; break; + // Verify that read and write port have integral parameters of the correct + // signed-ness. + case Intrinsic::writeport: + Assert1(FT->getNumParams() == 2, + "Illegal # arguments for intrinsic function!", IF); + Assert1(FT->getParamType(0)->isUnsigned(), + "First argument not unsigned int!", IF); + Assert1(FT->getParamType(1)->isIntegral(), + "First argument not unsigned int!", IF); + NumArgs = 2; + break; + + case Intrinsic::readport: + Assert1(FT->getNumParams() == 1, + "Illegal # arguments for intrinsic function!", IF); + Assert1(FT->getParamType(0)->isUnsigned(), + "First argument not unsigned int!", IF); + NumArgs = 1; + break; + case Intrinsic::setjmp: NumArgs = 1; break; case Intrinsic::longjmp: NumArgs = 2; break; case Intrinsic::sigsetjmp: NumArgs = 2; break; |