LLVM  10.0.0svn
MDBuilder.h
Go to the documentation of this file.
1 //===---- llvm/MDBuilder.h - Builder for LLVM metadata ----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the MDBuilder class, which is used as a convenient way to
10 // create LLVM metadata with a consistent and simplified interface.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_IR_MDBUILDER_H
15 #define LLVM_IR_MDBUILDER_H
16 
17 #include "llvm/ADT/DenseSet.h"
18 #include "llvm/ADT/StringRef.h"
19 #include "llvm/IR/Constants.h"
20 #include "llvm/IR/GlobalValue.h"
21 #include "llvm/Support/DataTypes.h"
22 #include <utility>
23 
24 namespace llvm {
25 
26 class APInt;
27 template <typename T> class ArrayRef;
28 class LLVMContext;
29 class Constant;
30 class ConstantAsMetadata;
31 class MDNode;
32 class MDString;
33 class Metadata;
34 
35 class MDBuilder {
36  LLVMContext &Context;
37 
38 public:
39  MDBuilder(LLVMContext &context) : Context(context) {}
40 
41  /// Return the given string as metadata.
43 
44  /// Return the given constant as metadata.
46 
47  //===------------------------------------------------------------------===//
48  // FPMath metadata.
49  //===------------------------------------------------------------------===//
50 
51  /// Return metadata with the given settings. The special value 0.0
52  /// for the Accuracy parameter indicates the default (maximal precision)
53  /// setting.
54  MDNode *createFPMath(float Accuracy);
55 
56  //===------------------------------------------------------------------===//
57  // Prof metadata.
58  //===------------------------------------------------------------------===//
59 
60  /// Return metadata containing two branch weights.
61  MDNode *createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight);
62 
63  /// Return metadata containing a number of branch weights.
65 
66  /// Return metadata specifying that a branch or switch is unpredictable.
68 
69  /// Return metadata containing the entry \p Count for a function, a boolean
70  /// \Synthetic indicating whether the counts were synthetized, and the
71  /// GUIDs stored in \p Imports that need to be imported for sample PGO, to
72  /// enable the same inlines as the profiled optimized binary
73  MDNode *createFunctionEntryCount(uint64_t Count, bool Synthetic,
74  const DenseSet<GlobalValue::GUID> *Imports);
75 
76  /// Return metadata containing the section prefix for a function.
78 
79  /// return metadata containing expected value
80  MDNode *createMisExpect(uint64_t Index, uint64_t LikelyWeight,
81  uint64_t UnlikelyWeight);
82 
83  //===------------------------------------------------------------------===//
84  // Range metadata.
85  //===------------------------------------------------------------------===//
86 
87  /// Return metadata describing the range [Lo, Hi).
88  MDNode *createRange(const APInt &Lo, const APInt &Hi);
89 
90  /// Return metadata describing the range [Lo, Hi).
92 
93  //===------------------------------------------------------------------===//
94  // Callees metadata.
95  //===------------------------------------------------------------------===//
96 
97  /// Return metadata indicating the possible callees of indirect
98  /// calls.
100 
101  //===------------------------------------------------------------------===//
102  // Callback metadata.
103  //===------------------------------------------------------------------===//
104 
105  /// Return metadata describing a callback (see llvm::AbstractCallSite).
106  MDNode *createCallbackEncoding(unsigned CalleeArgNo, ArrayRef<int> Arguments,
107  bool VarArgsArePassed);
108 
109  /// Merge the new callback encoding \p NewCB into \p ExistingCallbacks.
110  MDNode *mergeCallbackEncodings(MDNode *ExistingCallbacks, MDNode *NewCB);
111 
112  //===------------------------------------------------------------------===//
113  // AA metadata.
114  //===------------------------------------------------------------------===//
115 
116 protected:
117  /// Return metadata appropriate for a AA root node (scope or TBAA).
118  /// Each returned node is distinct from all other metadata and will never
119  /// be identified (uniqued) with anything else.
121  MDNode *Extra = nullptr);
122 
123 public:
124  /// Return metadata appropriate for a TBAA root node. Each returned
125  /// node is distinct from all other metadata and will never be identified
126  /// (uniqued) with anything else.
128  return createAnonymousAARoot();
129  }
130 
131  /// Return metadata appropriate for an alias scope domain node.
132  /// Each returned node is distinct from all other metadata and will never
133  /// be identified (uniqued) with anything else.
135  return createAnonymousAARoot(Name);
136  }
137 
138  /// Return metadata appropriate for an alias scope root node.
139  /// Each returned node is distinct from all other metadata and will never
140  /// be identified (uniqued) with anything else.
142  StringRef Name = StringRef()) {
143  return createAnonymousAARoot(Name, Domain);
144  }
145 
146  /// Return metadata appropriate for a TBAA root node with the given
147  /// name. This may be identified (uniqued) with other roots with the same
148  /// name.
150 
151  /// Return metadata appropriate for an alias scope domain node with
152  /// the given name. This may be identified (uniqued) with other roots with
153  /// the same name.
155 
156  /// Return metadata appropriate for an alias scope node with
157  /// the given name. This may be identified (uniqued) with other scopes with
158  /// the same name and domain.
159  MDNode *createAliasScope(StringRef Name, MDNode *Domain);
160 
161  /// Return metadata for a non-root TBAA node with the given name,
162  /// parent in the TBAA tree, and value for 'pointsToConstantMemory'.
163  MDNode *createTBAANode(StringRef Name, MDNode *Parent,
164  bool isConstant = false);
165 
167  uint64_t Offset;
168  uint64_t Size;
170  TBAAStructField(uint64_t Offset, uint64_t Size, MDNode *Type) :
171  Offset(Offset), Size(Size), Type(Type) {}
172  };
173 
174  /// Return metadata for a tbaa.struct node with the given
175  /// struct field descriptions.
177 
178  /// Return metadata for a TBAA struct node in the type DAG
179  /// with the given name, a list of pairs (offset, field type in the type DAG).
180  MDNode *
182  ArrayRef<std::pair<MDNode *, uint64_t>> Fields);
183 
184  /// Return metadata for a TBAA scalar type node with the
185  /// given name, an offset and a parent in the TBAA type DAG.
187  uint64_t Offset = 0);
188 
189  /// Return metadata for a TBAA tag node with the given
190  /// base type, access type and offset relative to the base type.
192  uint64_t Offset, bool IsConstant = false);
193 
194  /// Return metadata for a TBAA type node in the TBAA type DAG with the
195  /// given parent type, size in bytes, type identifier and a list of fields.
196  MDNode *createTBAATypeNode(MDNode *Parent, uint64_t Size, Metadata *Id,
199 
200  /// Return metadata for a TBAA access tag with the given base type,
201  /// final access type, offset of the access relative to the base type, size of
202  /// the access and flag indicating whether the accessed object can be
203  /// considered immutable for the purposes of the TBAA analysis.
204  MDNode *createTBAAAccessTag(MDNode *BaseType, MDNode *AccessType,
205  uint64_t Offset, uint64_t Size,
206  bool IsImmutable = false);
207 
208  /// Return mutable version of the given mutable or immutable TBAA
209  /// access tag.
211 
212  /// Return metadata containing an irreducible loop header weight.
213  MDNode *createIrrLoopHeaderWeight(uint64_t Weight);
214 };
215 
216 } // end namespace llvm
217 
218 #endif
uint64_t CallInst * C
MDNode * createRange(const APInt &Lo, const APInt &Hi)
Return metadata describing the range [Lo, Hi).
Definition: MDBuilder.cpp:84
static bool isConstant(const MachineInstr &MI)
MDNode * createAnonymousAARoot(StringRef Name=StringRef(), MDNode *Extra=nullptr)
Return metadata appropriate for a AA root node (scope or TBAA).
Definition: MDBuilder.cpp:153
MDNode * createUnpredictable()
Return metadata specifying that a branch or switch is unpredictable.
Definition: MDBuilder.cpp:55
This class represents lattice values for constants.
Definition: AllocatorList.h:23
ConstantAsMetadata * createConstant(Constant *C)
Return the given constant as metadata.
Definition: MDBuilder.cpp:24
MDNode * createAnonymousTBAARoot()
Return metadata appropriate for a TBAA root node.
Definition: MDBuilder.h:127
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
Implements a dense probed hash-table based set.
Definition: DenseSet.h:249
MDNode * createAnonymousAliasScope(MDNode *Domain, StringRef Name=StringRef())
Return metadata appropriate for an alias scope root node.
Definition: MDBuilder.h:141
MDBuilder(LLVMContext &context)
Definition: MDBuilder.h:39
Metadata node.
Definition: Metadata.h:863
MDNode * createFPMath(float Accuracy)
Return metadata with the given settings.
Definition: MDBuilder.cpp:28
MDNode * createMisExpect(uint64_t Index, uint64_t LikelyWeight, uint64_t UnlikelyWeight)
return metadata containing expected value
Definition: MDBuilder.cpp:313
MDNode * createIrrLoopHeaderWeight(uint64_t Weight)
Return metadata containing an irreducible loop header weight.
Definition: MDBuilder.cpp:305
MDNode * createFunctionEntryCount(uint64_t Count, bool Synthetic, const DenseSet< GlobalValue::GUID > *Imports)
Return metadata containing the entry Count for a function, a boolean indicating whether the counts w...
Definition: MDBuilder.cpp:59
MDNode * createTBAAAccessTag(MDNode *BaseType, MDNode *AccessType, uint64_t Offset, uint64_t Size, bool IsImmutable=false)
Return metadata for a TBAA access tag with the given base type, final access type, offset of the access relative to the base type, size of the access and flag indicating whether the accessed object can be considered immutable for the purposes of the TBAA analysis.
Definition: MDBuilder.cpp:264
MDNode * createTBAATypeNode(MDNode *Parent, uint64_t Size, Metadata *Id, ArrayRef< TBAAStructField > Fields=ArrayRef< TBAAStructField >())
Return metadata for a TBAA type node in the TBAA type DAG with the given parent type, size in bytes, type identifier and a list of fields.
Definition: MDBuilder.cpp:248
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:64
This is an important base class in LLVM.
Definition: Constant.h:41
MDNode * createCallbackEncoding(unsigned CalleeArgNo, ArrayRef< int > Arguments, bool VarArgsArePassed)
Return metadata describing a callback (see llvm::AbstractCallSite).
Definition: MDBuilder.cpp:107
This file contains the declarations for the subclasses of Constant, which represent the different fla...
AMDGPU Lower Kernel Arguments
MDNode * createAliasScopeDomain(StringRef Name)
Return metadata appropriate for an alias scope domain node with the given name.
Definition: MDBuilder.cpp:191
MDNode * createTBAAStructNode(ArrayRef< TBAAStructField > Fields)
Return metadata for a tbaa.struct node with the given struct field descriptions.
Definition: MDBuilder.cpp:201
MDNode * createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight)
Return metadata containing two branch weights.
Definition: MDBuilder.cpp:37
MDNode * createAnonymousAliasScopeDomain(StringRef Name=StringRef())
Return metadata appropriate for an alias scope domain node.
Definition: MDBuilder.h:134
MDNode * createTBAAScalarTypeNode(StringRef Name, MDNode *Parent, uint64_t Offset=0)
Return metadata for a TBAA scalar type node with the given name, an offset and a parent in the TBAA t...
Definition: MDBuilder.cpp:228
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
MDNode * mergeCallbackEncodings(MDNode *ExistingCallbacks, MDNode *NewCB)
Merge the new callback encoding NewCB into ExistingCallbacks.
Definition: MDBuilder.cpp:124
Class for arbitrary precision integers.
Definition: APInt.h:69
TBAAStructField(uint64_t Offset, uint64_t Size, MDNode *Type)
Definition: MDBuilder.h:170
MDNode * createCallees(ArrayRef< Function *> Callees)
Return metadata indicating the possible callees of indirect calls.
Definition: MDBuilder.cpp:100
MDNode * createTBAAStructTypeNode(StringRef Name, ArrayRef< std::pair< MDNode *, uint64_t >> Fields)
Return metadata for a TBAA struct node in the type DAG with the given name, a list of pairs (offset...
Definition: MDBuilder.cpp:214
MDString * createString(StringRef Str)
Return the given string as metadata.
Definition: MDBuilder.cpp:20
MDNode * createAliasScope(StringRef Name, MDNode *Domain)
Return metadata appropriate for an alias scope node with the given name.
Definition: MDBuilder.cpp:195
MDNode * createTBAAStructTagNode(MDNode *BaseType, MDNode *AccessType, uint64_t Offset, bool IsConstant=false)
Return metadata for a TBAA tag node with the given base type, access type and offset relative to the ...
Definition: MDBuilder.cpp:237
MDNode * createTBAANode(StringRef Name, MDNode *Parent, bool isConstant=false)
Return metadata for a non-root TBAA node with the given name, parent in the TBAA tree, and value for &#39;pointsToConstantMemory&#39;.
Definition: MDBuilder.cpp:181
MDNode * createFunctionSectionPrefix(StringRef Prefix)
Return metadata containing the section prefix for a function.
Definition: MDBuilder.cpp:78
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
MDNode * createTBAARoot(StringRef Name)
Return metadata appropriate for a TBAA root node with the given name.
Definition: MDBuilder.cpp:175
A single uniqued string.
Definition: Metadata.h:603
Root of the metadata hierarchy.
Definition: Metadata.h:57
MDNode * createMutableTBAAAccessTag(MDNode *Tag)
Return mutable version of the given mutable or immutable TBAA access tag.
Definition: MDBuilder.cpp:278