MLIR
21.0.0git
|
Replace a linalg.add with one operand the single user of a contraction, which has a zero-filled, "identity-mapped" destination and is dominated by the other
operand, by the contraction with other
as its dest.
More...
Public Member Functions | |
LogicalResult | matchAndRewrite (linalg::AddOp addOp, PatternRewriter &rewriter) const override |
![]() | |
OpRewritePattern (MLIRContext *context, PatternBenefit benefit=1, ArrayRef< StringRef > generatedNames={}) | |
Patterns must specify the root operation name they match against, and can also specify the benefit of the pattern matching and a list of generated ops. More... | |
![]() | |
LogicalResult | matchAndRewrite (Operation *op, PatternRewriter &rewriter) const final |
Wrapper around the RewritePattern method that passes the derived op type. More... | |
virtual LogicalResult | matchAndRewrite (SourceOp op, PatternRewriter &rewriter) const =0 |
Method that operates on the SourceOp type. More... | |
![]() | |
virtual | ~RewritePattern ()=default |
![]() | |
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) |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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... | |
Replace a linalg.add with one operand the single user of a contraction, which has a zero-filled, "identity-mapped" destination and is dominated by the other
operand, by the contraction with other
as its dest.
As an example, the following pseudo-code will be rewritten cst = arith.constant 0.000000e+00 empty = tensor.empty() zeroed = linalg.fill ins(cst : f32) outs(empty : !type) -> !type C = linalg.matmul ins(A, B) outs(zeroed) empty2 = tensor.empty() zeroed2 = linalg.fill ins(cst : f32) outs(empty2 : !type) -> !type F = linalg.matmul ins(D, E) outs(zeroed2) out = linalg.add ins(C, F) outs(empty) to: cst = arith.constant 0.000000e+00 empty = tensor.empty() zeroed = linalg.fill ins(cst : f32) outs(empty : !type) -> !type C = linalg.matmul ins(A, B) outs(zeroed) out = linalg.matmul ins(D, E) outs(C)
Definition at line 55 of file FoldAddIntoDest.cpp.
|
inlineoverride |
Definition at line 58 of file FoldAddIntoDest.cpp.
References mlir::Value::getDefiningOp(), mlir::linalg::isaContractionOpInterface(), isDefinedAsZero(), mlir::RewriterBase::modifyOpInPlace(), mlir::RewriterBase::notifyMatchFailure(), mlir::DominanceInfo::properlyDominates(), and mlir::RewriterBase::replaceAllOpUsesWith().