Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::def_chain_iterator< T, UseOptimizedChain > Struct Template Reference

Walks the defining accesses of MemoryDefs. More...

#include "llvm/Analysis/MemorySSA.h"

Inheritance diagram for llvm::def_chain_iterator< T, UseOptimizedChain >:
[legend]

Public Member Functions

 def_chain_iterator ()
 def_chain_iterator (T MA)
T operator* () const
def_chain_iteratoroperator++ ()
bool operator== (const def_chain_iterator &O) const
Public Member Functions inherited from llvm::iterator_facade_base< def_chain_iterator< T, false >, std::forward_iterator_tag, MemoryAccess * >
def_chain_iterator< T, false > operator+ (std::ptrdiff_t n) const
def_chain_iterator< T, false > operator- (std::ptrdiff_t n) const
def_chain_iterator< T, false > & operator++ ()
def_chain_iterator< T, false > & operator-- ()
bool operator!= (const def_chain_iterator< T, false > &RHS) const
bool operator> (const def_chain_iterator< T, false > &RHS) const
bool operator<= (const def_chain_iterator< T, false > &RHS) const
bool operator>= (const def_chain_iterator< T, false > &RHS) const
PointerProxy operator-> () const
ReferenceProxy operator[] (std::ptrdiff_t n) const

Additional Inherited Members

Public Types inherited from llvm::iterator_facade_base< def_chain_iterator< T, false >, std::forward_iterator_tag, MemoryAccess * >
using iterator_category
using value_type
using difference_type
using pointer
using reference
Protected Types inherited from llvm::iterator_facade_base< def_chain_iterator< T, false >, std::forward_iterator_tag, MemoryAccess * >
enum  

Detailed Description

template<class T, bool UseOptimizedChain = false>
struct llvm::def_chain_iterator< T, UseOptimizedChain >

Walks the defining accesses of MemoryDefs.

Stops after we hit something that has no defining use (e.g. a MemoryPhi or liveOnEntry). Note that, when comparing against a null def_chain_iterator, this will compare equal only after walking said Phi/liveOnEntry.

The UseOptimizedChain flag specifies whether to walk the clobbering access chain, or all the accesses.

Normally, MemoryDef are all just def/use linked together, so a def_chain on a MemoryDef will walk all MemoryDefs above it in the program until it hits a phi node. The optimized chain walks the clobbering access of a store. So if you are just trying to find, given a store, what the next thing that would clobber the same memory is, you want the optimized chain.

Definition at line 1333 of file MemorySSA.h.

Constructor & Destructor Documentation

◆ def_chain_iterator() [1/2]

template<class T, bool UseOptimizedChain = false>
llvm::def_chain_iterator< T, UseOptimizedChain >::def_chain_iterator ( )
inline

Definition at line 1336 of file MemorySSA.h.

Referenced by operator++(), and operator==().

◆ def_chain_iterator() [2/2]

template<class T, bool UseOptimizedChain = false>
llvm::def_chain_iterator< T, UseOptimizedChain >::def_chain_iterator ( T MA)
inline

Definition at line 1337 of file MemorySSA.h.

References T.

Member Function Documentation

◆ operator*()

template<class T, bool UseOptimizedChain = false>
T llvm::def_chain_iterator< T, UseOptimizedChain >::operator* ( ) const
inline

Definition at line 1339 of file MemorySSA.h.

References T.

◆ operator++()

template<class T, bool UseOptimizedChain = false>
def_chain_iterator & llvm::def_chain_iterator< T, UseOptimizedChain >::operator++ ( )
inline

Definition at line 1341 of file MemorySSA.h.

References def_chain_iterator(), and llvm::dyn_cast().

◆ operator==()

template<class T, bool UseOptimizedChain = false>
bool llvm::def_chain_iterator< T, UseOptimizedChain >::operator== ( const def_chain_iterator< T, UseOptimizedChain > & O) const
inline

Definition at line 1355 of file MemorySSA.h.

References def_chain_iterator().


The documentation for this struct was generated from the following file: