Author: d0k Date: Sat Aug 24 06:04:34 2019 New Revision: 369846 URL: http://llvm.org/viewvc/llvm-project?rev=369846&view=rev Log: [OpenCL] Microoptimize OCL2Qual a bit
Still not optimal, but makes clang 25k smaller. Modified: cfe/trunk/lib/Sema/SemaLookup.cpp cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp Modified: cfe/trunk/lib/Sema/SemaLookup.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=369846&r1=369845&r2=369846&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaLookup.cpp (original) +++ cfe/trunk/lib/Sema/SemaLookup.cpp Sat Aug 24 06:04:34 2019 @@ -686,8 +686,8 @@ LLVM_DUMP_METHOD void LookupResult::dump /// of (vector sizes) x (types) . static void GetQualTypesForOpenCLBuiltin( ASTContext &Context, const OpenCLBuiltinStruct &OpenCLBuiltin, - unsigned &GenTypeMaxCnt, std::vector<QualType> &RetTypes, - SmallVector<std::vector<QualType>, 5> &ArgTypes) { + unsigned &GenTypeMaxCnt, SmallVector<QualType, 1> &RetTypes, + SmallVector<SmallVector<QualType, 1>, 5> &ArgTypes) { // Get the QualType instances of the return types. unsigned Sig = SignatureTable[OpenCLBuiltin.SigTableIndex]; OCL2Qual(Context, TypeTable[Sig], RetTypes); @@ -696,11 +696,11 @@ static void GetQualTypesForOpenCLBuiltin // Get the QualType instances of the arguments. // First type is the return type, skip it. for (unsigned Index = 1; Index < OpenCLBuiltin.NumTypes; Index++) { - std::vector<QualType> Ty; + SmallVector<QualType, 1> Ty; OCL2Qual(Context, TypeTable[SignatureTable[OpenCLBuiltin.SigTableIndex + Index]], Ty); - ArgTypes.push_back(Ty); GenTypeMaxCnt = (Ty.size() > GenTypeMaxCnt) ? Ty.size() : GenTypeMaxCnt; + ArgTypes.push_back(std::move(Ty)); } } @@ -713,11 +713,10 @@ static void GetQualTypesForOpenCLBuiltin /// \param FunctionList (out) List of FunctionTypes. /// \param RetTypes (in) List of the possible return types. /// \param ArgTypes (in) List of the possible types for the arguments. -static void -GetOpenCLBuiltinFctOverloads(ASTContext &Context, unsigned GenTypeMaxCnt, - std::vector<QualType> &FunctionList, - std::vector<QualType> &RetTypes, - SmallVector<std::vector<QualType>, 5> &ArgTypes) { +static void GetOpenCLBuiltinFctOverloads( + ASTContext &Context, unsigned GenTypeMaxCnt, + std::vector<QualType> &FunctionList, SmallVector<QualType, 1> &RetTypes, + SmallVector<SmallVector<QualType, 1>, 5> &ArgTypes) { FunctionProtoType::ExtProtoInfo PI; PI.Variadic = false; @@ -765,8 +764,8 @@ static void InsertOCLBuiltinDeclarations BuiltinTable[FctIndex + SignatureIndex]; ASTContext &Context = S.Context; - std::vector<QualType> RetTypes; - SmallVector<std::vector<QualType>, 5> ArgTypes; + SmallVector<QualType, 1> RetTypes; + SmallVector<SmallVector<QualType, 1>, 5> ArgTypes; // Obtain QualType lists for the function signature. GetQualTypesForOpenCLBuiltin(Context, OpenCLBuiltin, GenTypeMaxCnt, Modified: cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp?rev=369846&r1=369845&r2=369846&view=diff ============================================================================== --- cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp (original) +++ cfe/trunk/utils/TableGen/ClangOpenCLBuiltinEmitter.cpp Sat Aug 24 06:04:34 2019 @@ -434,17 +434,17 @@ void BuiltinNameEmitter::EmitQualTypeFin // Step 2: Qualifiers and other type properties such as vector size are // applied. static void OCL2Qual(ASTContext &Context, const OpenCLTypeStruct &Ty, - std::vector<QualType> &QT) { + llvm::SmallVectorImpl<QualType> &QT) { // Number of scalar types in the GenType. unsigned GenTypeNumTypes; // Pointer to the list of vector sizes for the GenType. - llvm::SmallVector<unsigned, 6> *GenVectorSizes; + llvm::ArrayRef<unsigned> GenVectorSizes; )"; // Generate list of vector sizes for each generic type. for (const auto *VectList : Records.getAllDerivedDefinitions("IntList")) { - OS << " llvm::SmallVector<unsigned, 6> List" - << VectList->getValueAsString("Name") << "{"; + OS << " constexpr unsigned List" + << VectList->getValueAsString("Name") << "[] = {"; for (const auto V : VectList->getValueAsListOfInts("List")) { OS << V << ", "; } @@ -458,6 +458,7 @@ static void OCL2Qual(ASTContext &Context // Switch cases for generic types. for (const auto *GenType : Records.getAllDerivedDefinitions("GenericType")) { OS << " case OCLT_" << GenType->getValueAsString("Name") << ":\n"; + OS << " QT.append({"; // Build the Cartesian product of (vector sizes) x (types). Only insert // the plain scalar types for now; other type information such as vector @@ -468,10 +469,11 @@ static void OCL2Qual(ASTContext &Context I++) { for (const auto *T : GenType->getValueAsDef("TypeList")->getValueAsListOfDefs("List")) { - OS << " QT.push_back(Context." - << T->getValueAsDef("QTName")->getValueAsString("Name") << ");\n"; + OS << "Context." + << T->getValueAsDef("QTName")->getValueAsString("Name") << ", "; } } + OS << "});\n;"; // GenTypeNumTypes is the number of types in the GenType // (e.g. float/double/half). OS << " GenTypeNumTypes = " @@ -480,7 +482,7 @@ static void OCL2Qual(ASTContext &Context << ";\n"; // GenVectorSizes is the list of vector sizes for this GenType. // QT contains GenTypeNumTypes * #GenVectorSizes elements. - OS << " GenVectorSizes = &List" + OS << " GenVectorSizes = List" << GenType->getValueAsDef("VectorList")->getValueAsString("Name") << ";\n"; OS << " break;\n"; @@ -521,9 +523,9 @@ static void OCL2Qual(ASTContext &Context OS << R"( for (unsigned I = 0; I < QT.size(); I++) { // For scalars, size is 1. - if ((*GenVectorSizes)[I / GenTypeNumTypes] != 1) { + if (GenVectorSizes[I / GenTypeNumTypes] != 1) { QT[I] = Context.getExtVectorType(QT[I], - (*GenVectorSizes)[I / GenTypeNumTypes]); + GenVectorSizes[I / GenTypeNumTypes]); } } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits