LLVM
8.0.1
|
#include "LLVMContextImpl.h"
#include "MetadataImpl.h"
#include "SymbolTableListTraitsImpl.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/None.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/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/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/TrackingMDRef.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/ValueHandle.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 <iterator>
#include <tuple>
#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. More... | |
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. More... | |
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 475 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 475 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 475 of file Metadata.cpp.
#define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 475 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 968 of file Metadata.cpp.
References llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateBase< T >::push_back(), and tryMergeRange().
Referenced by llvm::MDNode::getMostGenericRange(), and llvm::DwarfFile::getUnits().
|
static |
Definition at line 945 of file Metadata.cpp.
References llvm::ConstantRange::intersectWith(), isContiguous(), and llvm::ConstantRange::isEmptySet().
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 84 of file Metadata.cpp.
References C, llvm::dyn_cast(), llvm::MDNode::get(), N, and llvm::None.
Referenced by llvm::MetadataAsValue::get(), and llvm::MetadataAsValue::getIfExists().
|
static |
Definition at line 332 of file Metadata.cpp.
References assert(), and getParent().
Referenced by llvm::ValueAsMetadata::handleRAUW().
|
static |
Definition at line 1065 of file Metadata.cpp.
References N, Name, and llvm::Twine::str().
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 882 of file Metadata.cpp.
References E, llvm::ArrayRef< T >::empty(), llvm::MDNode::get(), I, N, and llvm::ArrayRef< T >::size().
Referenced by llvm::MDNode::concatenate(), and llvm::MDNode::intersect().
Definition at line 641 of file Metadata.cpp.
References llvm::Metadata::getMetadataID(), llvm::MDNode::operands(), and llvm::MDNode::replaceAllUsesWith().
|
static |
Definition at line 941 of file Metadata.cpp.
References llvm::ConstantRange::getLower(), and llvm::ConstantRange::getUpper().
Referenced by canBeMerged().
Definition at line 533 of file Metadata.cpp.
References assert(), llvm::count_if(), llvm::MDNode::isDistinct(), llvm::MDNode::isResolved(), llvm::MDNode::isTemporary(), llvm::MDNode::isUniqued(), llvm::MDNode::mutable_operands(), N, llvm::MDNode::operands(), llvm::Metadata::Storage, llvm::MDNode::storeDistinctInContext(), and llvm::Metadata::Uniqued.
Referenced by llvm::MDNode::resolve().
|
static |
Definition at line 949 of file Metadata.cpp.
References canBeMerged(), llvm::ConstantInt::get(), llvm::ConstantRange::getLower(), llvm::ConstantInt::getType(), llvm::ConstantRange::getUpper(), llvm::ConstantInt::getValue(), llvm::AArch64CC::LE, Size, llvm::SmallVectorBase::size(), and llvm::ConstantRange::unionWith().
Referenced by addRange(), and llvm::MDNode::getMostGenericRange().
|
static |
Definition at line 762 of file Metadata.cpp.
References llvm::getUniqued(), llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::insert(), and N.