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 #include "AMDKernelCodeT.h" 11 #include "llvm/MC/MCStreamer.h" 12 #include "llvm/MC/MCSymbol.h" 13 #include "llvm/Support/Debug.h" 14 namespace llvm { 15 16 class MCELFStreamer; 17 18 class AMDGPUTargetStreamer : public MCTargetStreamer { 19 public: 20 AMDGPUTargetStreamer(MCStreamer &S); 21 virtual void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 22 uint32_t Minor) = 0; 23 24 virtual void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 25 uint32_t Stepping, 26 StringRef VendorName, 27 StringRef ArchName) = 0; 28 29 virtual void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) = 0; 30 }; 31 32 class AMDGPUTargetAsmStreamer : public AMDGPUTargetStreamer { 33 formatted_raw_ostream &OS; 34 public: 35 AMDGPUTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS); 36 void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 37 uint32_t Minor) override; 38 39 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 40 uint32_t Stepping, StringRef VendorName, 41 StringRef ArchName) override; 42 43 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override; 44 }; 45 46 class AMDGPUTargetELFStreamer : public AMDGPUTargetStreamer { 47 48 enum NoteType { 49 NT_AMDGPU_HSA_CODE_OBJECT_VERSION = 1, 50 NT_AMDGPU_HSA_HSAIL = 2, 51 NT_AMDGPU_HSA_ISA = 3, 52 NT_AMDGPU_HSA_PRODUCER = 4, 53 NT_AMDGPU_HSA_PRODUCER_OPTIONS = 5, 54 NT_AMDGPU_HSA_EXTENSION = 6, 55 NT_AMDGPU_HSA_HLDEBUG_DEBUG = 101, 56 NT_AMDGPU_HSA_HLDEBUG_TARGET = 102 57 }; 58 59 MCStreamer &Streamer; 60 61 public: 62 AMDGPUTargetELFStreamer(MCStreamer &S); 63 64 MCELFStreamer &getStreamer(); 65 66 void EmitDirectiveHSACodeObjectVersion(uint32_t Major, 67 uint32_t Minor) override; 68 69 void EmitDirectiveHSACodeObjectISA(uint32_t Major, uint32_t Minor, 70 uint32_t Stepping, StringRef VendorName, 71 StringRef ArchName) override; 72 73 void EmitAMDKernelCodeT(const amd_kernel_code_t &Header) override; 74 75 }; 76 77 } 78