diff options
Diffstat (limited to 'llvm/utils/TableGen')
| -rw-r--r-- | llvm/utils/TableGen/IntrinsicEmitter.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/IntrinsicEmitter.cpp b/llvm/utils/TableGen/IntrinsicEmitter.cpp index f4157bb4609..d1e9b03b8c7 100644 --- a/llvm/utils/TableGen/IntrinsicEmitter.cpp +++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp @@ -304,6 +304,7 @@ void IntrinsicEmitter::EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,      const RecPair &ArgTypes = I->first;      const std::vector<Record*> &RetTys = ArgTypes.first;      const std::vector<Record*> &ParamTys = ArgTypes.second; +    std::vector<unsigned> OverloadedTypeIndices;      OS << "    VerifyIntrinsicPrototype(ID, IF, " << RetTys.size() << ", "         << ParamTys.size(); @@ -315,6 +316,9 @@ void IntrinsicEmitter::EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,        if (ArgType->isSubClassOf("LLVMMatchType")) {          unsigned Number = ArgType->getValueAsInt("Number"); +        assert(Number < OverloadedTypeIndices.size() && +               "Invalid matching number!"); +        Number = OverloadedTypeIndices[Number];          if (ArgType->isSubClassOf("LLVMExtendedElementVectorType"))            OS << "~(ExtendedElementVectorType | " << Number << ")";          else if (ArgType->isSubClassOf("LLVMTruncatedElementVectorType")) @@ -325,6 +329,9 @@ void IntrinsicEmitter::EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,          MVT::SimpleValueType VT = getValueType(ArgType->getValueAsDef("VT"));          OS << getEnumName(VT); +        if (VT == MVT::iAny || VT == MVT::fAny || VT == MVT::iPTRAny) +          OverloadedTypeIndices.push_back(j); +          if (VT == MVT::isVoid && j != 0 && j != je - 1)            throw "Var arg type not last argument";        } @@ -337,6 +344,9 @@ void IntrinsicEmitter::EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,        if (ArgType->isSubClassOf("LLVMMatchType")) {          unsigned Number = ArgType->getValueAsInt("Number"); +        assert(Number < OverloadedTypeIndices.size() && +               "Invalid matching number!"); +        Number = OverloadedTypeIndices[Number];          if (ArgType->isSubClassOf("LLVMExtendedElementVectorType"))            OS << "~(ExtendedElementVectorType | " << Number << ")";          else if (ArgType->isSubClassOf("LLVMTruncatedElementVectorType")) @@ -347,6 +357,9 @@ void IntrinsicEmitter::EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,          MVT::SimpleValueType VT = getValueType(ArgType->getValueAsDef("VT"));          OS << getEnumName(VT); +        if (VT == MVT::iAny || VT == MVT::fAny || VT == MVT::iPTRAny) +          OverloadedTypeIndices.push_back(j + RetTys.size()); +          if (VT == MVT::isVoid && j != 0 && j != je - 1)            throw "Var arg type not last argument";        }  | 

