aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJohn Criswell <criswell@uiuc.edu>2004-04-08 20:27:38 +0000
committerJohn Criswell <criswell@uiuc.edu>2004-04-08 20:27:38 +0000
commit9570301ee8e473c4e6df3eb71b82b79a6072891a (patch)
treeb4c7c83530870b919e1a97d9980128e423f20f91 /lib
parent60a505b1f63668683da1288848dbb3c4a9c26ec1 (diff)
Added the llvm.readport and llvm.writeport intrinsics.
The Verifier ensures that their parameters are of integral types and have the correct sign, but it does not enforce any size restrictions because such restrictions are platform dependent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12781 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-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;