LLVM
8.0.1
|
Debug location. More...
#include "llvm/IR/DebugInfoMetadata.h"
Static Public Member Functions | |
static const DILocation * | getMergedLocation (const DILocation *LocA, const DILocation *LocB) |
When two instructions are combined into a single instruction we also need to combine the original locations into a single location. More... | |
static unsigned | getBaseDiscriminatorFromDiscriminator (unsigned D) |
Returns the base discriminator for a given encoded discriminator D . More... | |
static Optional< unsigned > | encodeDiscriminator (unsigned BD, unsigned DF, unsigned CI) |
Raw encoding of the discriminator. More... | |
static void | decodeDiscriminator (unsigned D, unsigned &BD, unsigned &DF, unsigned &CI) |
Raw decoder for values in an encoded discriminator D. More... | |
static unsigned | getDuplicationFactorFromDiscriminator (unsigned D) |
Returns the duplication factor for a given encoded discriminator D , or 1 if no value or 0 is encoded. More... | |
static unsigned | getCopyIdentifierFromDiscriminator (unsigned D) |
Returns the copy identifier for a given encoded discriminator D . More... | |
static bool | classof (const Metadata *MD) |
Static Public Member Functions inherited from llvm::MDNode | |
static MDTuple * | get (LLVMContext &Context, ArrayRef< Metadata *> MDs) |
static MDTuple * | getIfExists (LLVMContext &Context, ArrayRef< Metadata *> MDs) |
static MDTuple * | getDistinct (LLVMContext &Context, ArrayRef< Metadata *> MDs) |
static TempMDTuple | getTemporary (LLVMContext &Context, ArrayRef< Metadata *> MDs) |
static void | deleteTemporary (MDNode *N) |
Deallocate a node created by getTemporary. More... | |
template<class T > | |
static std::enable_if< std::is_base_of< MDNode, T >::value, T * >::type | replaceWithPermanent (std::unique_ptr< T, TempMDNodeDeleter > N) |
Replace a temporary node with a permanent one. More... | |
template<class T > | |
static std::enable_if< std::is_base_of< MDNode, T >::value, T * >::type | replaceWithUniqued (std::unique_ptr< T, TempMDNodeDeleter > N) |
Replace a temporary node with a uniqued one. More... | |
template<class T > | |
static std::enable_if< std::is_base_of< MDNode, T >::value, T * >::type | replaceWithDistinct (std::unique_ptr< T, TempMDNodeDeleter > N) |
Replace a temporary node with a distinct one. More... | |
static bool | classof (const Metadata *MD) |
Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
static MDNode * | concatenate (MDNode *A, MDNode *B) |
Methods for metadata merging. More... | |
static MDNode * | intersect (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericTBAA (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericFPMath (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericRange (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericAliasScope (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericAlignmentOrDereferenceable (MDNode *A, MDNode *B) |
Public Attributes | |
unsigned | Line |
unsigned unsigned | Column |
unsigned unsigned DILocalScope * | Scope |
unsigned unsigned DILocalScope DILocation * | InlinedAt = nullptr |
unsigned unsigned DILocalScope DILocation bool | ImplicitCode |
Friends | |
class | LLVMContextImpl |
class | MDNode |
Additional Inherited Members | |
Public Types inherited from llvm::MDNode | |
using | op_iterator = const MDOperand * |
using | op_range = iterator_range< op_iterator > |
Public Types inherited from llvm::Metadata | |
enum | MetadataKind |
Protected Types inherited from llvm::MDNode | |
using | mutable_op_range = iterator_range< MDOperand * > |
Protected Types inherited from llvm::Metadata | |
enum | StorageType { Uniqued, Distinct, Temporary } |
Active type of storage. More... | |
Protected Member Functions inherited from llvm::MDNode | |
MDNode (LLVMContext &Context, unsigned ID, StorageType Storage, ArrayRef< Metadata *> Ops1, ArrayRef< Metadata *> Ops2=None) | |
~MDNode ()=default | |
void * | operator new (size_t Size, unsigned NumOps) |
void | operator delete (void *Mem) |
void | operator delete (void *, unsigned) |
Required by std, but never called. More... | |
void | operator delete (void *, unsigned, bool) |
Required by std, but never called. More... | |
void | dropAllReferences () |
MDOperand * | mutable_begin () |
MDOperand * | mutable_end () |
mutable_op_range | mutable_operands () |
void | setOperand (unsigned I, Metadata *New) |
Set an operand. More... | |
void | storeDistinctInContext () |
Protected Member Functions inherited from llvm::Metadata | |
Metadata (unsigned ID, StorageType Storage) | |
~Metadata ()=default | |
void | handleChangedOperand (void *, Metadata *) |
Default handling of a changed operand, which asserts. More... | |
Static Protected Member Functions inherited from llvm::MDNode | |
template<class T , class StoreT > | |
static T * | storeImpl (T *N, StorageType Storage, StoreT &Store) |
template<class T > | |
static T * | storeImpl (T *N, StorageType Storage) |
Protected Attributes inherited from llvm::Metadata | |
unsigned char | Storage: 7 |
Storage flag for non-uniqued, otherwise unowned, metadata. More... | |
unsigned char | ImplicitCode: 1 |
unsigned short | SubclassData16 = 0 |
unsigned | SubclassData32 = 0 |
Debug location.
A debug location in source code, used for debug info and otherwise.
Definition at line 1401 of file DebugInfoMetadata.h.
Definition at line 1635 of file DebugInfoMetadata.h.
References llvm::Metadata::getMetadataID().
|
inline |
Returns a new DILocation with updated Discriminator
.
Definition at line 2014 of file DebugInfoMetadata.h.
References llvm::dyn_cast(), llvm::MDNode::get(), and llvm::DIScope::getScope().
|
inline |
Returns a new DILocation with duplication factor DF
* current duplication factor encoded in the discriminator.
The current duplication factor is as defined by getDuplicationFactor(). Returns None if encoding failed.
Definition at line 2050 of file DebugInfoMetadata.h.
References llvm::None.
Referenced by llvm::InnerLoopVectorizer::setDebugLocFromInst().
|
static |
Raw decoder for values in an encoded discriminator D.
Definition at line 150 of file DebugInfoMetadata.cpp.
Referenced by encodeDiscriminator().
llvm::DILocation::DEFINE_MDNODE_GET | ( | DILocation | , |
(unsigned Line, unsigned Column, Metadata *Scope, Metadata *InlinedAt=nullptr, bool ImplicitCode=false) | , | ||
(Line, Column, Scope, InlinedAt, ImplicitCode) | |||
) |
|
static |
Raw encoding of the discriminator.
APIs such as setBaseDiscriminator or cloneWithDuplicationFactor have certain side-effects. This API, in conjunction with cloneWithDiscriminator, may be used to encode precisely the values provided. BD:
base discriminator DF:
duplication factor CI:
copy index The return is None if the values cannot be encoded in 32 bits - for example, values for BD or DF larger than 12 bits. Otherwise, the return is the encoded value.
Definition at line 118 of file DebugInfoMetadata.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), C, decodeDiscriminator(), llvm::SmallVectorTemplateCommon< T, typename >::end(), I, llvm::None, and llvm::MipsISD::Ret.
|
inline |
Returns the base discriminator stored in the discriminator.
Definition at line 2030 of file DebugInfoMetadata.h.
Referenced by callsiteIsHot(), llvm::sampleprof::FunctionSamples::findFunctionSamples(), and SortCallTargets().
Returns the base discriminator for a given encoded discriminator D
.
Definition at line 1593 of file DebugInfoMetadata.h.
|
inline |
Returns the copy identifier stored in the discriminator.
Definition at line 2038 of file DebugInfoMetadata.h.
Returns the copy identifier for a given encoded discriminator D
.
Definition at line 1622 of file DebugInfoMetadata.h.
|
inline |
Returns the duplication factor stored in the discriminator, or 1 if no duplication factor (or 0) is encoded.
Definition at line 2034 of file DebugInfoMetadata.h.
Returns the duplication factor for a given encoded discriminator D
, or 1 if no value or 0 is encoded.
Definition at line 1613 of file DebugInfoMetadata.h.
References llvm::MipsISD::Ret.
|
static |
When two instructions are combined into a single instruction we also need to combine the original locations into a single location.
When the locations are the same we can use either location. When they differ, we need a third location which is distinct from either. If they have the same file/line but have a different discriminator we could create a location with a new discriminator. If they are from different files/lines the location is ambiguous and can't be represented in a line entry. In this case, if GenerateLocation
is true, we will set the merged debug location as line 0 of the nearest common scope where the two locations are inlined from.
GenerateLocation:
Whether the merged location can be generated when LocA
and LocB
differ.
Definition at line 76 of file DebugInfoMetadata.cpp.
References llvm::SmallSet< T, N, C >::count(), llvm::MDNode::get(), llvm::MDNode::getContext(), llvm::DIScope::getScope(), llvm::SmallSet< T, N, C >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert(), and llvm::TypedDINodeRef< T >::resolve().
Referenced by llvm::Instruction::applyMergedLocation(), llvm::MachineBasicBlock::findBranchDebugLoc(), mergeOperations(), performSink(), updateOperand(), and llvm::InstCombiner::visitStoreInst().
|
inline |
Definition at line 1629 of file DebugInfoMetadata.h.
Referenced by isDINode(), and llvm::MDNodeKeyImpl< DILocation >::isKeyOf().
|
inline |
Definition at line 1628 of file DebugInfoMetadata.h.
Referenced by getSubprogram(), getSuccPad(), isDINode(), and llvm::MDNodeKeyImpl< DILocation >::isKeyOf().
|
inline |
Returns a new DILocation with updated base discriminator BD
.
Only the base discriminator is set in the new DILocation, the other encoded values are elided. If the discriminator cannot be encoded, the function returns None.
Definition at line 2042 of file DebugInfoMetadata.h.
References llvm::None.
Referenced by addDiscriminators().
|
friend |
Definition at line 1402 of file DebugInfoMetadata.h.
|
friend |
Definition at line 1403 of file DebugInfoMetadata.h.
Definition at line 1471 of file DebugInfoMetadata.h.
unsigned unsigned DILocalScope DILocation bool llvm::DILocation::ImplicitCode |
Definition at line 1473 of file DebugInfoMetadata.h.
unsigned unsigned DILocalScope DILocation* llvm::DILocation::InlinedAt = nullptr |
Definition at line 1472 of file DebugInfoMetadata.h.
unsigned llvm::DILocation::Line |
Definition at line 1471 of file DebugInfoMetadata.h.
unsigned unsigned DILocalScope* llvm::DILocation::Scope |
Definition at line 1471 of file DebugInfoMetadata.h.
Referenced by llvm::DICompositeType::buildODRType(), llvm::DIBasicType::getSignedness(), llvm::DIVariable::getSizeInBits(), llvm::DIExpression::isConstant(), and llvm::DISubprogram::splitFlags().