MLIR 22.0.0git
mlir::linalg::ConvMatcherBuilder Class Reference

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].
ConvMatcherBuildermatchStride (unsigned iDim, unsigned fDim, unsigned oDim, unsigned idx)
 Match stride/dilation pattern for a spatial dimension.
ConvMatcherBuildermatchMaps (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.

Detailed Description

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.

Definition at line 527 of file Utils.cpp.

Constructor & Destructor Documentation

◆ ConvMatcherBuilder()

mlir::linalg::ConvMatcherBuilder::ConvMatcherBuilder ( LinalgOp op,
unsigned spatialRank,
SmallVector< int64_t > * d,
SmallVector< int64_t > * s,
PoolingType poolingType = PoolingType::None )
inline

Definition at line 536 of file Utils.cpp.

References getContext(), and mlir::linalg::None.

Referenced by matchMaps(), and matchStride().

Member Function Documentation

◆ dim()

AffineExpr mlir::linalg::ConvMatcherBuilder::dim ( unsigned i)
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 >().

◆ matchBody()

◆ matchMaps()

ConvMatcherBuilder & mlir::linalg::ConvMatcherBuilder::matchMaps ( ArrayRef< ArrayRef< AffineExpr > > maps)
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 >().

◆ matchStride()

ConvMatcherBuilder & mlir::linalg::ConvMatcherBuilder::matchStride ( unsigned iDim,
unsigned fDim,
unsigned oDim,
unsigned idx )
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 >().

◆ strided()

AffineExpr mlir::linalg::ConvMatcherBuilder::strided ( AffineExpr base,
AffineExpr kernel,
unsigned idx )
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 >().


The documentation for this class was generated from the following file: