Path: blob/main/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h
35267 views
//===--- AMDGPUHSAMetadataStreamer.h ----------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8/// \file9/// AMDGPU HSA Metadata Streamer.10///11//12//===----------------------------------------------------------------------===//1314#ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H15#define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H1617#include "Utils/AMDGPUDelayedMCExpr.h"18#include "llvm/BinaryFormat/MsgPackDocument.h"19#include "llvm/Support/AMDGPUMetadata.h"20#include "llvm/Support/Alignment.h"21#include "llvm/Support/Compiler.h"2223namespace llvm {2425class AMDGPUTargetStreamer;26class Argument;27class DataLayout;28class Function;29class MachineFunction;30class MDNode;31class Module;32struct SIProgramInfo;33class Type;3435namespace AMDGPU {3637namespace IsaInfo {38class AMDGPUTargetID;39}4041namespace HSAMD {4243class MetadataStreamer {44public:45virtual ~MetadataStreamer() = default;4647virtual bool emitTo(AMDGPUTargetStreamer &TargetStreamer) = 0;4849virtual void begin(const Module &Mod,50const IsaInfo::AMDGPUTargetID &TargetID) = 0;5152virtual void end() = 0;5354virtual void emitKernel(const MachineFunction &MF,55const SIProgramInfo &ProgramInfo) = 0;5657protected:58virtual void emitVersion() = 0;59virtual void emitHiddenKernelArgs(const MachineFunction &MF, unsigned &Offset,60msgpack::ArrayDocNode Args) = 0;61virtual void emitKernelAttrs(const Function &Func,62msgpack::MapDocNode Kern) = 0;63};6465class LLVM_EXTERNAL_VISIBILITY MetadataStreamerMsgPackV466: public MetadataStreamer {67protected:68std::unique_ptr<DelayedMCExprs> DelayedExprs =69std::make_unique<DelayedMCExprs>();7071std::unique_ptr<msgpack::Document> HSAMetadataDoc =72std::make_unique<msgpack::Document>();7374void dump(StringRef HSAMetadataString) const;7576void verify(StringRef HSAMetadataString) const;7778std::optional<StringRef> getAccessQualifier(StringRef AccQual) const;7980std::optional<StringRef>81getAddressSpaceQualifier(unsigned AddressSpace) const;8283StringRef getValueKind(Type *Ty, StringRef TypeQual,84StringRef BaseTypeName) const;8586std::string getTypeName(Type *Ty, bool Signed) const;8788msgpack::ArrayDocNode getWorkGroupDimensions(MDNode *Node) const;8990msgpack::MapDocNode getHSAKernelProps(const MachineFunction &MF,91const SIProgramInfo &ProgramInfo,92unsigned CodeObjectVersion) const;9394void emitVersion() override;9596void emitTargetID(const IsaInfo::AMDGPUTargetID &TargetID);9798void emitPrintf(const Module &Mod);99100void emitKernelLanguage(const Function &Func, msgpack::MapDocNode Kern);101102void emitKernelAttrs(const Function &Func, msgpack::MapDocNode Kern) override;103104void emitKernelArgs(const MachineFunction &MF, msgpack::MapDocNode Kern);105106void emitKernelArg(const Argument &Arg, unsigned &Offset,107msgpack::ArrayDocNode Args);108109void emitKernelArg(const DataLayout &DL, Type *Ty, Align Alignment,110StringRef ValueKind, unsigned &Offset,111msgpack::ArrayDocNode Args,112MaybeAlign PointeeAlign = std::nullopt,113StringRef Name = "", StringRef TypeName = "",114StringRef BaseTypeName = "", StringRef ActAccQual = "",115StringRef AccQual = "", StringRef TypeQual = "");116117void emitHiddenKernelArgs(const MachineFunction &MF, unsigned &Offset,118msgpack::ArrayDocNode Args) override;119120msgpack::DocNode &getRootMetadata(StringRef Key) {121return HSAMetadataDoc->getRoot().getMap(/*Convert=*/true)[Key];122}123124msgpack::DocNode &getHSAMetadataRoot() {125return HSAMetadataDoc->getRoot();126}127128public:129MetadataStreamerMsgPackV4() = default;130~MetadataStreamerMsgPackV4() = default;131132bool emitTo(AMDGPUTargetStreamer &TargetStreamer) override;133134void begin(const Module &Mod,135const IsaInfo::AMDGPUTargetID &TargetID) override;136137void end() override;138139void emitKernel(const MachineFunction &MF,140const SIProgramInfo &ProgramInfo) override;141};142143class MetadataStreamerMsgPackV5 : public MetadataStreamerMsgPackV4 {144protected:145void emitVersion() override;146void emitHiddenKernelArgs(const MachineFunction &MF, unsigned &Offset,147msgpack::ArrayDocNode Args) override;148void emitKernelAttrs(const Function &Func, msgpack::MapDocNode Kern) override;149150public:151MetadataStreamerMsgPackV5() = default;152~MetadataStreamerMsgPackV5() = default;153};154155class MetadataStreamerMsgPackV6 final : public MetadataStreamerMsgPackV5 {156protected:157void emitVersion() override;158159public:160MetadataStreamerMsgPackV6() = default;161~MetadataStreamerMsgPackV6() = default;162};163164} // end namespace HSAMD165} // end namespace AMDGPU166} // end namespace llvm167168#endif // LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H169170171