MLIR
20.0.0git
|
Lowering for memory allocation ops. More...
#include "mlir/Conversion/MemRefToLLVM/AllocLikeConversion.h"
Public Member Functions | |
AllocationOpLLVMLowering (StringRef opName, const LLVMTypeConverter &converter, PatternBenefit benefit=1) | |
Type | getIndexType () const |
Gets the MLIR type wrapping the LLVM integer type whose bit width is defined by the used type converter. More... | |
Type | getVoidPtrType () const |
Get the MLIR type wrapping the LLVM i8* type. More... | |
Public Member Functions inherited from mlir::ConvertToLLVMPattern | |
ConvertToLLVMPattern (StringRef rootOpName, MLIRContext *context, const LLVMTypeConverter &typeConverter, PatternBenefit benefit=1) | |
Public Member Functions inherited from mlir::ConversionPattern | |
virtual void | rewrite (Operation *op, ArrayRef< Value > operands, ConversionPatternRewriter &rewriter) const |
Hook for derived classes to implement rewriting. More... | |
virtual LogicalResult | matchAndRewrite (Operation *op, ArrayRef< Value > operands, ConversionPatternRewriter &rewriter) const |
Hook for derived classes to implement combined matching and rewriting. More... | |
LogicalResult | matchAndRewrite (Operation *op, PatternRewriter &rewriter) const final |
Attempt to match and rewrite the IR root at the specified operation. More... | |
const TypeConverter * | getTypeConverter () const |
Return the type converter held by this pattern, or nullptr if the pattern does not require type conversion. More... | |
template<typename ConverterTy > | |
std::enable_if_t< std::is_base_of< TypeConverter, ConverterTy >::value, const ConverterTy * > | getTypeConverter () const |
Public Member Functions inherited from mlir::RewritePattern | |
virtual | ~RewritePattern ()=default |
virtual void | rewrite (Operation *op, PatternRewriter &rewriter) const |
Rewrite the IR rooted at the specified operation with the result of this pattern, generating any new operations with the specified builder. More... | |
virtual LogicalResult | match (Operation *op) const |
Attempt to match against code rooted at the specified operation, which is the same operation code as getRootKind(). More... | |
Public Member Functions inherited from mlir::Pattern | |
ArrayRef< OperationName > | getGeneratedOps () const |
Return a list of operations that may be generated when rewriting an operation instance with this pattern. More... | |
std::optional< OperationName > | getRootKind () const |
Return the root node that this pattern matches. More... | |
std::optional< TypeID > | getRootInterfaceID () const |
Return the interface ID used to match the root operation of this pattern. More... | |
std::optional< TypeID > | getRootTraitID () const |
Return the trait ID used to match the root operation of this pattern. More... | |
PatternBenefit | getBenefit () const |
Return the benefit (the inverse of "cost") of matching this pattern. More... | |
bool | hasBoundedRewriteRecursion () const |
Returns true if this pattern is known to result in recursive application, i.e. More... | |
MLIRContext * | getContext () const |
Return the MLIRContext used to create this pattern. More... | |
StringRef | getDebugName () const |
Return a readable name for this pattern. More... | |
void | setDebugName (StringRef name) |
Set the human readable debug name used for this pattern. More... | |
ArrayRef< StringRef > | getDebugLabels () const |
Return the set of debug labels attached to this pattern. More... | |
void | addDebugLabels (ArrayRef< StringRef > labels) |
Add the provided debug labels to this pattern. More... | |
void | addDebugLabels (StringRef label) |
Static Public Member Functions | |
static Value | createIndexAttrConstant (OpBuilder &builder, Location loc, Type resultType, int64_t value) |
Create a constant Op producing a value of resultType from an index-typed integer attribute. More... | |
Static Public Member Functions inherited from mlir::RewritePattern | |
template<typename T , typename... Args> | |
static std::unique_ptr< T > | create (Args &&...args) |
This method provides a convenient interface for creating and initializing derived rewrite patterns of the given type T . More... | |
Protected Member Functions | |
template<typename OpType > | |
Value | getAlignment (ConversionPatternRewriter &rewriter, Location loc, OpType op) const |
Computes the alignment for the given memory allocation op. More... | |
template<typename OpType > | |
int64_t | alignedAllocationGetAlignment (ConversionPatternRewriter &rewriter, Location loc, OpType op, const DataLayout *defaultLayout) const |
Computes the alignment for aligned_alloc used to allocate the buffer for the memory allocation op. More... | |
std::tuple< Value, Value > | allocateBufferManuallyAlign (ConversionPatternRewriter &rewriter, Location loc, Value sizeBytes, Operation *op, Value alignment) const |
Allocates a memory buffer using an allocation method that doesn't guarantee alignment. More... | |
Value | allocateBufferAutoAlign (ConversionPatternRewriter &rewriter, Location loc, Value sizeBytes, Operation *op, const DataLayout *defaultLayout, int64_t alignment) const |
Allocates a memory buffer using an aligned allocation method. More... | |
Protected Member Functions inherited from mlir::ConvertToLLVMPattern | |
LLVM::LLVMDialect & | getDialect () const |
Returns the LLVM dialect. More... | |
const LLVMTypeConverter * | getTypeConverter () const |
Type | getIndexType () const |
Gets the MLIR type wrapping the LLVM integer type whose bit width is defined by the used type converter. More... | |
Type | getIntPtrType (unsigned addressSpace=0) const |
Gets the MLIR type wrapping the LLVM integer type whose bit width corresponds to that of a LLVM pointer type. More... | |
Type | getVoidType () const |
Gets the MLIR type wrapping the LLVM void type. More... | |
Type | getVoidPtrType () const |
Get the MLIR type wrapping the LLVM i8* type. More... | |
Value | getStridedElementPtr (Location loc, MemRefType type, Value memRefDesc, ValueRange indices, ConversionPatternRewriter &rewriter) const |
bool | isConvertibleAndHasIdentityMaps (MemRefType type) const |
Returns if the given memref has identity maps and the element type is convertible to LLVM. More... | |
Type | getElementPtrType (MemRefType type) const |
Returns the type of a pointer to an element of the memref. More... | |
void | getMemRefDescriptorSizes (Location loc, MemRefType memRefType, ValueRange dynamicSizes, ConversionPatternRewriter &rewriter, SmallVectorImpl< Value > &sizes, SmallVectorImpl< Value > &strides, Value &size, bool sizeInBytes=true) const |
Computes sizes, strides and buffer size of memRefType with identity layout. More... | |
Value | getSizeInBytes (Location loc, Type type, ConversionPatternRewriter &rewriter) const |
Computes the size of type in bytes. More... | |
Value | getNumElements (Location loc, MemRefType memRefType, ValueRange dynamicSizes, ConversionPatternRewriter &rewriter) const |
Computes total number of elements for the given MemRef and dynamicSizes. More... | |
MemRefDescriptor | createMemRefDescriptor (Location loc, MemRefType memRefType, Value allocatedPtr, Value alignedPtr, ArrayRef< Value > sizes, ArrayRef< Value > strides, ConversionPatternRewriter &rewriter) const |
Creates and populates a canonical memref descriptor struct. More... | |
LogicalResult | copyUnrankedDescriptors (OpBuilder &builder, Location loc, TypeRange origTypes, SmallVectorImpl< Value > &operands, bool toDynamic) const |
Copies the memory descriptor for any operands that were unranked descriptors originally to heap-allocated memory (if toDynamic is true) or to stack-allocated memory (otherwise). More... | |
Protected Member Functions inherited from mlir::ConversionPattern | |
template<typename... Args> | |
ConversionPattern (const TypeConverter &typeConverter, Args &&...args) | |
Construct a conversion pattern with the given converter, and forward the remaining arguments to RewritePattern. More... | |
Protected Member Functions inherited from mlir::RewritePattern | |
Pattern (StringRef rootName, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Inherit the base constructors from Pattern . More... | |
Pattern (MatchAnyOpTypeTag tag, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Inherit the base constructors from Pattern . More... | |
Pattern (MatchInterfaceOpTypeTag tag, TypeID interfaceID, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Inherit the base constructors from Pattern . More... | |
Pattern (MatchTraitOpTypeTag tag, TypeID traitID, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Inherit the base constructors from Pattern . More... | |
Protected Member Functions inherited from mlir::Pattern | |
Pattern (StringRef rootName, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Construct a pattern with a certain benefit that matches the operation with the given root name. More... | |
Pattern (MatchAnyOpTypeTag tag, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Construct a pattern that may match any operation type. More... | |
Pattern (MatchInterfaceOpTypeTag tag, TypeID interfaceID, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Construct a pattern that may match any operation that implements the interface defined by the provided interfaceID . More... | |
Pattern (MatchTraitOpTypeTag tag, TypeID traitID, PatternBenefit benefit, MLIRContext *context, ArrayRef< StringRef > generatedNames={}) | |
Construct a pattern that may match any operation that implements the trait defined by the provided traitID . More... | |
void | setHasBoundedRewriteRecursion (bool hasBoundedRecursionArg=true) |
Set the flag detailing if this pattern has bounded rewrite recursion or not. More... | |
Static Protected Member Functions | |
static Value | createAligned (ConversionPatternRewriter &rewriter, Location loc, Value input, Value alignment) |
Computes the aligned value for 'input' as follows: bumped = input + alignement - 1 aligned = bumped - bumped % alignment. More... | |
static MemRefType | getMemRefResultType (Operation *op) |
Static Protected Member Functions inherited from mlir::ConvertToLLVMPattern | |
static Value | createIndexAttrConstant (OpBuilder &builder, Location loc, Type resultType, int64_t value) |
Create a constant Op producing a value of resultType from an index-typed integer attribute. More... | |
Additional Inherited Members | |
Protected Attributes inherited from mlir::ConversionPattern | |
const TypeConverter * | typeConverter = nullptr |
An optional type converter for use by this pattern. More... | |
Lowering for memory allocation ops.
Definition at line 17 of file AllocLikeConversion.h.
|
inlineexplicit |
Definition at line 22 of file AllocLikeConversion.h.
|
inlineprotected |
Computes the alignment for aligned_alloc used to allocate the buffer for the memory allocation op.
Aligned_alloc requires the allocation size to be a power of two, and the allocation size to be a multiple of the alignment.
Definition at line 65 of file AllocLikeConversion.h.
References max().
|
protected |
Allocates a memory buffer using an aligned allocation method.
Definition at line 136 of file AllocLikeConversion.cpp.
References castAllocFuncResult(), mlir::OpBuilder::create(), createAligned(), createIndexAttrConstant(), mlir::ConvertToLLVMPattern::getElementPtrType(), getIndexType(), getMemRefResultType(), mlir::Operation::getParentWithTrait(), and mlir::ConvertToLLVMPattern::getTypeConverter().
|
protected |
Allocates a memory buffer using an allocation method that doesn't guarantee alignment.
Returns the pointer and its aligned value.
Definition at line 66 of file AllocLikeConversion.cpp.
References castAllocFuncResult(), mlir::OpBuilder::create(), createAligned(), mlir::emitError(), mlir::ConvertToLLVMPattern::getElementPtrType(), getIndexType(), getMemRefResultType(), mlir::Operation::getParentWithTrait(), and mlir::ConvertToLLVMPattern::getTypeConverter().
|
staticprotected |
Computes the aligned value for 'input' as follows: bumped = input + alignement - 1 aligned = bumped - bumped % alignment.
Definition at line 39 of file AllocLikeConversion.cpp.
References mlir::OpBuilder::create(), createIndexAttrConstant(), and mlir::Value::getType().
Referenced by allocateBufferAutoAlign(), and allocateBufferManuallyAlign().
|
static |
Create a constant Op producing a value of resultType
from an index-typed integer attribute.
Definition at line 69 of file Pattern.cpp.
Referenced by allocateBufferAutoAlign(), createAligned(), and getAlignment().
|
inlineprotected |
Computes the alignment for the given memory allocation op.
Definition at line 41 of file AllocLikeConversion.h.
References createIndexAttrConstant(), getIndexType(), mlir::ConvertToLLVMPattern::getSizeInBytes(), and mlir::Value::getType().
Type ConvertToLLVMPattern::getIndexType |
Gets the MLIR type wrapping the LLVM integer type whose bit width is defined by the used type converter.
Definition at line 55 of file Pattern.cpp.
References mlir::OpBuilder::create(), and mlir::Builder::getIndexAttr().
Referenced by allocateBufferAutoAlign(), allocateBufferManuallyAlign(), and getAlignment().
|
inlinestaticprotected |
Definition at line 35 of file AllocLikeConversion.h.
References mlir::Operation::getResult(), and mlir::Value::getType().
Referenced by allocateBufferAutoAlign(), and allocateBufferManuallyAlign().
Type ConvertToLLVMPattern::getVoidPtrType |
Get the MLIR type wrapping the LLVM i8* type.
Definition at line 65 of file Pattern.cpp.