MLIR 22.0.0git
LowerVectorContract.cpp File Reference

Go to the source code of this file.

Classes

struct  ContractOpToElementwise
 Lower vector.contract with all size one reduction dimensions to elementwise ops when possible. More...
class  OuterProductOpLowering
 Progressive lowering of OuterProductOp. More...

Macros

#define DEBUG_TYPE   "vector-contract-lowering"

Functions

static std::optional< int64_tgetResultIndex (AffineMap map, int64_t index)
static SmallVector< AttributeadjustIter (ArrayAttr iteratorTypes, int64_t index)
static AffineMap adjustMap (AffineMap map, int64_t index, PatternRewriter &rewriter)
static Value reshapeLoad (Location loc, Value val, VectorType type, int64_t index, int64_t pos, PatternRewriter &rewriter)
static Value reshapeStore (Location loc, Value val, Value result, VectorType type, int64_t index, int64_t pos, PatternRewriter &rewriter)
static std::optional< ValuecreateContractArithOp (Location loc, Value x, Value y, Value acc, vector::CombiningKind kind, PatternRewriter &rewriter, bool isInt, Value mask=Value())
 Helper to create arithmetic operation associated with a kind of contraction.
static SmallVector< int64_tgetReductionIndex (AffineMap map, ArrayAttr iteratorTypes)
 Return the positions of the reductions in the given map.
static std::optional< unsignedgetDimPosition (AffineMap map, unsigned dim)
 Look for a given dimension in an affine map and return its position.
static Value createAdd (Location loc, Value x, Value y, bool isInt, PatternRewriter &rewriter)
 Creates an AddIOp if isInt is true otherwise create an arith::AddFOp using operands x and y.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "vector-contract-lowering"

Definition at line 26 of file LowerVectorContract.cpp.

Function Documentation

◆ adjustIter()

SmallVector< Attribute > adjustIter ( ArrayAttr iteratorTypes,
int64_t index )
static

Definition at line 45 of file LowerVectorContract.cpp.

References ArrayAttr().

◆ adjustMap()

◆ createAdd()

Value createAdd ( Location loc,
Value x,
Value y,
bool isInt,
PatternRewriter & rewriter )
static

Creates an AddIOp if isInt is true otherwise create an arith::AddFOp using operands x and y.

Definition at line 186 of file LowerVectorContract.cpp.

◆ createContractArithOp()

std::optional< Value > createContractArithOp ( Location loc,
Value x,
Value y,
Value acc,
vector::CombiningKind kind,
PatternRewriter & rewriter,
bool isInt,
Value mask = Value() )
static

Helper to create arithmetic operation associated with a kind of contraction.

Definition at line 124 of file LowerVectorContract.cpp.

References mlir::vector::makeArithReduction(), mul, and mlir::vector::selectPassthru().

Referenced by OuterProductOpLowering::matchAndRewrite(), and ContractOpToElementwise::matchAndRewriteMaskableOp().

◆ getDimPosition()

std::optional< unsigned > getDimPosition ( AffineMap map,
unsigned dim )
static

Look for a given dimension in an affine map and return its position.

Return std::nullopt if the dimension is not in the map results.

Definition at line 176 of file LowerVectorContract.cpp.

References mlir::AffineMap::getDimPosition(), and mlir::AffineMap::getNumResults().

Referenced by ContractOpToElementwise::matchAndRewriteMaskableOp().

◆ getReductionIndex()

SmallVector< int64_t > getReductionIndex ( AffineMap map,
ArrayAttr iteratorTypes )
static

Return the positions of the reductions in the given map.

Definition at line 164 of file LowerVectorContract.cpp.

References ArrayAttr(), mlir::AffineMap::getDimPosition(), mlir::AffineMap::getNumResults(), and mlir::vector::isReductionIterator().

Referenced by ContractOpToElementwise::matchAndRewriteMaskableOp().

◆ getResultIndex()

std::optional< int64_t > getResultIndex ( AffineMap map,
int64_t index )
static

◆ reshapeLoad()

Value reshapeLoad ( Location loc,
Value val,
VectorType type,
int64_t index,
int64_t pos,
PatternRewriter & rewriter )
static

◆ reshapeStore()

Value reshapeStore ( Location loc,
Value val,
Value result,
VectorType type,
int64_t index,
int64_t pos,
PatternRewriter & rewriter )
static

Definition at line 101 of file LowerVectorContract.cpp.

References mlir::VectorType::Builder::dropDim(), reshapeStore(), and result.

Referenced by reshapeStore().