1 //===--- AMDGPUHSAMetadataStreamer.h ----------------------------*- 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 /// \file 11 /// AMDGPU HSA Metadata Streamer. 12 /// 13 // 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H 17 #define LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H 18 19 #include "AMDGPU.h" 20 #include "AMDKernelCodeT.h" 21 #include "llvm/ADT/StringRef.h" 22 #include "llvm/Support/AMDGPUMetadata.h" 23 24 namespace llvm { 25 26 class Argument; 27 class DataLayout; 28 class Function; 29 class MDNode; 30 class Module; 31 struct SIProgramInfo; 32 class Type; 33 34 namespace AMDGPU { 35 namespace HSAMD { 36 37 class MetadataStreamer final { 38 private: 39 Metadata HSAMetadata; 40 41 void dump(StringRef HSAMetadataString) const; 42 43 void verify(StringRef HSAMetadataString) const; 44 45 AccessQualifier getAccessQualifier(StringRef AccQual) const; 46 47 AddressSpaceQualifier getAddressSpaceQualifer(unsigned AddressSpace) const; 48 49 ValueKind getValueKind(Type *Ty, StringRef TypeQual, 50 StringRef BaseTypeName) const; 51 52 ValueType getValueType(Type *Ty, StringRef TypeName) const; 53 54 std::string getTypeName(Type *Ty, bool Signed) const; 55 56 std::vector<uint32_t> getWorkGroupDimensions(MDNode *Node) const; 57 58 Kernel::CodeProps::Metadata getHSACodeProps( 59 const MachineFunction &MF, 60 const SIProgramInfo &ProgramInfo) const; 61 Kernel::DebugProps::Metadata getHSADebugProps( 62 const MachineFunction &MF, 63 const SIProgramInfo &ProgramInfo) const; 64 65 void emitVersion(); 66 67 void emitPrintf(const Module &Mod); 68 69 void emitKernelLanguage(const Function &Func); 70 71 void emitKernelAttrs(const Function &Func); 72 73 void emitKernelArgs(const Function &Func); 74 75 void emitKernelArg(const Argument &Arg); 76 77 void emitKernelArg(const DataLayout &DL, Type *Ty, ValueKind ValueKind, 78 unsigned PointeeAlign = 0, 79 StringRef Name = "", StringRef TypeName = "", 80 StringRef BaseTypeName = "", StringRef AccQual = "", 81 StringRef TypeQual = ""); 82 83 void emitHiddenKernelArgs(const Function &Func); 84 85 public: 86 MetadataStreamer() = default; 87 ~MetadataStreamer() = default; 88 89 const Metadata &getHSAMetadata() const { 90 return HSAMetadata; 91 } 92 93 void begin(const Module &Mod); 94 95 void end(); 96 97 void emitKernel(const MachineFunction &MF, const SIProgramInfo &ProgramInfo); 98 }; 99 100 } // end namespace HSAMD 101 } // end namespace AMDGPU 102 } // end namespace llvm 103 104 #endif // LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H 105