|
LLVM 22.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/ConstantRangeList.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 "llvm/Support/ModRef.h"#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 > |
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 629 of file Metadata.cpp.
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 629 of file Metadata.cpp.
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 629 of file Metadata.cpp.
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 629 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 1290 of file Metadata.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::empty(), High, llvm::Low, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and tryMergeRange().
Referenced by llvm::MDNode::getMostGenericRange().
|
static |
Definition at line 1267 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 82 of file Metadata.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::MDNode::get(), and N.
Referenced by llvm::MetadataAsValue::get(), and llvm::MetadataAsValue::getIfExists().
|
static |
Definition at line 486 of file Metadata.cpp.
References A(), assert(), llvm::cast(), llvm::dyn_cast(), and getParent().
Referenced by llvm::ValueAsMetadata::handleRAUW().
|
static |
Definition at line 1477 of file Metadata.cpp.
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 1095 of file Metadata.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::dyn_cast_or_null(), E(), llvm::MDNode::get(), I, and N.
Referenced by llvm::MDNode::concatenate(), llvm::MDNode::getMostGenericAliasScope(), and llvm::MDNode::intersect().
Definition at line 863 of file Metadata.cpp.
References llvm::is_contained(), and N.
|
static |
Definition at line 754 of file Metadata.cpp.
References llvm::dyn_cast_or_null(), and N.
|
static |
Definition at line 1271 of file Metadata.cpp.
References canBeMerged(), llvm::cast(), High, llvm::Low, Size, llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::ConstantRange::unionWith().
Referenced by addRange(), and llvm::MDNode::getMostGenericRange().
Definition at line 981 of file Metadata.cpp.
References llvm::getUniqued(), N, and T.