]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.h
Merge llvm trunk r321414 to contrib/llvm.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AMDGPU / MCTargetDesc / AMDGPUTargetStreamer.h
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"
14 #include "llvm/MC/MCStreamer.h"
15 #include "llvm/MC/MCSubtargetInfo.h"
16 #include "llvm/Support/AMDGPUMetadata.h"
17
18 namespace llvm {
19 #include "AMDGPUPTNote.h"
20
21 class DataLayout;
22 class Function;
23 class MCELFStreamer;
24 class MCSymbol;
25 class MDNode;
26 class Module;
27 class Type;
28
29 class AMDGPUTargetStreamer : public MCTargetStreamer {
30 protected:
31   MCContext &getContext() const { return Streamer.getContext(); }
32
33 public:
34   AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}
35
36   virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
37                                                  uint32_t Minor) = 0;
38
39   virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
40                                              uint32_t Stepping,
41                                              StringRef VendorName,
42                                              StringRef ArchName) = 0;
43
44   virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0;
45
46   virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0;
47
48   /// \returns True on success, false on failure.
49   virtual bool EmitISAVersion(StringRef IsaVersionString) = 0;
50
51   /// \returns True on success, false on failure.
52   virtual bool EmitHSAMetadata(StringRef HSAMetadataString);
53
54   /// \returns True on success, false on failure.
55   virtual bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) = 0;
56
57   /// \returns True on success, false on failure.
58   virtual bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) = 0;
59 };
60
61 class AMDGPUTargetAsmStreamer final : public AMDGPUTargetStreamer {
62   formatted_raw_ostream &OS;
63 public:
64   AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
65   void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
66                                          uint32_t Minor) override;
67
68   void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
69                                      uint32_t Stepping, StringRef VendorName,
70                                      StringRef ArchName) override;
71
72   void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
73
74   void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
75
76   /// \returns True on success, false on failure.
77   bool EmitISAVersion(StringRef IsaVersionString) override;
78
79   /// \returns True on success, false on failure.
80   bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
81
82   /// \returns True on success, false on failure.
83   bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
84 };
85
86 class AMDGPUTargetELFStreamer final : public AMDGPUTargetStreamer {
87   MCStreamer &Streamer;
88
89   void EmitAMDGPUNote(const MCExpr *DescSize, unsigned NoteType,
90                       function_ref<void(MCELFStreamer &)> EmitDesc);
91
92 public:
93   AMDGPUTargetELFStreamer(MCStreamer &S);
94
95   MCELFStreamer &getStreamer();
96
97   void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
98                                          uint32_t Minor) override;
99
100   void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
101                                      uint32_t Stepping, StringRef VendorName,
102                                      StringRef ArchName) override;
103
104   void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
105
106   void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
107
108   /// \returns True on success, false on failure.
109   bool EmitISAVersion(StringRef IsaVersionString) override;
110
111   /// \returns True on success, false on failure.
112   bool EmitHSAMetadata(const AMDGPU::HSAMD::Metadata &HSAMetadata) override;
113
114   /// \returns True on success, false on failure.
115   bool EmitPALMetadata(const AMDGPU::PALMD::Metadata &PALMetadata) override;
116 };
117
118 }
119 #endif