|
MLIR 22.0.0git
|
Helper class for building convolution op matchers with minimal boilerplate. More...
Public Member Functions | |
| ConvMatcherBuilder (LinalgOp op, unsigned spatialRank, SmallVector< int64_t > *d, SmallVector< int64_t > *s, PoolingType poolingType=PoolingType::None) | |
| AffineExpr | dim (unsigned i) |
| Get affine dimension expression for dimension i. | |
| AffineExpr | strided (AffineExpr base, AffineExpr kernel, unsigned idx) |
| Build strided expression: base * stride[idx] + kernel * dilation[idx]. | |
| ConvMatcherBuilder & | matchStride (unsigned iDim, unsigned fDim, unsigned oDim, unsigned idx) |
| Match stride/dilation pattern for a spatial dimension. | |
| ConvMatcherBuilder & | matchMaps (ArrayRef< ArrayRef< AffineExpr > > maps) |
| Match expected indexing maps layout. Returns *this for method chaining. | |
| bool | matchBody (bool zeroPointOffset=false) |
| Match body pattern. This should be called last. | |
Helper class for building convolution op matchers with minimal boilerplate.
Reduces repetitive code across Conv1D/2D/3D and Depthwise variants as well as Pooling ops.
Usage: Create an instance with the op, spatial rank, and output pointers for extracted dilations/strides. Then chain matchStride() calls for each spatial dimension, followed by matchMaps() to verify indexing maps, and finally matchBody() to verify the operation body pattern.
The matched flag starts as true and is set to false if any match step fails. This allows chaining multiple match calls; once any match fails, all subsequent calls become no-ops and the final result is false.
The dilations and strides pointers are output parameters that get populated with the extracted dilation and stride values from the operation's indexing maps during matchStride() calls. These values are initially set to 1 for each spatial dimension and updated as patterns are matched.
|
inline |
Definition at line 536 of file Utils.cpp.
References getContext(), and mlir::linalg::None.
Referenced by matchMaps(), and matchStride().
|
inline |
Get affine dimension expression for dimension i.
Definition at line 546 of file Utils.cpp.
References mlir::getAffineDimExpr().
Referenced by mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNcwFcwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNwcWcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwFgchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv3DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNcwCwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNchwChwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv3DNdhwcDhwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxUnsignedOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinUnsignedOp >(), and mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcSumOp >().
Match body pattern. This should be called last.
Definition at line 572 of file Utils.cpp.
References mlir::linalg::bodyMatcherForConvolutionOps(), mlir::linalg::bodyMatcherForMaxSignedPoolOps(), mlir::linalg::bodyMatcherForMaxUnsignedPoolOps(), mlir::linalg::bodyMatcherForMinSignedPoolOps(), mlir::linalg::bodyMatcherForMinUnsignedPoolOps(), mlir::linalg::bodyMatcherForSumPoolOps(), mlir::Block::getTerminator(), mlir::linalg::MaxSigned, mlir::linalg::MaxUnsigned, mlir::linalg::MinSigned, mlir::linalg::MinUnsigned, mlir::linalg::None, and mlir::linalg::Sum.
|
inline |
Match expected indexing maps layout. Returns *this for method chaining.
Definition at line 565 of file Utils.cpp.
References mlir::linalg::convLayoutMatches(), and ConvMatcherBuilder().
Referenced by mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNcwFcwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNwcWcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwFgchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv3DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNcwCwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNchwChwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv3DNdhwcDhwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxUnsignedOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinUnsignedOp >(), and mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcSumOp >().
|
inline |
Match stride/dilation pattern for a spatial dimension.
Returns *this for method chaining.
Definition at line 555 of file Utils.cpp.
References ConvMatcherBuilder(), and mlir::linalg::matchConvDimAddExprPattern().
Referenced by mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNcwFcwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNwcWcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwFgchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv3DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNcwCwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNchwChwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv3DNdhwcDhwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxUnsignedOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinUnsignedOp >(), and mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcSumOp >().
|
inline |
Build strided expression: base * stride[idx] + kernel * dilation[idx].
Definition at line 549 of file Utils.cpp.
Referenced by mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNcwFcwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DNwcWcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv1DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNchwFchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwFgchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNgchwGfchwQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcFhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwcHwcfQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DNhwgcGfhwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv2DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::Conv3DOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNcwCwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv1DNwcWcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNchwChwOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcmQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv2DNhwcHwcQOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::DepthwiseConv3DNdhwcDhwcmOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMaxUnsignedOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinOp >(), mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcMinUnsignedOp >(), and mlir::linalg::isaConvolutionOpOfType< linalg::PoolingNhwcSumOp >().