LLVM  8.0.1
AMDGPUTargetStreamer.h
Go to the documentation of this file.
1 //===-- AMDGPUTargetStreamer.h - AMDGPU Target Streamer --------*- C++ -*--===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
11 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
12 
13 #include "AMDKernelCodeT.h"
15 #include "llvm/MC/MCStreamer.h"
19 
20 namespace llvm {
21 #include "AMDGPUPTNote.h"
22 
23 class DataLayout;
24 class Function;
25 class MCELFStreamer;
26 class MCSymbol;
27 class MDNode;
28 class Module;
29 class Type;
30 
32 protected:
33  MCContext &getContext() const { return Streamer.getContext(); }
34 
35 public:
37 
38  virtual void EmitDirectiveAMDGCNTarget(StringRef Target) = 0;
39 
41  uint32_t Minor) = 0;
42 
43  virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
44  uint32_t Stepping,
45  StringRef VendorName,
46  StringRef ArchName) = 0;
47 
48  virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0;
49 
50  virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0;
51 
52  /// \returns True on success, false on failure.
53  virtual bool EmitISAVersion(StringRef IsaVersionString) = 0;
54 
55  /// \returns True on success, false on failure.
56  virtual bool EmitHSAMetadataV2(StringRef HSAMetadataString);
57 
58  /// \returns True on success, false on failure.
59  virtual bool EmitHSAMetadataV3(StringRef HSAMetadataString);
60 
61  /// Emit HSA Metadata
62  ///
63  /// When \p Strict is true, known metadata elements must already be
64  /// well-typed. When \p Strict is false, known types are inferred and
65  /// the \p HSAMetadata structure is updated with the correct types.
66  ///
67  /// \returns True on success, false on failure.
68  virtual bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
69  bool Strict) = 0;
70 
71  /// \returns True on success, false on failure.
72  virtual bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) = 0;
73 
74  /// \returns True on success, false on failure.
75  virtual bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) = 0;
76 
77  virtual void EmitAmdhsaKernelDescriptor(
78  const MCSubtargetInfo &STI, StringRef KernelName,
79  const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
80  uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
81  bool ReserveXNACK) = 0;
82 
83  static StringRef getArchNameFromElfMach(unsigned ElfMach);
84  static unsigned getElfMach(StringRef GPU);
85 };
86 
89 public:
91 
93 
95  uint32_t Minor) override;
96 
98  uint32_t Stepping, StringRef VendorName,
99  StringRef ArchName) override;
100 
101  void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
102 
103  void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
104 
105  /// \returns True on success, false on failure.
106  bool EmitISAVersion(StringRef IsaVersionString) override;
107 
108  /// \returns True on success, false on failure.
109  bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
110  bool Strict) override;
111 
112  /// \returns True on success, false on failure.
113  bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
114 
115  /// \returns True on success, false on failure.
116  bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
117 
119  const MCSubtargetInfo &STI, StringRef KernelName,
120  const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
121  uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
122  bool ReserveXNACK) override;
123 };
124 
127 
128  void EmitNote(StringRef Name, const MCExpr *DescSize, unsigned NoteType,
129  function_ref<void(MCELFStreamer &)> EmitDesc);
130 
131 public:
133 
135 
137 
139  uint32_t Minor) override;
140 
142  uint32_t Stepping, StringRef VendorName,
143  StringRef ArchName) override;
144 
145  void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
146 
147  void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
148 
149  /// \returns True on success, false on failure.
150  bool EmitISAVersion(StringRef IsaVersionString) override;
151 
152  /// \returns True on success, false on failure.
153  bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
154  bool Strict) override;
155 
156  /// \returns True on success, false on failure.
157  bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
158 
159  /// \returns True on success, false on failure.
160  bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
161 
163  const MCSubtargetInfo &STI, StringRef KernelName,
164  const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
165  uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
166  bool ReserveXNACK) override;
167 };
168 
169 }
170 #endif
In-memory representation of HSA metadata.
Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
Definition: MsgPackReader.h:49
This class represents lattice values for constants.
Definition: AllocatorList.h:24
formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...
Target specific streamer interface.
Definition: MCStreamer.h:84
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLExtras.h:117
virtual void EmitAmdhsaKernelDescriptor(const MCSubtargetInfo &STI, StringRef KernelName, const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR, uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr, bool ReserveXNACK)=0
virtual bool EmitHSAMetadataV2(StringRef HSAMetadataString)
virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type)=0
virtual bool EmitHSAMetadataV3(StringRef HSAMetadataString)
MCContext & getContext() const
Definition: MCStreamer.h:251
amdgpu Simplify well known AMD library false Value Value const Twine & Name
constexpr char SymbolName[]
Key for Kernel::Metadata::mSymbolName.
AMD Kernel Code Object (amd_kernel_code_t).
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:36
static StringRef getArchNameFromElfMach(unsigned ElfMach)
virtual bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata)=0
Context object for machine code objects.
Definition: MCContext.h:63
This is a data structure for representing MessagePack "documents", with methods to go to and from Mes...
Streaming machine code generation interface.
Definition: MCStreamer.h:189
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
static unsigned getElfMach(StringRef GPU)
virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, uint32_t Stepping, StringRef VendorName, StringRef ArchName)=0
AMDHSA kernel descriptor definitions.
Enums and constants for AMDGPU PT_NOTE sections.
MCStreamer & getStreamer()
Definition: MCStreamer.h:92
MCContext & getContext() const
MCStreamer & Streamer
Definition: MCStreamer.h:86
virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header)=0
Target - Wrapper for Target specific information.
virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major, uint32_t Minor)=0
virtual bool EmitISAVersion(StringRef IsaVersionString)=0
virtual void EmitDirectiveAMDGCNTarget(StringRef Target)=0
Generic base class for all target subtargets.
virtual bool EmitHSAMetadata(std::shared_ptr< msgpack::Node > &HSAMetadata, bool Strict)=0
Emit HSA Metadata.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
AMDGPU metadata definitions and in-memory representations.
std::vector< uint32_t > Metadata
PAL metadata represented as a vector.