aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VMCore/Function.cpp3
-rw-r--r--lib/VMCore/Verifier.cpp20
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;