LLVM  8.0.0svn
AMDGPUHSAMetadataStreamer.h
Go to the documentation of this file.
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"
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
In-memory representation of HSA metadata.
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
Definition: MsgPackReader.h:49
This class represents an incoming formal argument to a Function.
Definition: Argument.h:30
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:64
void emitKernel(const MachineFunction &MF, const SIProgramInfo &ProgramInfo)
constexpr char PointeeAlign[]
Key for Kernel::Arg::Metadata::mPointeeAlign.
Metadata node.
Definition: Metadata.h:864
Track resource usage for kernels / entry functions.
Definition: SIProgramInfo.h:22
amdgpu Simplify well known AMD library false Value Value const Twine & Name
In-memory representation of kernel debug properties metadata.
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
ValueKind
Value kinds.
constexpr char TypeName[]
Key for Kernel::Arg::Metadata::mTypeName.
AccessQualifier
Access qualifiers.
AddressSpace
Definition: NVPTXBaseInfo.h:22
ValueType
Value types.
The access may modify the value stored in memory.
amdgpu Simplify well known AMD library false Value Value * Arg
AddressSpaceQualifier
Address space qualifiers.
constexpr char AccQual[]
Key for Kernel::Arg::Metadata::mAccQual.
In-memory representation of kernel code properties metadata.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
AMDGPU metadata definitions and in-memory representations.