AMDGPUTargetStreamer.h revision 309124
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 16namespace llvm { 17 18class MCELFStreamer; 19class MCSymbol; 20 21class AMDGPUTargetStreamer : public MCTargetStreamer { 22public: 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 41class AMDGPUTargetAsmStreamer : public AMDGPUTargetStreamer { 42 formatted_raw_ostream &OS; 43public: 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 61class 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 76public: 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