Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / lib / Target / AMDGPU / MCTargetDesc / AMDGPUTargetStreamer.h
blobc7a58397aa401b5cdd73807e363745a4e63ae627
1 //===-- AMDGPUTargetStreamer.h - AMDGPU Target Streamer --------*- C++ -*--===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
10 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
12 #include "AMDKernelCodeT.h"
13 #include "llvm/BinaryFormat/MsgPackTypes.h"
14 #include "llvm/MC/MCStreamer.h"
15 #include "llvm/MC/MCSubtargetInfo.h"
16 #include "llvm/Support/AMDGPUMetadata.h"
17 #include "llvm/Support/AMDHSAKernelDescriptor.h"
19 namespace llvm {
20 #include "AMDGPUPTNote.h"
22 class DataLayout;
23 class Function;
24 class MCELFStreamer;
25 class MCSymbol;
26 class MDNode;
27 class Module;
28 class Type;
30 class AMDGPUTargetStreamer : public MCTargetStreamer {
31 protected:
32 MCContext &getContext() const { return Streamer.getContext(); }
34 public:
35 AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
37 virtual void EmitDirectiveAMDGCNTarget(StringRef Target) = 0;
39 virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
40 uint32_t Minor) = 0;
42 virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
43 uint32_t Stepping,
44 StringRef VendorName,
45 StringRef ArchName) = 0;
47 virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0;
49 virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0;
51 /// \returns True on success, false on failure.
52 virtual bool EmitISAVersion(StringRef IsaVersionString) = 0;
54 /// \returns True on success, false on failure.
55 virtual bool EmitHSAMetadataV2(StringRef HSAMetadataString);
57 /// \returns True on success, false on failure.
58 virtual bool EmitHSAMetadataV3(StringRef HSAMetadataString);
60 /// Emit HSA Metadata
61 ///
62 /// When \p Strict is true, known metadata elements must already be
63 /// well-typed. When \p Strict is false, known types are inferred and
64 /// the \p HSAMetadata structure is updated with the correct types.
65 ///
66 /// \returns True on success, false on failure.
67 virtual bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
68 bool Strict) = 0;
70 /// \returns True on success, false on failure.
71 virtual bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) = 0;
73 /// \returns True on success, false on failure.
74 virtual bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) = 0;
76 virtual void EmitAmdhsaKernelDescriptor(
77 const MCSubtargetInfo &STI, StringRef KernelName,
78 const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
79 uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
80 bool ReserveXNACK) = 0;
82 static StringRef getArchNameFromElfMach(unsigned ElfMach);
83 static unsigned getElfMach(StringRef GPU);
86 class AMDGPUTargetAsmStreamer final : public AMDGPUTargetStreamer {
87 formatted_raw_ostream &OS;
88 public:
89 AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
91 void EmitDirectiveAMDGCNTarget(StringRef Target) override;
93 void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
94 uint32_t Minor) override;
96 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
97 uint32_t Stepping, StringRef VendorName,
98 StringRef ArchName) override;
100 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
102 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
104 /// \returns True on success, false on failure.
105 bool EmitISAVersion(StringRef IsaVersionString) override;
107 /// \returns True on success, false on failure.
108 bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
109 bool Strict) override;
111 /// \returns True on success, false on failure.
112 bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
114 /// \returns True on success, false on failure.
115 bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
117 void EmitAmdhsaKernelDescriptor(
118 const MCSubtargetInfo &STI, StringRef KernelName,
119 const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
120 uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
121 bool ReserveXNACK) override;
124 class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer {
125 MCStreamer &Streamer;
127 void EmitNote(StringRef Name, const MCExpr *DescSize, unsigned NoteType,
128 function_ref<void(MCELFStreamer &)> EmitDesc);
130 public:
131 AMDGPUTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
133 MCELFStreamer &getStreamer();
135 void EmitDirectiveAMDGCNTarget(StringRef Target) override;
137 void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
138 uint32_t Minor) override;
140 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
141 uint32_t Stepping, StringRef VendorName,
142 StringRef ArchName) override;
144 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
146 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
148 /// \returns True on success, false on failure.
149 bool EmitISAVersion(StringRef IsaVersionString) override;
151 /// \returns True on success, false on failure.
152 bool EmitHSAMetadata(std::shared_ptr<msgpack::Node> &HSAMetadata,
153 bool Strict) override;
155 /// \returns True on success, false on failure.
156 bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
158 /// \returns True on success, false on failure.
159 bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
161 void EmitAmdhsaKernelDescriptor(
162 const MCSubtargetInfo &STI, StringRef KernelName,
163 const amdhsa::kernel_descriptor_t &KernelDescriptor, uint64_t NextVGPR,
164 uint64_t NextSGPR, bool ReserveVCC, bool ReserveFlatScr,
165 bool ReserveXNACK) override;
169 #endif