1 //===-- AMDGPUTargetStreamer.h - AMDGPU Target Streamer --------*- C++ -*--===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
11 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUTARGETSTREAMER_H
13 #include "AMDKernelCodeT.h"
14 #include "llvm/MC/MCStreamer.h"
15 #include "llvm/MC/MCSubtargetInfo.h"
16 #include "llvm/Support/AMDGPUMetadata.h"
19 #include "AMDGPUPTNote.h"
29 class AMDGPUTargetStreamer : public MCTargetStreamer {
31 MCContext &getContext() const { return Streamer.getContext(); }
34 AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
36 virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
39 virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
42 StringRef ArchName) = 0;
44 virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0;
46 virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0;
48 /// \returns True on success, false on failure.
49 virtual bool EmitISAVersion(StringRef IsaVersionString) = 0;
51 /// \returns True on success, false on failure.
52 virtual bool EmitHSAMetadata(StringRef HSAMetadataString);
54 /// \returns True on success, false on failure.
55 virtual bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) = 0;
57 /// \returns True on success, false on failure.
58 virtual bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) = 0;
61 class AMDGPUTargetAsmStreamer final : public AMDGPUTargetStreamer {
62 formatted_raw_ostream &OS;
64 AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
65 void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
66 uint32_t Minor) override;
68 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
69 uint32_t Stepping, StringRef VendorName,
70 StringRef ArchName) override;
72 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
74 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
76 /// \returns True on success, false on failure.
77 bool EmitISAVersion(StringRef IsaVersionString) override;
79 /// \returns True on success, false on failure.
80 bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
82 /// \returns True on success, false on failure.
83 bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
86 class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer {
89 void EmitAMDGPUNote(const MCExpr *DescSize, unsigned NoteType,
90 function_ref<void(MCELFStreamer &)> EmitDesc);
93 AMDGPUTargetELFStreamer(MCStreamer &S);
95 MCELFStreamer &getStreamer();
97 void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
98 uint32_t Minor) override;
100 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
101 uint32_t Stepping, StringRef VendorName,
102 StringRef ArchName) override;
104 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
106 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
108 /// \returns True on success, false on failure.
109 bool EmitISAVersion(StringRef IsaVersionString) 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;