diff options
| author | John Criswell <criswell@uiuc.edu> | 2004-04-08 20:27:38 +0000 |
|---|---|---|
| committer | John Criswell <criswell@uiuc.edu> | 2004-04-08 20:27:38 +0000 |
| commit | 5201004ef90c8db352c0690ff8d62af9f2a92b73 (patch) | |
| tree | 1756e051d14065f177ac0c797e87a914c48a6341 /llvm/lib | |
| parent | 6d426519334bd42019d470d955daa305d0968dda (diff) | |
| download | bcm5719-llvm-5201004ef90c8db352c0690ff8d62af9f2a92b73.tar.gz bcm5719-llvm-5201004ef90c8db352c0690ff8d62af9f2a92b73.zip | |
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.
llvm-svn: 12781
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/VMCore/Function.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/VMCore/Verifier.cpp | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/VMCore/Function.cpp b/llvm/lib/VMCore/Function.cpp index 7d24916b650..332d598787e 100644 --- a/llvm/lib/VMCore/Function.cpp +++ b/llvm/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/llvm/lib/VMCore/Verifier.cpp b/llvm/lib/VMCore/Verifier.cpp index 30b37ff6fff..73192eb77f3 100644 --- a/llvm/lib/VMCore/Verifier.cpp +++ b/llvm/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; |

