Index: lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- lib/CodeGen/CGOpenMPRuntime.cpp +++ lib/CodeGen/CGOpenMPRuntime.cpp @@ -7565,10 +7565,18 @@ Masked.push_back('M'); break; } + + std::string Buffer; + if (Fn->hasFnAttribute("vector-variants")) { + llvm::Attribute Attr = Fn->getFnAttribute("vector-variants"); + Buffer = Attr.getValueAsString().str(); + } + llvm::raw_string_ostream Out(Buffer); + for (auto Mask : Masked) { for (auto &Data : ISAData) { - SmallString<256> Buffer; - llvm::raw_svector_ostream Out(Buffer); + if (!Buffer.empty()) + Out << ","; Out << "_ZGV" << Data.ISA << Mask; if (!VLENVal) { Out << llvm::APSInt::getUnsigned(Data.VecRegSize / @@ -7596,9 +7604,11 @@ Out << 'a' << ParamAttr.Alignment; } Out << '_' << Fn->getName(); - Fn->addFnAttr(Out.str()); + Out.flush(); } } + + Fn->addFnAttr("vector-variants", Out.str()); } void CGOpenMPRuntime::emitDeclareSimdFunction(const FunctionDecl *FD,