================ @@ -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"); ---------------- AlexMaclean wrote:
We already checked to ensure the char is x, y or z before calling this function. The assert here is just to double check assumptions. The subtraction based implementation is a bit more efficient than using StringRef::find. 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