MLIR
17.0.0git
|
Options for BufferizableOpInterface-based bufferization. More...
#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
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 | DeallocationFn = std::function< LogicalResult(OpBuilder &, Location, Value)> |
Deallocator function: Deallocate a buffer that was allocated with AllocatorFn. 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 | UnknownTypeConverterFn = std::function< BaseMemRefType(Value, Attribute memorySpace, const BufferizationOptions &)> |
Tensor -> MemRef type converter. More... | |
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< Value > | createAlloc (OpBuilder &b, Location loc, MemRefType type, ValueRange dynShape) const |
Create a memref allocation with the given type and dynamic extents. More... | |
LogicalResult | createDealloc (OpBuilder &b, Location loc, Value allocatedBuffer) const |
Creates a memref deallocation. More... | |
LogicalResult | createMemCpy (OpBuilder &b, Location loc, Value from, Value to) const |
Creates a memcpy between two given buffers. More... | |
Public Attributes | |
OpFilter | opFilter |
A filter that specifies which ops should be bufferized and which ops should be ignored. More... | |
std::optional< AllocationFn > | allocationFn |
Helper functions for allocation, deallocation, memory copying. More... | |
std::optional< DeallocationFn > | deallocationFn |
std::optional< MemCpyFn > | memCpyFn |
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... | |
std::optional< Attribute > | defaultMemorySpace = Attribute() |
The default memory space that should be used when it cannot be inferred from the context. More... | |
bool | enforceAliasingInvariants = true |
Certain ops have aliasing OpOperand/OpResult invariants (e.g., scf.for). More... | |
LayoutMapOption | functionBoundaryTypeConversion |
This flag controls buffer types on function signatures. More... | |
UnknownTypeConverterFn | unknownTypeConverterFn = nullptr |
Type converter from tensors to memrefs. More... | |
bool | createDeallocs = true |
Specifies whether dealloc ops should be generated along with alloc ops. More... | |
unsigned | analysisFuzzerSeed = 0 |
Seed for the analysis fuzzer. More... | |
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< AnalysisStateInitFn > | stateInitializers |
Initializer functions for analysis state. More... | |
Options for BufferizableOpInterface-based bufferization.
Definition at line 170 of file BufferizableOpInterface.h.
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 173 of file BufferizableOpInterface.h.
using mlir::bufferization::BufferizationOptions::AnalysisStateInitFn = std::function<void(AnalysisState &)> |
Initializer function for analysis state.
Definition at line 183 of file BufferizableOpInterface.h.
using mlir::bufferization::BufferizationOptions::DeallocationFn = std::function<LogicalResult(OpBuilder &, Location, Value)> |
Deallocator function: Deallocate a buffer that was allocated with AllocatorFn.
Definition at line 177 of file BufferizableOpInterface.h.
using mlir::bufferization::BufferizationOptions::MemCpyFn = std::function<LogicalResult(OpBuilder &, Location, Value, Value)> |
Memcpy function: Generate a memcpy between two buffers.
Definition at line 180 of file BufferizableOpInterface.h.
using mlir::bufferization::BufferizationOptions::UnknownTypeConverterFn = std::function<BaseMemRefType( Value, Attribute memorySpace, const BufferizationOptions &)> |
Tensor -> MemRef type converter.
Parameters: Value, memory space, bufferization options
Definition at line 186 of file BufferizableOpInterface.h.
BufferizationOptions::BufferizationOptions | ( | ) |
Definition at line 309 of file BufferizableOpInterface.cpp.
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 721 of file BufferizableOpInterface.cpp.
References allocationFn, bufferAlignment, mlir::OpBuilder::create(), and mlir::Builder::getI64IntegerAttr().
LogicalResult BufferizationOptions::createDealloc | ( | OpBuilder & | b, |
Location | loc, | ||
Value | allocatedBuffer | ||
) | const |
Creates a memref deallocation.
The given memref buffer must have been allocated using createAlloc
.
Definition at line 738 of file BufferizableOpInterface.cpp.
References mlir::OpBuilder::create(), deallocationFn, and mlir::success().
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 749 of file BufferizableOpInterface.cpp.
References mlir::OpBuilder::create(), memCpyFn, and mlir::success().
BufferizableOpInterface BufferizationOptions::dynCastBufferizableOp | ( | Operation * | op | ) | const |
Try to cast the given op to BufferizableOpInterface if the op is allow listed.
Definition at line 323 of file BufferizableOpInterface.cpp.
References isOpAllowed().
Referenced by mlir::bufferization::AnalysisState::findLastPrecedingWrite(), mlir::bufferization::AnalysisState::findValueInReverseUseDefChain(), inPlaceAnalysis(), and mlir::bufferization::AnalysisState::isTensorYielded().
BufferizableOpInterface BufferizationOptions::dynCastBufferizableOp | ( | Value | value | ) | const |
Try to cast the given value to BufferizableOpInterface if the op is allow listed.
Definition at line 333 of file BufferizableOpInterface.cpp.
References mlir::Value::getDefiningOp(), and isOpAllowed().
bool BufferizationOptions::isOpAllowed | ( | Operation * | op | ) | const |
Return true
if the given op should be bufferized.
Definition at line 312 of file BufferizableOpInterface.cpp.
References bufferizeFunctionBoundaries, mlir::Operation::getDialect(), mlir::bufferization::OpFilter::isOpAllowed(), and opFilter.
Referenced by dynCastBufferizableOp(), and mlir::bufferization::OneShotAnalysisState::OneShotAnalysisState().
std::optional<AllocationFn> mlir::bufferization::BufferizationOptions::allocationFn |
Helper functions for allocation, deallocation, memory copying.
Definition at line 207 of file BufferizableOpInterface.h.
Referenced by createAlloc().
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 227 of file BufferizableOpInterface.h.
unsigned mlir::bufferization::BufferizationOptions::analysisFuzzerSeed = 0 |
Seed for the analysis fuzzer.
If set to 0
, the fuzzer is deactivated. Should be used only with testAnalysisOnly = true
.
Definition at line 281 of file BufferizableOpInterface.h.
unsigned int mlir::bufferization::BufferizationOptions::bufferAlignment = 64 |
Buffer alignment for new memory allocations.
Definition at line 296 of file BufferizableOpInterface.h.
Referenced by createAlloc().
bool mlir::bufferization::BufferizationOptions::bufferizeFunctionBoundaries = false |
Specifies whether function boundaries (ops in the func dialect) should be bufferized or not.
Definition at line 231 of file BufferizableOpInterface.h.
Referenced by mlir::bufferization::analyzeModuleOp(), and isOpAllowed().
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 285 of file BufferizableOpInterface.h.
bool mlir::bufferization::BufferizationOptions::createDeallocs = true |
Specifies whether dealloc ops should be generated along with alloc ops.
If not, new memory allocations will leak.
Definition at line 277 of file BufferizableOpInterface.h.
std::optional<DeallocationFn> mlir::bufferization::BufferizationOptions::deallocationFn |
Definition at line 208 of file BufferizableOpInterface.h.
Referenced by createDealloc().
std::optional<Attribute> mlir::bufferization::BufferizationOptions::defaultMemorySpace = Attribute() |
The default memory space that should be used when it cannot be inferred from the context.
If case of std::nullopt, bufferization fails when the memory space cannot be inferred at any point.
Definition at line 236 of file BufferizableOpInterface.h.
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 246 of file BufferizableOpInterface.h.
LayoutMapOption mlir::bufferization::BufferizationOptions::functionBoundaryTypeConversion |
This flag controls buffer types on function signatures.
If bufferizeFunctionBoundaries
is not set, this flag has no effect.
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 266 of file BufferizableOpInterface.h.
std::optional<MemCpyFn> mlir::bufferization::BufferizationOptions::memCpyFn |
Definition at line 209 of file BufferizableOpInterface.h.
Referenced by createMemCpy().
OpFilter mlir::bufferization::BufferizationOptions::opFilter |
A filter that specifies which ops should be bufferized and which ops should be ignored.
Definition at line 201 of file BufferizableOpInterface.h.
Referenced by isOpAllowed().
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 293 of file BufferizableOpInterface.h.
Referenced by hasPrecedingAliasingNonWritableTensor().
SmallVector<AnalysisStateInitFn> mlir::bufferization::BufferizationOptions::stateInitializers |
Initializer functions for analysis state.
These can be used to initialize dialect-specific analysis state.
Definition at line 300 of file BufferizableOpInterface.h.
Referenced by mlir::bufferization::AnalysisState::AnalysisState().
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 289 of file BufferizableOpInterface.h.
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 273 of file BufferizableOpInterface.h.