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 #include "AMDGPUPTNote.h" 18 19 class DataLayout; 20 class Function; 21 class MCELFStreamer; 22 class MCSymbol; 23 class MDNode; 24 class Module; 25 class Type; 26 27 class AMDGPUTargetStreamer : public MCTargetStreamer { 28 protected: 29 MCContext &getContext() const { return Streamer.getContext(); } 30 31 public: 32 AMDGPUTargetStreamer(MCStreamer &S); 33 virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 34 uint32_t Minor) = 0; 35 36 virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 37 uint32_t Stepping, 38 StringRef VendorName, 39 StringRef ArchName) = 0; 40 41 virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0; 42 43 virtual void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) = 0; 44 45 virtual void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) = 0; 46 47 virtual void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) = 0; 48 49 virtual void EmitRuntimeMetadata(Module &M) = 0; 50 51 virtual void EmitRuntimeMetadata(StringRef Metadata) = 0; 52 }; 53 54 class AMDGPUTargetAsmStreamer : public AMDGPUTargetStreamer { 55 formatted_raw_ostream &OS; 56 public: 57 AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 58 void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 59 uint32_t Minor) override; 60 61 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 62 uint32_t Stepping, StringRef VendorName, 63 StringRef ArchName) override; 64 65 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override; 66 67 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override; 68 69 void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) override; 70 71 void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) override; 72 73 void EmitRuntimeMetadata(Module &M) override; 74 75 void EmitRuntimeMetadata(StringRef Metadata) override; 76 }; 77 78 class AMDGPUTargetELFStreamer : public AMDGPUTargetStreamer { 79 MCStreamer &Streamer; 80 81 void EmitAMDGPUNote(const MCExpr* DescSize, 82 AMDGPU::PT_NOTE::NoteType Type, 83 std::function<void(MCELFStreamer &)> EmitDesc); 84 85 public: 86 AMDGPUTargetELFStreamer(MCStreamer &S); 87 88 MCELFStreamer &getStreamer(); 89 90 void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 91 uint32_t Minor) override; 92 93 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 94 uint32_t Stepping, StringRef VendorName, 95 StringRef ArchName) override; 96 97 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override; 98 99 void EmitAMDGPUSymbolType(StringRef SymbolName, unsigned Type) override; 100 101 void EmitAMDGPUHsaModuleScopeGlobal(StringRef GlobalName) override; 102 103 void EmitAMDGPUHsaProgramScopeGlobal(StringRef GlobalName) override; 104 105 void EmitRuntimeMetadata(Module &M) override; 106 107 void EmitRuntimeMetadata(StringRef Metadata) override; 108 }; 109 110 } 111 #endif 112