MLIR 22.0.0git
Utils.h File Reference
#include "mlir/Dialect/Linalg/IR/Linalg.h"
#include "mlir/Dialect/SCF/IR/SCF.h"
#include "mlir/Dialect/Utils/StructuredOpsUtils.h"
#include "llvm/ADT/StringSet.h"
#include <optional>

Go to the source code of this file.

Classes

struct  mlir::linalg::SliceParameters
 A struct containg offsets-sizes-strides arguments of the tiled shape. More...
struct  mlir::linalg::FusionInfo
 A struct containing the Linalg producer before and after fusion. More...
struct  mlir::linalg::ProcInfo
 Callback function type used to get processor ID, and number of processors used for distribution for all parallel loops generated. More...
struct  mlir::linalg::LinalgLoopDistributionOptions
 Options that allow distribution of loops generated in Linalg transforms to processors while generating the loops. More...
struct  mlir::linalg::RegionMatcher
 A struct containing common matchers over linalg op's region. More...
struct  mlir::linalg::GenerateLoopNest< LoopTy >
 Utility class used to generate nested loops with ranges described by loopRanges and loop type described by the iteratorTypes. More...

Namespaces

namespace  mlir
 Include the generated interface declarations.
namespace  mlir::affine
namespace  mlir::tensor
namespace  mlir::linalg

Typedefs

using mlir::linalg::ProcInfoCallBackFn

Enumerations

enum class  mlir::linalg::LinalgTilingLoopType { mlir::linalg::Loops = 0 , mlir::linalg::AffineLoops = 1 , mlir::linalg::ParallelLoops = 2 }
 The type of loops to be generated during tiling. More...
enum class  mlir::linalg::DistributionMethod { mlir::linalg::Cyclic = 0 , mlir::linalg::CyclicNumProcsGeNumIters = 1 , mlir::linalg::CyclicNumProcsEqNumIters = 2 , mlir::linalg::None = 3 }
 Scheme used to distribute loops to processors. More...

Functions

SmallVector< int64_tmlir::linalg::getPackInverseDestPerm (linalg::PackOp packOp, PackingMetadata &metadata)
 Compute inverse permutation for the destination tensor (i.e.
SmallVector< int64_tmlir::linalg::getUnPackInverseSrcPerm (linalg::UnPackOp, PackingMetadata &metadata)
 Compute inverse permutation for the source tensor (i.e.
bool mlir::linalg::allIndexingsAreProjectedPermutation (LinalgOp op)
 Check if all indexing maps are projected permutations.
bool mlir::linalg::hasOnlyScalarElementwiseOp (Region &r)
 Detect whether r has only ConstantOp, ElementwiseMappable and YieldOp.
bool mlir::linalg::isElementwise (LinalgOp op)
 Check if a LinalgOp is an element-wise operation.
bool mlir::linalg::isParallelIterator (utils::IteratorType iteratorType)
 Check if iterator type has "parallel" semantics.
bool mlir::linalg::isReductionIterator (utils::IteratorType iteratorType)
 Check if iterator type has "reduction" semantics.
Value mlir::linalg::makeComposedPadHighOp (OpBuilder &b, Location loc, RankedTensorType type, Value source, Value padding, bool nofold, ValueRange typeDynDims={})
 Create a tensor::PadOp that pads source to the shape of type whose sizes are assumed to be greater than the dynamic source size.
GenericOp mlir::linalg::makeMemRefCopyOp (OpBuilder &b, Location loc, Value from, Value to)
 Returns GenericOp that copies an n-D memref.
std::optional< SmallVector< ReassociationIndices > > mlir::linalg::getReassociationMapForFoldingUnitDims (ArrayRef< OpFoldResult > mixedSizes)
 Get the reassociation maps to fold the result of a extract_slice (or source of a insert_slice) operation with given offsets, and sizes to its rank-reduced version.
template<typename ConvOpTy>
bool mlir::linalg::isaConvolutionOpOfType (LinalgOp op, SmallVector< int64_t > *dilations, SmallVector< int64_t > *strides)
 Given a linalg op this function returns true if it is a convolution op of type ConvOpTy and populates dilations and strides with values inferred from the indexing maps.
SmallVector< OpFoldResultmlir::linalg::computeTileOffsets (OpBuilder &b, Location loc, ArrayRef< OpFoldResult > ivs, ArrayRef< OpFoldResult > tileSizes)
 Computes tile offsets, given a list of loop ivs and tileSizes.
SmallVector< OpFoldResultmlir::linalg::computeTileSizes (OpBuilder &b, Location loc, ArrayRef< OpFoldResult > tileSizes, ArrayRef< OpFoldResult > sizeBounds)
 Computes tile sizes, given a list of tileSizes and dimension sizes (sizeBounds).
SmallVector< Typemlir::linalg::getTensorOutputTypes (LinalgOp op, ValueRange operands)
 Returns the list of tensor output types produced when the given structured operation op is applied to the given operands.
SmallVector< Valuemlir::linalg::insertSlicesBack (OpBuilder &builder, Location loc, LinalgOp op, ValueRange operands, ValueRange results)
 Creates insert_slice ops that insert results back into larger tensors they were originally extracted from with extract_slice before being passed as operands to the given structured operation op or its clone.
SliceParameters mlir::linalg::computeSliceParameters (OpBuilder &builder, Location loc, Value valueToTile, ArrayRef< OpFoldResult > tileSizes, AffineMap map, ArrayRef< OpFoldResult > lbs, ArrayRef< OpFoldResult > ubs, ArrayRef< OpFoldResult > subShapeSizes, bool omitPartialTileCheck)
 Computes SliceParameters for a single valueToTile assuming that its user is being tiled with the given loop bounds lbs and ubs and the tile sizes tileSizes.
SmallVector< std::optional< SliceParameters > > mlir::linalg::computeAllSliceParameters (OpBuilder &builder, Location loc, LinalgOp linalgOp, ValueRange valuesToTile, ArrayRef< OpFoldResult > ivs, ArrayRef< OpFoldResult > tileSizes, ArrayRef< OpFoldResult > sizeBounds, bool omitPartialTileCheck)
 Computes SliceParamaters for all valuesToTile of the given linalgOp, assuming linalgOp is being fused into a loop nest.
Operationmlir::linalg::makeTiledShape (OpBuilder &builder, Location loc, Value valueToTile, ArrayRef< OpFoldResult > tileSizes, AffineMap map, ArrayRef< OpFoldResult > lbs, ArrayRef< OpFoldResult > ubs, ArrayRef< OpFoldResult > subShapeSizes, bool omitPartialTileCheck)
 Creates an extract_slice/subview op for a single valueToTile with builder.
SmallVector< Valuemlir::linalg::makeTiledShapes (OpBuilder &builder, Location loc, LinalgOp linalgOp, ValueRange valuesToTile, ArrayRef< OpFoldResult > ivs, ArrayRef< OpFoldResult > tileSizes, ArrayRef< OpFoldResult > sizeBounds, bool omitPartialTileCheck)
 Creates extract_slice/subview ops for all valuesToTile of the given linalgOp with builder, assuming linalgOp is being fused into a loop nest for tiling with the given induction variables ivs and tile sizes tileSizes.
void mlir::linalg::offsetIndices (OpBuilder &b, LinalgOp linalgOp, ArrayRef< OpFoldResult > offests)
 Add the specified offsets to any linalg.index ops contained in the given linalgOp.
void mlir::linalg::offsetIndices (RewriterBase &b, LinalgOp linalgOp, ArrayRef< OpFoldResult > offests)
FailureOr< FusionInfomlir::linalg::fuseProducerOfTensor (OpBuilder &b, OpOperand &consumerOpOperand)
 This implements the fusion part of the "tileAndFuse on tensors" transformation and thus requires the consumerOpOperand to be a extract_slice op (generally obtained by applying the tiling transformation).
FailureOr< FusionInfomlir::linalg::fuseProducerOfTensor (OpBuilder &b, OpResult producerOpResult, OpOperand &consumerOpOperand)
 This implements the fusion part of the "tileAndFuse on tensors" transformation and thus requires the consumerOpOperand to be a extract_slice op (generally obtained by applying the tiling transformation).
void mlir::linalg::updateBoundsForCyclicDistribution (OpBuilder &builder, Location loc, Value procId, Value nprocs, Value &lb, Value &ub, Value &step)
 Update the lb, ub and step to get per processor lb, ub and step.
template<typename OpTy>
SmallVector< NamedAttributemlir::linalg::getPrunedAttributeList (OpTy op)
 Returns an attribute list that excludes pre-defined attributes.