================ @@ -5021,6 +5024,36 @@ bool llvm::UpgradeDebugInfo(Module &M) { return Modified; } +static void upgradeNVVMFnVectorAttr(const StringRef Attr, const char DimC, + GlobalValue *GV, const Metadata *V) { + Function *F = cast<Function>(GV); + + constexpr StringLiteral DefaultValue = "1"; + StringRef Vect3[3] = {DefaultValue, DefaultValue, DefaultValue}; + unsigned Length = 0; + + if (F->hasFnAttribute(Attr)) { + StringRef S = F->getFnAttribute(Attr).getValueAsString(); + for (; Length < 3 && !S.empty(); Length++) { + auto [Part, Rest] = S.split(','); + Vect3[Length] = Part.trim(); + S = Rest; + } + } + + const uint64_t VInt = mdconst::extract<ConstantInt>(V)->getZExtValue(); + const std::string VStr = llvm::utostr(VInt); + + const unsigned Dim = DimC - 'x'; + assert(Dim >= 0 && Dim < 3 && "Unexpected dim char"); ---------------- Artem-B wrote:
This could be made more explicit: ``` size_t Dim = StringRef("xyz").find(DimC); assert(Dim != npos); ``` Also, considering that we're parsing user input here, an assertion is not the best way to diagnose it. I'm not sure what's the standard way of dealing with broken input in autoupgrade. https://github.com/llvm/llvm-project/pull/127736 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits