MLIR  20.0.0git
Public Types | Public Member Functions | Public Attributes | List of all members
mlir::bufferization::BufferizationOptions Struct Reference

Options for BufferizableOpInterface-based bufferization. More...

#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"

+ Inheritance diagram for mlir::bufferization::BufferizationOptions:

Public Types

using AllocationFn = std::function< FailureOr< Value >(OpBuilder &, Location, MemRefType, ValueRange, unsigned int)>
 Allocator function: Generate a memref allocation with the given type, dynamic extents and alignment. More...
 
using MemCpyFn = std::function< LogicalResult(OpBuilder &, Location, Value, Value)>
 Memcpy function: Generate a memcpy between two buffers. More...
 
using AnalysisStateInitFn = std::function< void(AnalysisState &)>
 Initializer function for analysis state. More...
 
using FunctionArgTypeConverterFn = std::function< BaseMemRefType(TensorType, Attribute memorySpace, func::FuncOp, const BufferizationOptions &)>
 Tensor -> MemRef type converter. More...
 
using UnknownTypeConverterFn = std::function< BaseMemRefType(Value, Attribute memorySpace, const BufferizationOptions &)>
 Tensor -> MemRef type converter. More...
 
using DefaultMemorySpaceFn = std::function< std::optional< Attribute >(TensorType t)>
 

Public Member Functions

 BufferizationOptions ()
 
BufferizableOpInterface dynCastBufferizableOp (Operation *op) const
 Try to cast the given op to BufferizableOpInterface if the op is allow listed. More...
 
BufferizableOpInterface dynCastBufferizableOp (Value value) const
 Try to cast the given value to BufferizableOpInterface if the op is allow listed. More...
 
bool isOpAllowed (Operation *op) const
 Return true if the given op should be bufferized. More...
 
FailureOr< ValuecreateAlloc (OpBuilder &b, Location loc, MemRefType type, ValueRange dynShape) const
 Create a memref allocation with the given type and dynamic extents. More...
 
LogicalResult createMemCpy (OpBuilder &b, Location loc, Value from, Value to) const
 Creates a memcpy between two given buffers. More...
 
void setFunctionBoundaryTypeConversion (LayoutMapOption layoutMapOption)
 This function controls buffer types on function signatures. More...
 

Public Attributes

OpFilter opFilter
 A filter that specifies which ops should be bufferized and which ops should be ignored. More...
 
std::optional< AllocationFnallocationFn
 Helper functions for allocation and memory copying. More...
 
std::optional< MemCpyFnmemCpyFn
 
bool allowUnknownOps = false
 Specifies whether not bufferizable ops are allowed in the input. More...
 
bool bufferizeFunctionBoundaries = false
 Specifies whether function boundaries (ops in the func dialect) should be bufferized or not. More...
 
bool checkParallelRegions = true
 
bool enforceAliasingInvariants = true
 Certain ops have aliasing OpOperand/OpResult invariants (e.g., scf.for). More...
 
FunctionArgTypeConverterFn functionArgTypeConverterFn = nullptr
 Type converter from tensors to memrefs. More...
 
bool inferFunctionResultLayout = true
 If true, function result types are inferred from the body of the function. More...
 
UnknownTypeConverterFn unknownTypeConverterFn = nullptr
 Type converter from tensors to memrefs. More...
 
DefaultMemorySpaceFn defaultMemorySpaceFn
 
bool copyBeforeWrite = false
 If set to true, the analysis is skipped. More...
 
bool testAnalysisOnly = false
 If set to true, does not modify the IR apart from adding attributes (for checking the results of the analysis) and post analysis steps. More...
 
bool printConflicts = false
 If set to true, the IR is annotated with details about RaW conflicts. More...
 
unsigned int bufferAlignment = 64
 Buffer alignment for new memory allocations. More...
 
SmallVector< AnalysisStateInitFnstateInitializers
 Initializer functions for analysis state. More...
 

Detailed Description

Options for BufferizableOpInterface-based bufferization.

Definition at line 252 of file BufferizableOpInterface.h.

Member Typedef Documentation

◆ AllocationFn

using mlir::bufferization::BufferizationOptions::AllocationFn = std::function<FailureOr<Value>( OpBuilder &, Location, MemRefType, ValueRange, unsigned int)>

Allocator function: Generate a memref allocation with the given type, dynamic extents and alignment.

Definition at line 255 of file BufferizableOpInterface.h.

◆ AnalysisStateInitFn

Initializer function for analysis state.

Definition at line 261 of file BufferizableOpInterface.h.

◆ DefaultMemorySpaceFn

Definition at line 272 of file BufferizableOpInterface.h.

◆ FunctionArgTypeConverterFn

Tensor -> MemRef type converter.

Parameters: tensor type, memory space, func op, bufferization options

Definition at line 264 of file BufferizableOpInterface.h.

◆ MemCpyFn

Memcpy function: Generate a memcpy between two buffers.

Definition at line 258 of file BufferizableOpInterface.h.

◆ UnknownTypeConverterFn

Tensor -> MemRef type converter.

Parameters: Value, memory space, bufferization options

Definition at line 269 of file BufferizableOpInterface.h.

Constructor & Destructor Documentation

◆ BufferizationOptions()

BufferizationOptions::BufferizationOptions ( )

Definition at line 332 of file BufferizableOpInterface.cpp.

Member Function Documentation

◆ createAlloc()

FailureOr< Value > BufferizationOptions::createAlloc ( OpBuilder b,
Location  loc,
MemRefType  type,
ValueRange  dynShape 
) const

Create a memref allocation with the given type and dynamic extents.

Definition at line 734 of file BufferizableOpInterface.cpp.

References allocationFn, bufferAlignment, mlir::OpBuilder::create(), and mlir::Builder::getI64IntegerAttr().

◆ createMemCpy()

LogicalResult BufferizationOptions::createMemCpy ( OpBuilder b,
Location  loc,
Value  from,
Value  to 
) const

Creates a memcpy between two given buffers.

Create a memory copy between two memref buffers.

Definition at line 750 of file BufferizableOpInterface.cpp.

References mlir::OpBuilder::create(), and memCpyFn.

◆ dynCastBufferizableOp() [1/2]

BufferizableOpInterface BufferizationOptions::dynCastBufferizableOp ( Operation op) const

◆ dynCastBufferizableOp() [2/2]

BufferizableOpInterface BufferizationOptions::dynCastBufferizableOp ( Value  value) const

Try to cast the given value to BufferizableOpInterface if the op is allow listed.

Definition at line 357 of file BufferizableOpInterface.cpp.

References dynCastBufferizableOp(), and mlir::bufferization::getOwnerOfValue().

◆ isOpAllowed()

bool BufferizationOptions::isOpAllowed ( Operation op) const

Return true if the given op should be bufferized.

Definition at line 336 of file BufferizableOpInterface.cpp.

References bufferizeFunctionBoundaries, mlir::Operation::getDialect(), mlir::bufferization::OpFilter::isOpAllowed(), and opFilter.

Referenced by dynCastBufferizableOp().

◆ setFunctionBoundaryTypeConversion()

void BufferizationOptions::setFunctionBoundaryTypeConversion ( LayoutMapOption  layoutMapOption)

This function controls buffer types on function signatures.

Sets functionArgTypeConverterFn and inferFunctionResultLayout accordingly.

  • InferLayoutMap: All function parameter types have a fully dynamic layout map, but function result types are inferred from the body of the function.
  • FullyDynamicLayoutMap: All function parameter types and result types have a fully dynamic layout map. This option is most efficient because any layout map can be casted to a fully dynamic one.
  • IdentityLayoutMap: All function parameter types and result types have a static identity layout (i.e., no layout map). This option may introduce additional buffer allocs and copies because layout maps cannot be casted away.

Note: Inferred layout maps may not be desireable when interacting with external functions, because the generated function signatures will be less predictable.

Definition at line 361 of file BufferizableOpInterface.cpp.

References functionArgTypeConverterFn, mlir::bufferization::getMemRefTypeWithFullyDynamicLayout(), mlir::bufferization::getMemRefTypeWithStaticIdentityLayout(), inferFunctionResultLayout, and options.

Member Data Documentation

◆ allocationFn

std::optional<AllocationFn> mlir::bufferization::BufferizationOptions::allocationFn

Helper functions for allocation and memory copying.

Definition at line 293 of file BufferizableOpInterface.h.

Referenced by createAlloc().

◆ allowUnknownOps

bool mlir::bufferization::BufferizationOptions::allowUnknownOps = false

Specifies whether not bufferizable ops are allowed in the input.

If so, bufferization.to_memref and bufferization.to_tensor ops are inserted at the boundaries.

Definition at line 307 of file BufferizableOpInterface.h.

◆ bufferAlignment

unsigned int mlir::bufferization::BufferizationOptions::bufferAlignment = 64

Buffer alignment for new memory allocations.

Definition at line 388 of file BufferizableOpInterface.h.

Referenced by createAlloc().

◆ bufferizeFunctionBoundaries

bool mlir::bufferization::BufferizationOptions::bufferizeFunctionBoundaries = false

Specifies whether function boundaries (ops in the func dialect) should be bufferized or not.

Definition at line 311 of file BufferizableOpInterface.h.

Referenced by isOpAllowed().

◆ checkParallelRegions

bool mlir::bufferization::BufferizationOptions::checkParallelRegions = true

Definition at line 316 of file BufferizableOpInterface.h.

◆ copyBeforeWrite

bool mlir::bufferization::BufferizationOptions::copyBeforeWrite = false

If set to true, the analysis is skipped.

A buffer is copied before every write. This flag cannot be used together with testAnalysisOnly = true.

Definition at line 377 of file BufferizableOpInterface.h.

Referenced by mlir::bufferization::bufferizeModuleOp().

◆ defaultMemorySpaceFn

DefaultMemorySpaceFn mlir::bufferization::BufferizationOptions::defaultMemorySpaceFn
Initial value:
=
[](TensorType t) -> std::optional<Attribute> { return Attribute(); }

Definition at line 372 of file BufferizableOpInterface.h.

◆ enforceAliasingInvariants

bool mlir::bufferization::BufferizationOptions::enforceAliasingInvariants = true

Certain ops have aliasing OpOperand/OpResult invariants (e.g., scf.for).

If this flag is set to false, those invariants are no longer enforced with buffer copies.

Note: Deactivating this flag can lead to incorrect bufferization results when used incorrectly. This flag is useful with AlwaysCopyAnalysisState which bufferizes all writing tensor OpOperands out-of-place.

Definition at line 326 of file BufferizableOpInterface.h.

◆ functionArgTypeConverterFn

FunctionArgTypeConverterFn mlir::bufferization::BufferizationOptions::functionArgTypeConverterFn = nullptr

Type converter from tensors to memrefs.

This type converter is used to determine bufferized function argument and result types. By default, a type converter that returns a memref type with a fully dynamic layout map is used.

If bufferizeFunctionBoundaries is not set, this function isn't used.

Definition at line 353 of file BufferizableOpInterface.h.

Referenced by setFunctionBoundaryTypeConversion().

◆ inferFunctionResultLayout

bool mlir::bufferization::BufferizationOptions::inferFunctionResultLayout = true

If true, function result types are inferred from the body of the function.

Otherwise, function result type is determined by functionArgTypeConverterFn.

If bufferizeFunctionBoundaries is not set, this flag has no effect.

Definition at line 360 of file BufferizableOpInterface.h.

Referenced by setFunctionBoundaryTypeConversion().

◆ memCpyFn

std::optional<MemCpyFn> mlir::bufferization::BufferizationOptions::memCpyFn

Definition at line 294 of file BufferizableOpInterface.h.

Referenced by createMemCpy().

◆ opFilter

OpFilter mlir::bufferization::BufferizationOptions::opFilter

A filter that specifies which ops should be bufferized and which ops should be ignored.

Definition at line 287 of file BufferizableOpInterface.h.

Referenced by isOpAllowed(), mlir::sparse_tensor::SparsificationAndBufferizationPass::runDenseBufferization(), and mlir::bufferization::runOneShotModuleBufferize().

◆ printConflicts

bool mlir::bufferization::BufferizationOptions::printConflicts = false

If set to true, the IR is annotated with details about RaW conflicts.

For debugging only. Should be used together with testAnalysisOnly.

Definition at line 385 of file BufferizableOpInterface.h.

◆ stateInitializers

SmallVector<AnalysisStateInitFn> mlir::bufferization::BufferizationOptions::stateInitializers

Initializer functions for analysis state.

These can be used to initialize dialect-specific analysis state.

Definition at line 392 of file BufferizableOpInterface.h.

Referenced by mlir::bufferization::AnalysisState::AnalysisState().

◆ testAnalysisOnly

bool mlir::bufferization::BufferizationOptions::testAnalysisOnly = false

If set to true, does not modify the IR apart from adding attributes (for checking the results of the analysis) and post analysis steps.

Definition at line 381 of file BufferizableOpInterface.h.

Referenced by mlir::sparse_tensor::SparsificationAndBufferizationPass::runOnOperation().

◆ unknownTypeConverterFn

UnknownTypeConverterFn mlir::bufferization::BufferizationOptions::unknownTypeConverterFn = nullptr

Type converter from tensors to memrefs.

This type converter is used if no memref type could be inferred during bufferization. By default, a type converter that returns a memref type with a fully dynamic layout map is used.

Definition at line 366 of file BufferizableOpInterface.h.


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