MLIR  16.0.0git
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
mlir::SymbolTable Class Reference

This class allows for representing and managing the symbol table used by operations with the 'SymbolTable' trait. More...

#include "mlir/IR/SymbolTable.h"

Classes

class  SymbolUse
 This class represents a specific symbol use. More...
 
class  UseRange
 This class implements a range of SymbolRef uses. More...
 

Public Types

enum class  Visibility { Public , Private , Nested }
 An enumeration detailing the different visibility types that a symbol may have. More...
 

Public Member Functions

 SymbolTable (Operation *symbolTableOp)
 Build a symbol table with the symbols within the given operation. More...
 
Operationlookup (StringRef name) const
 Look up a symbol with the specified name, returning null if no such name exists. More...
 
template<typename T >
lookup (StringRef name) const
 
Operationlookup (StringAttr name) const
 Look up a symbol with the specified name, returning null if no such name exists. More...
 
template<typename T >
lookup (StringAttr name) const
 
void remove (Operation *op)
 Remove the given symbol from the table, without deleting it. More...
 
void erase (Operation *symbol)
 Erase the given symbol from the table and delete the operation. More...
 
StringAttr insert (Operation *symbol, Block::iterator insertPt={})
 Insert a new symbol into the table, and rename it as necessary to avoid collisions. More...
 
OperationgetOp () const
 Returns the associated operation. More...
 

Static Public Member Functions

static StringRef getSymbolAttrName ()
 Return the name of the attribute used for symbol names. More...
 
static StringRef getVisibilityAttrName ()
 Return the name of the attribute used for symbol visibility. More...
 
static StringAttr getSymbolName (Operation *symbol)
 Returns the name of the given symbol operation, aborting if no symbol is present. More...
 
static void setSymbolName (Operation *symbol, StringAttr name)
 Sets the name of the given symbol operation. More...
 
static void setSymbolName (Operation *symbol, StringRef name)
 
static Visibility getSymbolVisibility (Operation *symbol)
 Returns the visibility of the given symbol operation. More...
 
static void setSymbolVisibility (Operation *symbol, Visibility vis)
 Sets the visibility of the given symbol operation. More...
 
static OperationgetNearestSymbolTable (Operation *from)
 Returns the nearest symbol table from a given operation from. More...
 
static void walkSymbolTables (Operation *op, bool allSymUsesVisible, function_ref< void(Operation *, bool)> callback)
 Walks all symbol table operations nested within, and including, op. More...
 
static OperationlookupSymbolIn (Operation *op, StringAttr symbol)
 Returns the operation registered with the given symbol name with the regions of 'symbolTableOp'. More...
 
static OperationlookupSymbolIn (Operation *op, StringRef symbol)
 
static OperationlookupSymbolIn (Operation *op, SymbolRefAttr symbol)
 
static LogicalResult lookupSymbolIn (Operation *op, SymbolRefAttr symbol, SmallVectorImpl< Operation * > &symbols)
 A variant of 'lookupSymbolIn' that returns all of the symbols referenced by a given SymbolRefAttr. More...
 
static OperationlookupNearestSymbolFrom (Operation *from, StringAttr symbol)
 Returns the operation registered with the given symbol name within the closest parent operation of, or including, 'from' with the 'OpTrait::SymbolTable' trait. More...
 
static OperationlookupNearestSymbolFrom (Operation *from, SymbolRefAttr symbol)
 
template<typename T >
static T lookupNearestSymbolFrom (Operation *from, StringAttr symbol)
 
template<typename T >
static T lookupNearestSymbolFrom (Operation *from, SymbolRefAttr symbol)
 
static Optional< UseRangegetSymbolUses (Operation *from)
 Get an iterator range for all of the uses, for any symbol, that are nested within the given operation 'from'. More...
 
static Optional< UseRangegetSymbolUses (Region *from)
 
static Optional< UseRangegetSymbolUses (StringAttr symbol, Operation *from)
 Get all of the uses of the given symbol that are nested within the given operation 'from'. More...
 
static Optional< UseRangegetSymbolUses (Operation *symbol, Operation *from)
 
static Optional< UseRangegetSymbolUses (StringAttr symbol, Region *from)
 
static Optional< UseRangegetSymbolUses (Operation *symbol, Region *from)
 
static bool symbolKnownUseEmpty (StringAttr symbol, Operation *from)
 Return if the given symbol is known to have no uses that are nested within the given operation 'from'. More...
 
static bool symbolKnownUseEmpty (Operation *symbol, Operation *from)
 
static bool symbolKnownUseEmpty (StringAttr symbol, Region *from)
 
static bool symbolKnownUseEmpty (Operation *symbol, Region *from)
 
static LogicalResult replaceAllSymbolUses (StringAttr oldSymbol, StringAttr newSymbol, Operation *from)
 Attempt to replace all uses of the given symbol 'oldSymbol' with the provided symbol 'newSymbol' that are nested within the given operation 'from'. More...
 
static LogicalResult replaceAllSymbolUses (Operation *oldSymbol, StringAttr newSymbolName, Operation *from)
 
static LogicalResult replaceAllSymbolUses (StringAttr oldSymbol, StringAttr newSymbol, Region *from)
 
static LogicalResult replaceAllSymbolUses (Operation *oldSymbol, StringAttr newSymbolName, Region *from)
 

Detailed Description

This class allows for representing and managing the symbol table used by operations with the 'SymbolTable' trait.

Inserting into and erasing from this SymbolTable will also insert and erase from the Operation given to it at construction.

Definition at line 23 of file SymbolTable.h.

Member Enumeration Documentation

◆ Visibility

An enumeration detailing the different visibility types that a symbol may have.

Enumerator
Public 

The symbol is public and may be referenced anywhere internal or external to the visible references in the IR.

Private 

The symbol is private and may only be referenced by SymbolRefAttrs local to the operations within the current symbol table.

Nested 

The symbol is visible to the current IR, which may include operations in symbol tables above the one that owns the current symbol.

Nested visibility allows for referencing a symbol outside of its current symbol table, while retaining the ability to observe all uses.

Definition at line 72 of file SymbolTable.h.

Constructor & Destructor Documentation

◆ SymbolTable()

SymbolTable::SymbolTable ( Operation symbolTableOp)

Member Function Documentation

◆ erase()

void SymbolTable::erase ( Operation symbol)

Erase the given symbol from the table and delete the operation.

Definition at line 161 of file SymbolTable.cpp.

References mlir::Operation::erase(), and remove().

◆ getNearestSymbolTable()

Operation * SymbolTable::getNearestSymbolTable ( Operation from)
static

Returns the nearest symbol table from a given operation from.

Returns nullptr if no valid parent symbol table could be found.

Definition at line 266 of file SymbolTable.cpp.

References mlir::Operation::getParentOp(), mlir::Operation::hasTrait(), and isPotentiallyUnknownSymbolTable().

Referenced by collectSymbolScopes(), declareReduction(), mlir::spirv::getPushConstantValue(), lookupNearestSymbolFrom(), mlir::SymbolTableCollection::lookupNearestSymbolFrom(), and mlir::spirv::lookupTargetEnv().

◆ getOp()

Operation* mlir::SymbolTable::getOp ( ) const
inline

Returns the associated operation.

Definition at line 61 of file SymbolTable.h.

◆ getSymbolAttrName()

static StringRef mlir::SymbolTable::getSymbolAttrName ( )
inlinestatic

◆ getSymbolName()

StringAttr SymbolTable::getSymbolName ( Operation symbol)
static

Returns the name of the given symbol operation, aborting if no symbol is present.

Returns the name of the given symbol operation.

Definition at line 221 of file SymbolTable.cpp.

References getNameIfSymbol().

Referenced by collectSymbolScopes(), and insert().

◆ getSymbolUses() [1/6]

auto SymbolTable::getSymbolUses ( Operation from)
static

Get an iterator range for all of the uses, for any symbol, that are nested within the given operation 'from'.

This does not traverse into any nested symbol tables. This function returns std::nullopt if there are any unknown operations that may potentially be symbol tables.

This does not traverse into any nested symbol tables, and will also only return uses on 'from' if it does not also define a symbol table. This is because we treat the region as the boundary of the symbol table, and not the op itself. This function returns None if there are any unknown operations that may potentially be symbol tables.

Definition at line 754 of file SymbolTable.cpp.

References getSymbolUsesImpl().

Referenced by mlir::SymbolUserMap::SymbolUserMap(), and walkReferencedSymbolNodes().

◆ getSymbolUses() [2/6]

auto SymbolTable::getSymbolUses ( Operation symbol,
Operation from 
)
static

Definition at line 787 of file SymbolTable.cpp.

References getSymbolUsesImpl().

◆ getSymbolUses() [3/6]

auto SymbolTable::getSymbolUses ( Operation symbol,
Region from 
)
static

Definition at line 795 of file SymbolTable.cpp.

References getSymbolUsesImpl().

◆ getSymbolUses() [4/6]

auto SymbolTable::getSymbolUses ( Region from)
static

Definition at line 757 of file SymbolTable.cpp.

References getSymbolUsesImpl().

◆ getSymbolUses() [5/6]

auto SymbolTable::getSymbolUses ( StringAttr  symbol,
Operation from 
)
static

Get all of the uses of the given symbol that are nested within the given operation 'from'.

Get all of the uses of the given symbol that are nested within the given operation 'from', invoking the provided callback for each.

This does not traverse into any nested symbol tables. This function returns std::nullopt if there are any unknown operations that may potentially be symbol tables.

Definition at line 783 of file SymbolTable.cpp.

References getSymbolUsesImpl().

◆ getSymbolUses() [6/6]

auto SymbolTable::getSymbolUses ( StringAttr  symbol,
Region from 
)
static

Definition at line 791 of file SymbolTable.cpp.

References getSymbolUsesImpl().

◆ getSymbolVisibility()

SymbolTable::Visibility SymbolTable::getSymbolVisibility ( Operation symbol)
static

Returns the visibility of the given symbol operation.

Definition at line 233 of file SymbolTable.cpp.

References mlir::Operation::getAttrOfType(), getVisibilityAttrName(), Nested, Private, and Public.

◆ getVisibilityAttrName()

static StringRef mlir::SymbolTable::getVisibilityAttrName ( )
inlinestatic

Return the name of the attribute used for symbol visibility.

Definition at line 64 of file SymbolTable.h.

Referenced by getSymbolVisibility(), mlirSymbolTableGetVisibilityAttributeName(), mlir::impl::parseOptionalVisibilityKeyword(), setSymbolVisibility(), and mlir::detail::verifySymbol().

◆ insert()

StringAttr SymbolTable::insert ( Operation symbol,
Block::iterator  insertPt = {} 
)

Insert a new symbol into the table, and rename it as necessary to avoid collisions.

Insert a new symbol into the table and associated operation if not already there and rename it as necessary to avoid collisions.

Also insert at the specified location in the body of the associated operation if it is not already there. It is asserted that the symbol is not inside another operation. Return the name of the symbol after insertion as attribute.

Return the name of the symbol after insertion as attribute.

Definition at line 170 of file SymbolTable.cpp.

References mlir::Region::front(), mlir::Operation::getContext(), mlir::Operation::getParentOp(), mlir::Operation::getRegion(), getSymbolName(), and setSymbolName().

Referenced by createAsyncDispatchFunction(), createDecl(), createParallelComputeFunction(), mlir::bufferization::getGlobalFor(), and outlineExecuteOp().

◆ lookup() [1/4]

Operation * SymbolTable::lookup ( StringAttr  name) const

Look up a symbol with the specified name, returning null if no such name exists.

Names never include the @ on them.

Definition at line 145 of file SymbolTable.cpp.

◆ lookup() [2/4]

template<typename T >
T mlir::SymbolTable::lookup ( StringAttr  name) const
inline

Definition at line 40 of file SymbolTable.h.

References lookup().

◆ lookup() [3/4]

Operation * SymbolTable::lookup ( StringRef  name) const

Look up a symbol with the specified name, returning null if no such name exists.

Names never include the @ on them.

Definition at line 142 of file SymbolTable.cpp.

References mlir::Operation::getContext().

Referenced by lookup(), mlir::SymbolTableCollection::lookupSymbolIn(), and updateCalls().

◆ lookup() [4/4]

template<typename T >
T mlir::SymbolTable::lookup ( StringRef  name) const
inline

Definition at line 32 of file SymbolTable.h.

References lookup().

◆ lookupNearestSymbolFrom() [1/4]

Operation * SymbolTable::lookupNearestSymbolFrom ( Operation from,
StringAttr  symbol 
)
static

Returns the operation registered with the given symbol name within the closest parent operation of, or including, 'from' with the 'OpTrait::SymbolTable' trait.

Returns the operation registered with the given symbol name within the closes parent operation with the 'OpTrait::SymbolTable' trait.

Returns nullptr if no valid symbol was found.

Definition at line 384 of file SymbolTable.cpp.

References getNearestSymbolTable(), and lookupSymbolIn().

Referenced by mlir::LLVM::ModuleTranslation::getAccessGroup(), mlir::LLVM::ModuleTranslation::getAliasScope(), getCalledFunction(), mlir::bufferization::func_ext::getCalledFunction(), lookupNearestSymbolFrom(), and verifySymbolAttribute().

◆ lookupNearestSymbolFrom() [2/4]

template<typename T >
static T mlir::SymbolTable::lookupNearestSymbolFrom ( Operation from,
StringAttr  symbol 
)
inlinestatic

Definition at line 138 of file SymbolTable.h.

References lookupNearestSymbolFrom().

◆ lookupNearestSymbolFrom() [3/4]

Operation * SymbolTable::lookupNearestSymbolFrom ( Operation from,
SymbolRefAttr  symbol 
)
static

Definition at line 389 of file SymbolTable.cpp.

References getNearestSymbolTable(), and lookupSymbolIn().

◆ lookupNearestSymbolFrom() [4/4]

template<typename T >
static T mlir::SymbolTable::lookupNearestSymbolFrom ( Operation from,
SymbolRefAttr  symbol 
)
inlinestatic

Definition at line 142 of file SymbolTable.h.

References lookupNearestSymbolFrom().

◆ lookupSymbolIn() [1/4]

Operation * SymbolTable::lookupSymbolIn ( Operation symbolTableOp,
StringAttr  symbol 
)
static

Returns the operation registered with the given symbol name with the regions of 'symbolTableOp'.

'symbolTableOp' is required to be an operation with the 'OpTrait::SymbolTable' trait.

'symbolTableOp' is required to be an operation with the 'OpTrait::SymbolTable' trait. Returns nullptr if no valid symbol was found.

Definition at line 314 of file SymbolTable.cpp.

References mlir::Region::empty(), mlir::Region::front(), mlir::Operation::getContext(), getNameIfSymbol(), mlir::Operation::getRegion(), getSymbolAttrName(), and mlir::Operation::hasTrait().

Referenced by compileAndExecuteSingleReturnFunction(), compileAndExecuteVoidFunction(), lookupNearestSymbolFrom(), mlir::OpTrait::SymbolTable< ConcreteType >::lookupSymbol(), lookupSymbolIn(), renameSymbol(), and updateSymbolAndAllUses().

◆ lookupSymbolIn() [2/4]

static Operation* mlir::SymbolTable::lookupSymbolIn ( Operation op,
StringRef  symbol 
)
inlinestatic

Definition at line 120 of file SymbolTable.h.

References mlir::Operation::getContext(), and lookupSymbolIn().

◆ lookupSymbolIn() [3/4]

Operation * SymbolTable::lookupSymbolIn ( Operation op,
SymbolRefAttr  symbol 
)
static

Definition at line 329 of file SymbolTable.cpp.

References mlir::failed(), and lookupSymbolIn().

◆ lookupSymbolIn() [4/4]

LogicalResult SymbolTable::lookupSymbolIn ( Operation op,
SymbolRefAttr  symbol,
SmallVectorImpl< Operation * > &  symbols 
)
static

A variant of 'lookupSymbolIn' that returns all of the symbols referenced by a given SymbolRefAttr.

Returns failure if any of the nested references could not be resolved.

Definition at line 373 of file SymbolTable.cpp.

References lookupSymbolIn(), and lookupSymbolInImpl().

◆ remove()

void SymbolTable::remove ( Operation op)

Remove the given symbol from the table, without deleting it.

Definition at line 149 of file SymbolTable.cpp.

References getNameIfSymbol(), and mlir::Operation::getParentOp().

Referenced by erase().

◆ replaceAllSymbolUses() [1/4]

LogicalResult SymbolTable::replaceAllSymbolUses ( Operation oldSymbol,
StringAttr  newSymbolName,
Operation from 
)
static

Definition at line 900 of file SymbolTable.cpp.

References replaceAllSymbolUsesImpl().

◆ replaceAllSymbolUses() [2/4]

LogicalResult SymbolTable::replaceAllSymbolUses ( Operation oldSymbol,
StringAttr  newSymbolName,
Region from 
)
static

Definition at line 910 of file SymbolTable.cpp.

References replaceAllSymbolUsesImpl().

◆ replaceAllSymbolUses() [3/4]

LogicalResult SymbolTable::replaceAllSymbolUses ( StringAttr  oldSymbol,
StringAttr  newSymbol,
Operation from 
)
static

Attempt to replace all uses of the given symbol 'oldSymbol' with the provided symbol 'newSymbol' that are nested within the given operation 'from'.

This does not traverse into any nested symbol tables. If there are any unknown operations that may potentially be symbol tables, no uses are replaced and failure is returned.

Definition at line 895 of file SymbolTable.cpp.

References replaceAllSymbolUsesImpl().

Referenced by mlir::spirv::combine(), mlir::encodeBindAttribute(), encodeKernelName(), mlirSymbolTableReplaceAllSymbolUses(), mlir::SymbolUserMap::replaceAllUsesWith(), and updateSymbolAndAllUses().

◆ replaceAllSymbolUses() [4/4]

LogicalResult SymbolTable::replaceAllSymbolUses ( StringAttr  oldSymbol,
StringAttr  newSymbol,
Region from 
)
static

Definition at line 905 of file SymbolTable.cpp.

References replaceAllSymbolUsesImpl().

◆ setSymbolName() [1/2]

void SymbolTable::setSymbolName ( Operation symbol,
StringAttr  name 
)
static

Sets the name of the given symbol operation.

Definition at line 228 of file SymbolTable.cpp.

References getSymbolAttrName(), and mlir::Operation::setAttr().

Referenced by mlir::encodeBindAttribute(), encodeKernelName(), insert(), setSymbolName(), and updateSymbolAndAllUses().

◆ setSymbolName() [2/2]

static void mlir::SymbolTable::setSymbolName ( Operation symbol,
StringRef  name 
)
inlinestatic

Definition at line 94 of file SymbolTable.h.

References mlir::Operation::getContext(), and setSymbolName().

◆ setSymbolVisibility()

void SymbolTable::setSymbolVisibility ( Operation symbol,
Visibility  vis 
)
static

Sets the visibility of the given symbol operation.

Definition at line 246 of file SymbolTable.cpp.

References mlir::Operation::getContext(), getVisibilityAttrName(), Nested, Private, Public, mlir::Operation::removeAttr(), and mlir::Operation::setAttr().

Referenced by outlineExecuteOp().

◆ symbolKnownUseEmpty() [1/4]

bool SymbolTable::symbolKnownUseEmpty ( Operation symbol,
Operation from 
)
static

Definition at line 825 of file SymbolTable.cpp.

References symbolKnownUseEmptyImpl().

◆ symbolKnownUseEmpty() [2/4]

bool SymbolTable::symbolKnownUseEmpty ( Operation symbol,
Region from 
)
static

Definition at line 831 of file SymbolTable.cpp.

References symbolKnownUseEmptyImpl().

◆ symbolKnownUseEmpty() [3/4]

bool SymbolTable::symbolKnownUseEmpty ( StringAttr  symbol,
Operation from 
)
static

Return if the given symbol is known to have no uses that are nested within the given operation 'from'.

This does not traverse into any nested symbol tables. This function will also return false if there are any unknown operations that may potentially be symbol tables. This doesn't necessarily mean that there are no uses, we just can't conservatively prove it.

This does not traverse into any nested symbol tables. This function will also return false if there are any unknown operations that may potentially be symbol tables.

Definition at line 822 of file SymbolTable.cpp.

References symbolKnownUseEmptyImpl().

◆ symbolKnownUseEmpty() [4/4]

bool SymbolTable::symbolKnownUseEmpty ( StringAttr  symbol,
Region from 
)
static

Definition at line 828 of file SymbolTable.cpp.

References symbolKnownUseEmptyImpl().

◆ walkSymbolTables()

void SymbolTable::walkSymbolTables ( Operation op,
bool  allSymUsesVisible,
function_ref< void(Operation *, bool)>  callback 
)
static

Walks all symbol table operations nested within, and including, op.

For each symbol table operation, the provided callback is invoked with the op and a boolean signifying if the symbols within that symbol table can be treated as if all uses within the IR are visible to the caller. allSymUsesVisible identifies whether all of the symbol uses of symbols within op are visible.

For each symbol table operation, the provided callback is invoked with the op and a boolean signifying if the symbols within that symbol table can be treated as if all uses are visible. allSymUsesVisible identifies whether all of the symbol uses of symbols within op are visible.

Definition at line 286 of file SymbolTable.cpp.

References mlir::Operation::getRegions(), and mlir::Operation::hasTrait().

Referenced by mlirSymbolTableWalkSymbolTables(), and mlir::SymbolUserMap::SymbolUserMap().


The documentation for this class was generated from the following files: