32 assert(Accuracy > 0.0 &&
"Invalid fpmath accuracy!");
39 uint32_t FalseWeight,
bool IsExpected) {
55 assert(Weights.
size() >= 1 &&
"Need at least one branch weights!");
57 unsigned int Offset = IsExpected ? 2 : 1;
64 for (
unsigned i = 0, e = Weights.
size(); i != e; ++i)
85 for (
auto ID : OrderID)
97 assert(
Lo.getBitWidth() ==
Hi.getBitWidth() &&
"Mismatched bitwidths!");
100 return createRange(ConstantInt::get(Ty,
Lo), ConstantInt::get(Ty,
Hi));
121 bool VarArgArePassed) {
138 if (!ExistingCallbacks)
141 auto *NewCBCalleeIdxAsCM = cast<ConstantAsMetadata>(NewCB->
getOperand(0));
143 cast<ConstantInt>(NewCBCalleeIdxAsCM->getValue())->getZExtValue();
144 (void)NewCBCalleeIdx;
148 Ops.
resize(NumExistingOps + 1);
150 for (
unsigned u = 0; u < NumExistingOps; u++) {
153 auto *OldCBCalleeIdxAsCM =
154 cast<ConstantAsMetadata>(cast<MDNode>(Ops[u])->getOperand(0));
156 cast<ConstantInt>(OldCBCalleeIdxAsCM->getValue())->getZExtValue();
157 (void)OldCBCalleeIdx;
158 assert(NewCBCalleeIdx != OldCBCalleeIdx &&
159 "Cannot map a callback callee index twice!");
162 Ops[NumExistingOps] = NewCB;
177 for (
const auto &Entry : Sections) {
183 if (!AuxConsts.
empty()) {
198 Args.push_back(Extra);
242 for (
unsigned i = 0, e = Fields.
size(); i != e; ++i) {
245 Vals[i * 3 + 2] = Fields[i].Type;
257 for (
unsigned i = 0, e = Fields.size(); i != e; ++i) {
258 Ops[i * 2 + 1] = Fields[i].first;
294 for (
unsigned I = 0, E = Fields.
size();
I != E; ++
I) {
295 Ops[
I * 3 + 3] = Fields[
I].Type;
311 ImmutabilityFlagNode});
318 MDNode *AccessType = cast<MDNode>(
Tag->getOperand(1));
320 uint64_t Offset = mdconst::extract<ConstantInt>(OffsetNode)->getZExtValue();
322 bool NewFormat = isa<MDNode>(AccessType->
getOperand(0));
325 unsigned ImmutabilityFlagOp = NewFormat ? 4 : 3;
326 if (
Tag->getNumOperands() <= ImmutabilityFlagOp)
330 Metadata *ImmutabilityFlagNode =
Tag->getOperand(ImmutabilityFlagOp);
331 if (!mdconst::extract<ConstantInt>(ImmutabilityFlagNode)->getValue())
339 uint64_t Size = mdconst::extract<ConstantInt>(SizeNode)->getZExtValue();
365 for (
size_t I = 0;
I < LLVMStats.size();
I++) {
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static bool isConstant(const MachineInstr &MI)
AMDGPU Lower Kernel Arguments
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file contains the declarations for profiling metadata utility functions.
Class for arbitrary precision integers.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
This is the shared class of boolean and integer constants.
This is an important base class in LLVM.
This class represents an Operation in the Expression.
Implements a dense probed hash-table based set.
Class to represent integer types.
static LLVM_ABI IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
LLVM_ABI 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,...
LLVM_ABI MDNode * createCallbackEncoding(unsigned CalleeArgNo, ArrayRef< int > Arguments, bool VarArgsArePassed)
Return metadata describing a callback (see llvm::AbstractCallSite).
LLVM_ABI MDNode * createAnonymousAARoot(StringRef Name=StringRef(), MDNode *Extra=nullptr)
Return metadata appropriate for a AA root node (scope or TBAA).
LLVM_ABI MDNode * createFunctionEntryCount(uint64_t Count, bool Synthetic, const DenseSet< GlobalValue::GUID > *Imports)
Return metadata containing the entry Count for a function, a boolean \Synthetic indicating whether th...
LLVM_ABI MDNode * createPseudoProbeDesc(uint64_t GUID, uint64_t Hash, StringRef FName)
Return metadata containing the pseudo probe descriptor for a function.
LLVM_ABI ConstantAsMetadata * createConstant(Constant *C)
Return the given constant as metadata.
LLVM_ABI MDNode * createFPMath(float Accuracy)
Return metadata with the given settings.
LLVM_ABI MDNode * createPCSections(ArrayRef< PCSection > Sections)
Return metadata for PC sections.
LLVM_ABI 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,...
LLVM_ABI MDNode * createTBAARoot(StringRef Name)
Return metadata appropriate for a TBAA root node with the given name.
LLVM_ABI MDNode * createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight, bool IsExpected=false)
Return metadata containing two branch weights.
LLVM_ABI MDString * createString(StringRef Str)
Return the given string as metadata.
LLVM_ABI 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...
LLVM_ABI MDNode * createIrrLoopHeaderWeight(uint64_t Weight)
Return metadata containing an irreducible loop header weight.
LLVM_ABI MDNode * createUnpredictable()
Return metadata specifying that a branch or switch is unpredictable.
LLVM_ABI 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,...
LLVM_ABI MDNode * createCallees(ArrayRef< Function * > Callees)
Return metadata indicating the possible callees of indirect calls.
LLVM_ABI MDNode * createAliasScopeDomain(StringRef Name)
Return metadata appropriate for an alias scope domain node with the given name.
LLVM_ABI MDNode * createRange(const APInt &Lo, const APInt &Hi)
Return metadata describing the range [Lo, Hi).
LLVM_ABI MDNode * createLikelyBranchWeights()
Return metadata containing two branch weights, with significant bias towards true destination.
LLVM_ABI MDNode * createTBAAStructNode(ArrayRef< TBAAStructField > Fields)
Return metadata for a tbaa.struct node with the given struct field descriptions.
LLVM_ABI MDNode * mergeCallbackEncodings(MDNode *ExistingCallbacks, MDNode *NewCB)
Merge the new callback encoding NewCB into ExistingCallbacks.
LLVM_ABI MDNode * createMutableTBAAAccessTag(MDNode *Tag)
Return mutable version of the given mutable or immutable TBAA access tag.
LLVM_ABI MDNode * createGlobalObjectSectionPrefix(StringRef Prefix)
Return metadata containing the section prefix for a global object.
LLVM_ABI MDNode * createLLVMStats(ArrayRef< std::pair< StringRef, uint64_t > > LLVMStatsVec)
Return metadata containing llvm statistics.
LLVM_ABI MDNode * createRTTIPointerPrologue(Constant *PrologueSig, Constant *RTTI)
Return metadata feeding to the CodeGen about how to generate a function prologue for the "function" s...
LLVM_ABI MDNode * createUnlikelyBranchWeights()
Return metadata containing two branch weights, with significant bias towards false destination.
LLVM_ABI MDNode * createAliasScope(StringRef Name, MDNode *Domain)
Return metadata appropriate for an alias scope node with the given name.
LLVM_ABI 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 ...
LLVM_ABI 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,...
LLVM_ABI void replaceOperandWith(unsigned I, Metadata *New)
Replace a specific operand.
static MDTuple * getDistinct(LLVMContext &Context, ArrayRef< Metadata * > MDs)
const MDOperand & getOperand(unsigned I) const
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
unsigned getNumOperands() const
Return number of MDNode operands.
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
void reserve(size_type N)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
The instances of the Type class are immutable: once they are created, they are never changed.
static LLVM_ABI Type * getFloatTy(LLVMContext &C)
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt1Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
void sort(IteratorTy Start, IteratorTy End)
static LLVM_ABI const char * ExpectedBranchWeights
static LLVM_ABI const char * SyntheticFunctionEntryCount
static LLVM_ABI const char * BranchWeights
static LLVM_ABI const char * FunctionEntryCount