LLVM 20.0.0git
|
#include "llvm/IR/Metadata.h"
#include "LLVMContextImpl.h"
#include "MetadataImpl.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/ConstantRange.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DebugProgramInstruction.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalObject.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ProfDataUtils.h"
#include "llvm/IR/TrackingMDRef.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <type_traits>
#include <utility>
#include <vector>
#include "llvm/IR/Metadata.def"
Go to the source code of this file.
Classes | |
struct | llvm::MDNode::HasCachedHash< NodeTy > |
struct | llvm::MDNode::HasCachedHash< NodeTy >::SFINAE< U, Val > |
Macros | |
#define | HANDLE_METADATA_LEAF(CLASS) |
#define | HANDLE_MDNODE_LEAF(CLASS) |
#define | HANDLE_MDNODE_LEAF(CLASS) |
#define | HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) |
#define | HANDLE_MDNODE_LEAF(CLASS) |
#define | HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) |
#define | HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) |
#define | HANDLE_MDNODE_LEAF(CLASS) |
Functions | |
static Metadata * | canonicalizeMetadataForValue (LLVMContext &Context, Metadata *MD) |
Canonicalize metadata arguments to intrinsics. | |
static DISubprogram * | getLocalFunctionMetadata (Value *V) |
static bool | isOperandUnresolved (Metadata *Op) |
static bool | hasSelfReference (MDNode *N) |
template<class T , class InfoT > | |
static T * | uniquifyImpl (T *N, DenseSet< T *, InfoT > &Store) |
static MDNode * | getOrSelfReference (LLVMContext &Context, ArrayRef< Metadata * > Ops) |
Get a node or a self-reference that looks like it. | |
static bool | isContiguous (const ConstantRange &A, const ConstantRange &B) |
static bool | canBeMerged (const ConstantRange &A, const ConstantRange &B) |
static bool | tryMergeRange (SmallVectorImpl< ConstantInt * > &EndPoints, ConstantInt *Low, ConstantInt *High) |
static void | addRange (SmallVectorImpl< ConstantInt * > &EndPoints, ConstantInt *Low, ConstantInt *High) |
static SmallVector< TrackingMDRef, 4 > & | getNMDOps (void *Operands) |
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 627 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 627 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 627 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 627 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF_UNIQUABLE | ( | CLASS | ) |
#define HANDLE_MDNODE_LEAF_UNIQUABLE | ( | CLASS | ) |
#define HANDLE_MDNODE_LEAF_UNIQUABLE | ( | CLASS | ) |
#define HANDLE_METADATA_LEAF | ( | CLASS | ) |
|
static |
Definition at line 1274 of file Metadata.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), High, llvm::Low, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and tryMergeRange().
Referenced by llvm::MDNode::getMostGenericRange().
|
static |
Definition at line 1251 of file Metadata.cpp.
References A, B, and isContiguous().
Referenced by tryMergeRange().
|
static |
Canonicalize metadata arguments to intrinsics.
To support bitcode upgrades (and assembly semantic sugar) for MetadataAsValue, we need to canonicalize certain metadata.
This maintains readability of bitcode from when metadata was a type of value, and these bridges were unnecessary.
Definition at line 81 of file Metadata.cpp.
References llvm::CallingConv::C, llvm::MDNode::get(), and N.
Referenced by llvm::MetadataAsValue::get(), and llvm::MetadataAsValue::getIfExists().
|
static |
Definition at line 484 of file Metadata.cpp.
References A, assert(), and getParent().
|
static |
Definition at line 1372 of file Metadata.cpp.
References Operands.
Referenced by llvm::NamedMDNode::addOperand(), llvm::NamedMDNode::clearOperands(), llvm::NamedMDNode::getNumOperands(), llvm::NamedMDNode::getOperand(), llvm::NamedMDNode::setOperand(), and llvm::NamedMDNode::~NamedMDNode().
|
static |
Get a node or a self-reference that looks like it.
Special handling for finding self-references, for use by MDNode::concatenate() and MDNode::intersect() to maintain behaviour from when self-referencing nodes were still uniqued. If the first operand has the same operands as Ops
, return the first operand instead.
Definition at line 1100 of file Metadata.cpp.
References llvm::ArrayRef< T >::empty(), llvm::MDNode::get(), I, N, and llvm::ArrayRef< T >::size().
Referenced by llvm::MDNode::concatenate(), llvm::MDNode::getMostGenericAliasScope(), and llvm::MDNode::intersect().
Definition at line 861 of file Metadata.cpp.
References llvm::is_contained(), and N.
|
static |
Definition at line 752 of file Metadata.cpp.
References N.
|
static |
Definition at line 1255 of file Metadata.cpp.
References canBeMerged(), High, llvm::Low, llvm::SmallVectorBase< Size_T >::size(), Size, and llvm::ConstantRange::unionWith().
Referenced by addRange(), and llvm::MDNode::getMostGenericRange().
|
static |
Definition at line 979 of file Metadata.cpp.
References llvm::getUniqued(), and N.