================ @@ -48,6 +48,71 @@ static bool reportValueError(LLVMContext *Ctx, Twine ParamName, return true; } +// Template function to get formatted type string based on C++ type +template <typename T> std::string getTypeFormatted() { + if constexpr (std::is_same_v<T, MDString>) { + return "string"; + } else if constexpr (std::is_same_v<T, MDNode *> || + std::is_same_v<T, const MDNode *>) { + return "metadata"; + } else if constexpr (std::is_same_v<T, ConstantAsMetadata *> || + std::is_same_v<T, const ConstantAsMetadata *>) { + return "constant"; + } else if constexpr (std::is_same_v<T, ConstantAsMetadata>) { + return "constant"; + } else if constexpr (std::is_same_v<T, ConstantInt *> || + std::is_same_v<T, const ConstantInt *>) { + return "constant int"; + } else if constexpr (std::is_same_v<T, ConstantInt>) { + return "constant int"; + } + return "unknown"; +} + +// Helper function to get the actual type of a metadata operand +std::string getActualMDType(const MDNode *Node, unsigned Index) { + if (!Node || Index >= Node->getNumOperands()) + return "null"; + + Metadata *Op = Node->getOperand(Index); + if (!Op) + return "null"; + + if (isa<MDString>(Op)) + return getTypeFormatted<MDString>(); + + if (isa<ConstantAsMetadata>(Op)) { + if (auto *CAM = dyn_cast<ConstantAsMetadata>(Op)) { + Type *T = CAM->getValue()->getType(); + if (T->isIntegerTy()) + return (Twine("i") + Twine(T->getIntegerBitWidth())).str(); + if (T->isFloatingPointTy()) + return T->isFloatTy() ? getTypeFormatted<float>() + : T->isDoubleTy() ? getTypeFormatted<double>() + : "fp"; + + return getTypeFormatted<ConstantAsMetadata>(); + } + } + if (isa<MDNode>(Op)) + return getTypeFormatted<MDNode *>(); + + return "unknown"; +} + +// Helper function to simplify error reporting for invalid metadata values +template <typename ET> +auto reportInvalidTypeError(LLVMContext *Ctx, Twine ParamName, ---------------- llvm-beanz wrote:
`auto` as a return type rarely meets LLVM's coding standards: see: https://llvm.org/docs/CodingStandards.html#use-auto-type-deduction-to-make-code-more-readable https://github.com/llvm/llvm-project/pull/144577 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits