class MDNode

Declaration

class MDNode : public Metadata { /* full declaration omitted */ };

Declared at: llvm/include/llvm/IR/Metadata.h:872

Inherits from: Metadata

Member Variables

Inherited from Metadata:

protected Storage
protected ImplicitCode
protected SubclassData16 = 0
protected SubclassData32 = 0

Method Overview

  • protected MDNode(llvm::LLVMContext & Context, unsigned int ID, llvm::Metadata::StorageType Storage, ArrayRef<llvm::Metadata *> Ops1, ArrayRef<llvm::Metadata *> Ops2 = <null expr>)
  • public MDNode(const llvm::MDNode &)
  • public static bool classof(const llvm::Metadata * MD)
  • public llvm::TempMDNode clone() const
  • public static llvm::MDNode * concatenate(llvm::MDNode * A, llvm::MDNode * B)
  • public static void deleteTemporary(llvm::MDNode * N)
  • protected void dropAllReferences()
  • public static inline llvm::MDTuple * get(llvm::LLVMContext & Context, ArrayRef<llvm::Metadata *> MDs)
  • public llvm::LLVMContext & getContext() const
  • public static inline llvm::MDTuple * getDistinct(llvm::LLVMContext & Context, ArrayRef<llvm::Metadata *> MDs)
  • public static inline llvm::MDTuple * getIfExists(llvm::LLVMContext & Context, ArrayRef<llvm::Metadata *> MDs)
  • public static llvm::MDNode * getMostGenericAliasScope(llvm::MDNode * A, llvm::MDNode * B)
  • public static llvm::MDNode * getMostGenericAlignmentOrDereferenceable(llvm::MDNode * A, llvm::MDNode * B)
  • public static llvm::MDNode * getMostGenericFPMath(llvm::MDNode * A, llvm::MDNode * B)
  • public static llvm::MDNode * getMostGenericRange(llvm::MDNode * A, llvm::MDNode * B)
  • public static llvm::MDNode * getMostGenericTBAA(llvm::MDNode * A, llvm::MDNode * B)
  • public unsigned int getNumOperands() const
  • public const llvm::MDOperand & getOperand(unsigned int I) const
  • public static inline llvm::TempMDTuple getTemporary(llvm::LLVMContext & Context, ArrayRef<llvm::Metadata *> MDs)
  • public static llvm::MDNode * intersect(llvm::MDNode * A, llvm::MDNode * B)
  • public bool isDistinct() const
  • public bool isResolved() const
  • public bool isTBAAVtableAccess() const
  • public bool isTemporary() const
  • public bool isUniqued() const
  • protected llvm::MDOperand * mutable_begin()
  • protected llvm::MDOperand * mutable_end()
  • public llvm::MDNode::mutable_op_range mutable_operands()
  • public llvm::MDNode::op_iterator op_begin() const
  • public llvm::MDNode::op_iterator op_end() const
  • public llvm::MDNode::op_range operands() const
  • public void replaceAllUsesWith(llvm::Metadata * MD)
  • public void replaceOperandWith(unsigned int I, llvm::Metadata * New)
  • public template <class T>static typename std::enable_if<std::is_base_of<MDNode, T>::value, T *>::type replaceWithDistinct(std::unique_ptr<T, TempMDNodeDeleter> N)
  • public template <class T>static typename std::enable_if<std::is_base_of<MDNode, T>::value, T *>::type replaceWithPermanent(std::unique_ptr<T, TempMDNodeDeleter> N)
  • public template <class T>static typename std::enable_if<std::is_base_of<MDNode, T>::value, T *>::type replaceWithUniqued(std::unique_ptr<T, TempMDNodeDeleter> N)
  • public void resolve()
  • public void resolveCycles()
  • protected void setOperand(unsigned int I, llvm::Metadata * New)
  • protected void storeDistinctInContext()
  • protected template <class T>static T * storeImpl(T * N, llvm::Metadata::StorageType Storage)
  • protected template <class T, class StoreT>static T * storeImpl(T * N, llvm::Metadata::StorageType Storage, StoreT & Store)
  • protected ~MDNode()

Inherited from Metadata:

Methods

MDNode(
    llvm::LLVMContext& Context,
    unsigned int ID,
    llvm::Metadata::StorageType Storage,
    ArrayRef<llvm::Metadata*> Ops1,
    ArrayRef<llvm::Metadata*> Ops2 = <null expr>)

Declared at: llvm/include/llvm/IR/Metadata.h:882

Parameters

llvm::LLVMContext& Context
unsigned int ID
llvm::Metadata::StorageType Storage
ArrayRef<llvm::Metadata*> Ops1
ArrayRef<llvm::Metadata*> Ops2 = <null expr>

MDNode(const llvm::MDNode&)

Declared at: llvm/include/llvm/IR/Metadata.h:911

Parameters

const llvm::MDNode&

static bool classof(const llvm::Metadata* MD)

Description

Methods for support type inquiry through isa, cast, and dyn_cast:

Declared at: llvm/include/llvm/IR/Metadata.h:1086

Parameters

const llvm::Metadata* MD

llvm::TempMDNode clone() const

Description

Create a (temporary) clone of this.

Declared at: llvm/include/llvm/IR/Metadata.h:924

static llvm::MDNode* concatenate(llvm::MDNode* A,
                                 llvm::MDNode* B)

Description

Methods for metadata merging.

Declared at: llvm/include/llvm/IR/Metadata.h:1101

Parameters

llvm::MDNode* A
llvm::MDNode* B

static void deleteTemporary(llvm::MDNode* N)

Description

Deallocate a node created by getTemporary. Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining references will be reset.

Declared at: llvm/include/llvm/IR/Metadata.h:930

Parameters

llvm::MDNode* N

void dropAllReferences()

Declared at: llvm/include/llvm/IR/Metadata.h:899

static inline llvm::MDTuple* get(
    llvm::LLVMContext& Context,
    ArrayRef<llvm::Metadata*> MDs)

Declared at: llvm/include/llvm/IR/Metadata.h:915

Parameters

llvm::LLVMContext& Context
ArrayRef<llvm::Metadata*> MDs

llvm::LLVMContext& getContext() const

Declared at: llvm/include/llvm/IR/Metadata.h:932

static inline llvm::MDTuple* getDistinct(
    llvm::LLVMContext& Context,
    ArrayRef<llvm::Metadata*> MDs)

Declared at: llvm/include/llvm/IR/Metadata.h:918

Parameters

llvm::LLVMContext& Context
ArrayRef<llvm::Metadata*> MDs

static inline llvm::MDTuple* getIfExists(
    llvm::LLVMContext& Context,
    ArrayRef<llvm::Metadata*> MDs)

Declared at: llvm/include/llvm/IR/Metadata.h:916

Parameters

llvm::LLVMContext& Context
ArrayRef<llvm::Metadata*> MDs

static llvm::MDNode* getMostGenericAliasScope(
    llvm::MDNode* A,
    llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1106

Parameters

llvm::MDNode* A
llvm::MDNode* B

static llvm::MDNode*
getMostGenericAlignmentOrDereferenceable(
    llvm::MDNode* A,
    llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1107

Parameters

llvm::MDNode* A
llvm::MDNode* B

static llvm::MDNode* getMostGenericFPMath(
    llvm::MDNode* A,
    llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1104

Parameters

llvm::MDNode* A
llvm::MDNode* B

static llvm::MDNode* getMostGenericRange(
    llvm::MDNode* A,
    llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1105

Parameters

llvm::MDNode* A
llvm::MDNode* B

static llvm::MDNode* getMostGenericTBAA(
    llvm::MDNode* A,
    llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1103

Parameters

llvm::MDNode* A
llvm::MDNode* B

unsigned int getNumOperands() const

Description

Return number of MDNode operands.

Declared at: llvm/include/llvm/IR/Metadata.h:1083

const llvm::MDOperand& getOperand(
    unsigned int I) const

Declared at: llvm/include/llvm/IR/Metadata.h:1077

Parameters

unsigned int I

static inline llvm::TempMDTuple getTemporary(
    llvm::LLVMContext& Context,
    ArrayRef<llvm::Metadata*> MDs)

Declared at: llvm/include/llvm/IR/Metadata.h:920

Parameters

llvm::LLVMContext& Context
ArrayRef<llvm::Metadata*> MDs

static llvm::MDNode* intersect(llvm::MDNode* A,
                               llvm::MDNode* B)

Declared at: llvm/include/llvm/IR/Metadata.h:1102

Parameters

llvm::MDNode* A
llvm::MDNode* B

bool isDistinct() const

Declared at: llvm/include/llvm/IR/Metadata.h:951

bool isResolved() const

Description

Check if node is fully resolved. If \a isTemporary(), this always returns \c false; if \a isDistinct(), this always returns \c true. If \a isUniqued(), returns \c true if this has already dropped RAUW support (because all operands are resolved). As forward declarations are resolved, their containers should get resolved automatically. However, if this (or one of its operands) is involved in a cycle, \a resolveCycles() needs to be called explicitly.

Declared at: llvm/include/llvm/IR/Metadata.h:948

bool isTBAAVtableAccess() const

Description

Check whether MDNode is a vtable access.

Declared at: llvm/include/llvm/IR/Metadata.h:1098

bool isTemporary() const

Declared at: llvm/include/llvm/IR/Metadata.h:952

bool isUniqued() const

Declared at: llvm/include/llvm/IR/Metadata.h:950

llvm::MDOperand* mutable_begin()

Declared at: llvm/include/llvm/IR/Metadata.h:901

llvm::MDOperand* mutable_end()

Declared at: llvm/include/llvm/IR/Metadata.h:902

llvm::MDNode::mutable_op_range mutable_operands()

Declared at: llvm/include/llvm/IR/Metadata.h:906

llvm::MDNode::op_iterator op_begin() const

Declared at: llvm/include/llvm/IR/Metadata.h:1067

llvm::MDNode::op_iterator op_end() const

Declared at: llvm/include/llvm/IR/Metadata.h:1071

llvm::MDNode::op_range operands() const

Declared at: llvm/include/llvm/IR/Metadata.h:1075

void replaceAllUsesWith(llvm::Metadata* MD)

Description

RAUW a temporary.

Declared at: llvm/include/llvm/IR/Metadata.h:957

Parameters

llvm::Metadata* MD

void replaceOperandWith(unsigned int I,
                        llvm::Metadata* New)

Description

Replace a specific operand.

Declared at: llvm/include/llvm/IR/Metadata.h:935

Parameters

unsigned int I
llvm::Metadata* New

template <class T>
static typename std::enable_if<
    std::is_base_of<MDNode, T>::value,
    T*>::type
replaceWithDistinct(
    std::unique_ptr<T, TempMDNodeDeleter> N)

Description

Replace a temporary node with a distinct one. Create a distinct version of \c N -- in place, if possible -- and return it. Takes ownership of the temporary node.

Declared at: llvm/include/llvm/IR/Metadata.h:1002

Templates

T

Parameters

std::unique_ptr<T, TempMDNodeDeleter> N

template <class T>
static typename std::enable_if<
    std::is_base_of<MDNode, T>::value,
    T*>::type
replaceWithPermanent(
    std::unique_ptr<T, TempMDNodeDeleter> N)

Description

Replace a temporary node with a permanent one. Try to create a uniqued version of \c N -- in place, if possible -- and return it. If \c N cannot be uniqued, return a distinct node instead.

Declared at: llvm/include/llvm/IR/Metadata.h:980

Templates

T

Parameters

std::unique_ptr<T, TempMDNodeDeleter> N

template <class T>
static typename std::enable_if<
    std::is_base_of<MDNode, T>::value,
    T*>::type
replaceWithUniqued(
    std::unique_ptr<T, TempMDNodeDeleter> N)

Description

Replace a temporary node with a uniqued one. Create a uniqued version of \c N -- in place, if possible -- and return it. Takes ownership of the temporary node.

Declared at: llvm/include/llvm/IR/Metadata.h:992

Templates

T

Parameters

std::unique_ptr<T, TempMDNodeDeleter> N

void resolve()

Description

Resolve a unique, unresolved node.

Declared at: llvm/include/llvm/IR/Metadata.h:972

void resolveCycles()

Description

Resolve cycles. Once all forward declarations have been resolved, force cycles to be resolved.

Declared at: llvm/include/llvm/IR/Metadata.h:969

void setOperand(unsigned int I,
                llvm::Metadata* New)

Description

Set an operand. Sets the operand directly, without worrying about uniquing.

Declared at: llvm/include/llvm/IR/Metadata.h:1015

Parameters

unsigned int I
llvm::Metadata* New

void storeDistinctInContext()

Declared at: llvm/include/llvm/IR/Metadata.h:1017

template <class T>
static T* storeImpl(
    T* N,
    llvm::Metadata::StorageType Storage)

Declared at: llvm/include/llvm/IR/Metadata.h:1020

Templates

T

Parameters

T* N
llvm::Metadata::StorageType Storage

template <class T, class StoreT>
static T* storeImpl(
    T* N,
    llvm::Metadata::StorageType Storage,
    StoreT& Store)

Declared at: llvm/include/llvm/IR/Metadata.h:1019

Templates

T
StoreT

Parameters

T* N
llvm::Metadata::StorageType Storage
StoreT& Store

~MDNode()

Declared at: llvm/include/llvm/IR/Metadata.h:884