diff options
author | Jim Laskey <jlaskey@mac.com> | 2007-02-06 18:02:54 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2007-02-06 18:02:54 +0000 |
commit | ba4cc09f51eaf7bf7dff12bb4bb405caab3c29d1 (patch) | |
tree | d3cb20b6a959aec67805d5619906572c775cf5a3 | |
parent | 53a58106d418db0acfe6a0c0821164158ed1ef2b (diff) |
Support var arg intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33962 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Intrinsics.td | 7 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 4 | ||||
-rw-r--r-- | utils/TableGen/FileLexer.l | 2 | ||||
-rw-r--r-- | utils/TableGen/IntrinsicEmitter.cpp | 5 |
4 files changed, 17 insertions, 1 deletions
diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index 3fc55f79da..bda4a927bb 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -88,6 +88,8 @@ def llvm_v4i32_ty : LLVMPackedType<v4i32, 4, llvm_i32_ty>; // 4 x i32 def llvm_v4f32_ty : LLVMPackedType<v4f32, 4, llvm_float_ty>; // 4 x float def llvm_v2f64_ty : LLVMPackedType<v2f64, 2, llvm_double_ty>;// 2 x double +def ... : LLVMType<isVoid, "...">; // vararg + //===----------------------------------------------------------------------===// // Intrinsic Definitions. //===----------------------------------------------------------------------===// @@ -217,6 +219,11 @@ def int_dbg_func_start : Intrinsic<[llvm_void_ty, llvm_descriptor_ty]>; def int_dbg_declare : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_descriptor_ty]>; +//===------------------ Exception Handling Intrinsics----------------------===// +// +def int_eh_exception : Intrinsic<[llvm_ptr_ty]>; +def int_eh_handlers : Intrinsic<[llvm_ptr_ty, llvm_ptr_ty, ...]>; + //===----------------------------------------------------------------------===// // Target-specific intrinsics //===----------------------------------------------------------------------===// diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index f5b0550d88..c2fd8746b7 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -987,6 +987,10 @@ void Verifier::VerifyIntrinsicPrototype(Function *F, ...) { for (unsigned ArgNo = 0; 1; ++ArgNo) { int TypeID = va_arg(VA, int); + if (TypeID == -2) { + break; + } + if (TypeID == -1) { if (ArgNo != FTy->getNumParams()+1) CheckFailed("Intrinsic prototype has too many arguments!", F); diff --git a/utils/TableGen/FileLexer.l b/utils/TableGen/FileLexer.l index cc6825f5e0..fa89b8ba04 100644 --- a/utils/TableGen/FileLexer.l +++ b/utils/TableGen/FileLexer.l @@ -176,7 +176,7 @@ using namespace llvm; Comment \/\/.* -Identifier [a-zA-Z_][0-9a-zA-Z_]* +Identifier [a-zA-Z_][0-9a-zA-Z_]*|\.\.\. Integer [-+]?[0-9]+|0x[0-9a-fA-F]+|0b[01]+ CodeFragment \[\{([^}]+|\}[^\]])*\}\] StringVal \"[^"]*\" diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp index 7cd03751de..9a1132a275 100644 --- a/utils/TableGen/IntrinsicEmitter.cpp +++ b/utils/TableGen/IntrinsicEmitter.cpp @@ -109,6 +109,11 @@ EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints, } static void EmitTypeVerify(std::ostream &OS, Record *ArgType) { + if (ArgType->getValueAsString("TypeVal") == "...") { + OS << "-2, "; + return; + } + OS << "(int)" << ArgType->getValueAsString("TypeVal") << ", "; // If this is an integer type, check the width is correct. if (ArgType->isSubClassOf("LLVMIntegerType")) |