Line data Source code
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 323 : 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
|