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