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 AMDGPUAS AMDGPUASI; 41 42 void dump(StringRef HSAMetadataString) const; 43 44 void verify(StringRef HSAMetadataString) const; 45 46 AccessQualifier getAccessQualifier(StringRef AccQual) const; 47 48 AddressSpaceQualifier getAddressSpaceQualifer(unsigned AddressSpace) const; 49 50 ValueKind getValueKind(Type *Ty, StringRef TypeQual, 51 StringRef BaseTypeName) const; 52 53 ValueType getValueType(Type *Ty, StringRef TypeName) const; 54 55 std::string getTypeName(Type *Ty, bool Signed) const; 56 57 std::vector<uint32_t> getWorkGroupDimensions(MDNode *Node) const; 58 59 Kernel::CodeProps::Metadata getHSACodeProps( 60 const MachineFunction &MF, 61 const SIProgramInfo &ProgramInfo) const; 62 Kernel::DebugProps::Metadata getHSADebugProps( 63 const MachineFunction &MF, 64 const SIProgramInfo &ProgramInfo) const; 65 66 void emitVersion(); 67 68 void emitPrintf(const Module &Mod); 69 70 void emitKernelLanguage(const Function &Func); 71 72 void emitKernelAttrs(const Function &Func); 73 74 void emitKernelArgs(const Function &Func); 75 76 void emitKernelArg(const Argument &Arg); 77 78 void emitKernelArg(const DataLayout &DL, Type *Ty, ValueKind ValueKind, 79 unsigned PointeeAlign = 0, 80 StringRef Name = "", StringRef TypeName = "", 81 StringRef BaseTypeName = "", StringRef AccQual = "", 82 StringRef TypeQual = ""); 83 84 void emitHiddenKernelArgs(const Function &Func); 85 86 public: 87 MetadataStreamer() = default; 88 ~MetadataStreamer() = default; 89 getHSAMetadata()90 const Metadata &getHSAMetadata() const { 91 return HSAMetadata; 92 } 93 94 void begin(const Module &Mod); 95 96 void end(); 97 98 void emitKernel(const MachineFunction &MF, const SIProgramInfo &ProgramInfo); 99 }; 100 101 } // end namespace HSAMD 102 } // end namespace AMDGPU 103 } // end namespace llvm 104 105 #endif // LLVM_LIB_TARGET_AMDGPU_MCTARGETDESC_AMDGPUHSAMETADATASTREAMER_H 106