• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace llvm {
17 
18 class MCELFStreamer;
19 class MCSymbol;
20 
21 class AMDGPUTargetStreamer : public MCTargetStreamer {
22 public:
23   AMDGPUTargetStreamer(MCStreamer &S);
24   virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
25                                                  uint32_t Minor) = 0;
26 
27   virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
28                                              uint32_t Stepping,
29                                              StringRef VendorName,
30                                              StringRef ArchName) = 0;
31 
32   virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0;
33 
34   virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0;
35 
36   virtual void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) = 0;
37 
38   virtual void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) = 0;
39 };
40 
41 class AMDGPUTargetAsmStreamer : public AMDGPUTargetStreamer {
42   formatted_raw_ostream &OS;
43 public:
44   AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
45   void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
46                                          uint32_t Minor) override;
47 
48   void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
49                                      uint32_t Stepping, StringRef VendorName,
50                                      StringRef ArchName) override;
51 
52   void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
53 
54   void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
55 
56   void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) override;
57 
58   void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) override;
59 };
60 
61 class AMDGPUTargetELFStreamer : public AMDGPUTargetStreamer {
62 
63   enum NoteType {
64     NT_AMDGPU_HSA_CODE_OBJECT_VERSION = 1,
65     NT_AMDGPU_HSA_HSAIL = 2,
66     NT_AMDGPU_HSA_ISA = 3,
67     NT_AMDGPU_HSA_PRODUCER = 4,
68     NT_AMDGPU_HSA_PRODUCER_OPTIONS = 5,
69     NT_AMDGPU_HSA_EXTENSION = 6,
70     NT_AMDGPU_HSA_HLDEBUG_DEBUG = 101,
71     NT_AMDGPU_HSA_HLDEBUG_TARGET = 102
72   };
73 
74   MCStreamer &Streamer;
75 
76 public:
77   AMDGPUTargetELFStreamer(MCStreamer &S);
78 
79   MCELFStreamer &getStreamer();
80 
81   void EmitDirectiveHSACodeObjectVersion(uint32_t Major,
82                                          uint32_t Minor) override;
83 
84   void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor,
85                                      uint32_t Stepping, StringRef VendorName,
86                                      StringRef ArchName) override;
87 
88   void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override;
89 
90   void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override;
91 
92   void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) override;
93 
94   void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) override;
95 };
96 
97 }
98 #endif
99