MLIR
22.0.0git
|
A multi-dimensional affine map Affine map's are immutable like Type's, and they are uniqued. More...
#include "mlir/IR/AffineMap.h"
Public Types | |
using | ImplType = detail::AffineMapStorage |
Public Member Functions | |
constexpr | AffineMap ()=default |
AffineMap (ImplType *map) | |
MLIRContext * | getContext () const |
operator bool () const | |
bool | operator== (AffineMap other) const |
bool | operator!= (AffineMap other) const |
bool | isIdentity () const |
Returns true if this affine map is an identity affine map. More... | |
bool | isSymbolIdentity () const |
Returns true if this affine map is an identity affine map on the symbol identifiers. More... | |
bool | isMinorIdentity () const |
Returns true if this affine map is a minor identity, i.e. More... | |
SmallVector< unsigned > | getBroadcastDims () const |
Returns the list of broadcast dimensions (i.e. More... | |
bool | isMinorIdentityWithBroadcasting (SmallVectorImpl< unsigned > *broadcastedDims=nullptr) const |
Returns true if this affine map is a minor identity up to broadcasted dimensions which are indicated by value 0 in the result. More... | |
bool | isPermutationOfMinorIdentityWithBroadcasting (SmallVectorImpl< unsigned > &permutedDims) const |
Return true if this affine map can be converted to a minor identity with broadcast by doing a permute. More... | |
bool | isEmpty () const |
Returns true if this affine map is an empty map, i.e., () -> (). More... | |
bool | isSingleConstant () const |
Returns true if this affine map is a single result constant function. More... | |
bool | isConstant () const |
Returns true if this affine map has only constant results. More... | |
int64_t | getSingleConstantResult () const |
Returns the constant result of this map. More... | |
SmallVector< int64_t > | getConstantResults () const |
Returns the constant results of this map. More... | |
void | print (raw_ostream &os) const |
void | dump () const |
unsigned | getNumDims () const |
unsigned | getNumSymbols () const |
unsigned | getNumResults () const |
unsigned | getNumInputs () const |
ArrayRef< AffineExpr > | getResults () const |
AffineExpr | getResult (unsigned idx) const |
unsigned | getDimPosition (unsigned idx) const |
Extracts the position of the dimensional expression at the given result, when the caller knows it is safe to do so. More... | |
std::optional< unsigned > | getResultPosition (AffineExpr input) const |
Extracts the first result position where input dimension resides. More... | |
bool | isFunctionOfDim (unsigned position) const |
Return true if any affine expression involves AffineDimExpr position . More... | |
bool | isFunctionOfSymbol (unsigned position) const |
Return true if any affine expression involves AffineSymbolExpr position . More... | |
void | walkExprs (llvm::function_ref< void(AffineExpr)> callback) const |
Walk all of the AffineExpr's in this mapping. More... | |
AffineMap | replaceDimsAndSymbols (ArrayRef< AffineExpr > dimReplacements, ArrayRef< AffineExpr > symReplacements, unsigned numResultDims, unsigned numResultSyms) const |
This method substitutes any uses of dimensions and symbols (e.g. More... | |
AffineMap | replace (AffineExpr expr, AffineExpr replacement, unsigned numResultDims, unsigned numResultSyms) const |
Sparse replace method. More... | |
AffineMap | replace (const DenseMap< AffineExpr, AffineExpr > &map) const |
Sparse replace method. More... | |
AffineMap | replace (const DenseMap< AffineExpr, AffineExpr > &map, unsigned numResultDims, unsigned numResultSyms) const |
Sparse replace method. More... | |
AffineMap | shiftDims (unsigned shift, unsigned offset=0) const |
Replace dims[offset ... More... | |
AffineMap | shiftSymbols (unsigned shift, unsigned offset=0) const |
Replace symbols[offset ... More... | |
AffineMap | dropResult (int64_t pos) const |
Returns a new AffineMap with the same number of dims and symbols and one less result at pos , dropped. More... | |
AffineMap | dropResults (ArrayRef< int64_t > positions) const |
AffineMap | dropResults (const llvm::SmallBitVector &positions) const |
AffineMap | insertResult (AffineExpr expr, unsigned pos) const |
Returns a new AffineMap with the same number of dims and symbols and an extra result inserted at pos . More... | |
LogicalResult | constantFold (ArrayRef< Attribute > operandConstants, SmallVectorImpl< Attribute > &results, bool *hasPoison=nullptr) const |
Folds the results of the application of an affine map on the provided operands to a constant if possible. More... | |
AffineMap | partialConstantFold (ArrayRef< Attribute > operandConstants, SmallVectorImpl< int64_t > *results=nullptr, bool *hasPoison=nullptr) const |
Propagates the constant operands into this affine map. More... | |
AffineMap | compose (AffineMap map) const |
Returns the AffineMap resulting from composing this with map . More... | |
SmallVector< int64_t, 4 > | compose (ArrayRef< int64_t > values) const |
Applies composition by the dims of this to the integer values and returns the resulting values. More... | |
size_t | getNumOfZeroResults () const |
Returns the number of "zero" results (constant values == 0) in this map. More... | |
AffineMap | dropZeroResults () |
Returns the AffineMap resulting from removing "zero" results (constant values == 0) from this map. More... | |
bool | isProjectedPermutation (bool allowZeroInResults=false) const |
Returns true if the AffineMap represents a subset (i.e. More... | |
bool | isPermutation () const |
Returns true if the AffineMap represents a symbol-less permutation map. More... | |
AffineMap | getSubMap (ArrayRef< unsigned > resultPos) const |
Returns the map consisting of the resultPos subset. More... | |
AffineMap | getSliceMap (unsigned start, unsigned length) const |
Returns the map consisting of length expressions starting from start . More... | |
AffineMap | getMajorSubMap (unsigned numResults) const |
Returns the map consisting of the most major numResults results. More... | |
AffineMap | getMinorSubMap (unsigned numResults) const |
Returns the map consisting of the most minor numResults results. More... | |
uint64_t | getLargestKnownDivisorOfMapExprs () |
Get the largest known divisor of all map expressions. More... | |
const void * | getAsOpaquePointer () const |
Methods supporting C API. More... | |
Static Public Member Functions | |
static AffineMap | get (MLIRContext *context) |
Returns a zero result affine map with no dimensions or symbols: () -> (). More... | |
static AffineMap | get (unsigned dimCount, unsigned symbolCount, MLIRContext *context) |
Returns a zero result affine map with dimCount dimensions and symbolCount symbols, e.g. More... | |
static AffineMap | get (unsigned dimCount, unsigned symbolCount, AffineExpr result) |
Returns an affine map with dimCount dimensions and symbolCount mapping to a single output dimension. More... | |
static AffineMap | get (unsigned dimCount, unsigned symbolCount, ArrayRef< AffineExpr > results, MLIRContext *context) |
Returns an affine map with dimCount dimensions and symbolCount mapping to the given results. More... | |
static AffineMap | getConstantMap (int64_t val, MLIRContext *context) |
Returns a single constant result affine map. More... | |
static AffineMap | getMultiDimIdentityMap (unsigned numDims, MLIRContext *context) |
Returns an AffineMap with 'numDims' identity result dim exprs. More... | |
static AffineMap | getMinorIdentityMap (unsigned dims, unsigned results, MLIRContext *context) |
Returns an identity affine map (d0, ..., dn) -> (dp, ..., dn) on the most minor dimensions. More... | |
static AffineMap | getFilteredIdentityMap (MLIRContext *ctx, unsigned numDims, llvm::function_ref< bool(AffineDimExpr)> keepDimFilter) |
Returns an identity affine map with numDims input dimensions and filtered results using keepDimFilter . More... | |
static AffineMap | getPermutationMap (ArrayRef< unsigned > permutation, MLIRContext *context) |
Returns an AffineMap representing a permutation. More... | |
static AffineMap | getPermutationMap (ArrayRef< int64_t > permutation, MLIRContext *context) |
static AffineMap | getMultiDimMapWithTargets (unsigned numDims, ArrayRef< unsigned > targets, MLIRContext *context) |
Returns an affine map with numDims input dimensions and results specified by targets . More... | |
static SmallVector< AffineMap, 4 > | inferFromExprList (ArrayRef< ArrayRef< AffineExpr >> exprsList, MLIRContext *context) |
Returns a vector of AffineMaps; each with as many results as exprs.size() , as many dims as the largest dim in exprs and as many symbols as the largest symbol in exprs . More... | |
static SmallVector< AffineMap, 4 > | inferFromExprList (ArrayRef< SmallVector< AffineExpr, 4 >> exprsList, MLIRContext *context) |
static AffineMap | getFromOpaquePointer (const void *pointer) |
Friends | |
::llvm::hash_code | hash_value (AffineMap arg) |
A multi-dimensional affine map Affine map's are immutable like Type's, and they are uniqued.
Eg: (d0, d1) -> (d0/128, d0 mod 128, d1) The names used (d0, d1) don't matter - it's the mathematical function that is unique to this affine map.
Definition at line 46 of file AffineMap.h.
Definition at line 48 of file AffineMap.h.
|
constexprdefault |
Referenced by getFromOpaquePointer(), getMajorSubMap(), and getMinorSubMap().
|
inlineexplicit |
Definition at line 51 of file AffineMap.h.
Returns the AffineMap resulting from composing this
with map
.
The resulting AffineMap has as many AffineDimExpr as map
and as many AffineSymbolExpr as the concatenation of this
and map
(in which case the symbols of this
map come first).
Prerequisites: The maps are composable, i.e. that the number of AffineDimExpr of this
matches the number of results of map
.
Example: map1: (d0, d1)[s0, s1] -> (d0 + 1 + s1, d1 - 1 - s0)
map2: (d0)[s0] -> (d0 + s0, d0 - s0)
map1.compose(map2): (d0)[s0, s1, s2] -> (d0 + s1 + s2 + 1, d0 - s0 - s2 - 1)
Definition at line 552 of file AffineMap.cpp.
References mlir::AffineExpr::compose(), get(), mlir::getAffineDimExpr(), mlir::getAffineSymbolExpr(), getContext(), getNumDims(), getNumResults(), getNumSymbols(), getResults(), and replaceDimsAndSymbols().
Referenced by mlir::linalg::computePaddedShape(), mlir::expandDimsToRank(), mlir::sparse_tensor::foreachInSparseConstant(), mlir::linalg::fuseElementwiseOps(), getIndexingMapOfProducerOperandsInCoordinatesOfFusedOp(), mlir::vector::inferTransferOpMaskType(), insertParallelDim(), mlir::linalg::interchangeGenericOp(), mlir::affine::normalizeAffineFor(), scaleReductionDim(), translateMap(), transposeOneLinalgOperandAndReplace(), and verifyOutputShape().
SmallVector< int64_t, 4 > AffineMap::compose | ( | ArrayRef< int64_t > | values | ) | const |
Applies composition by the dims of this
to the integer values
and returns the resulting values.
this
must be symbol-less.
Definition at line 576 of file AffineMap.cpp.
References mlir::getAffineConstantExpr(), getContext(), getNumResults(), getNumSymbols(), and getResults().
LogicalResult AffineMap::constantFold | ( | ArrayRef< Attribute > | operandConstants, |
SmallVectorImpl< Attribute > & | results, | ||
bool * | hasPoison = nullptr |
||
) | const |
Folds the results of the application of an affine map on the provided operands to a constant if possible.
Returns false if the folding happens, true otherwise.
Definition at line 430 of file AffineMap.cpp.
References mlir::get(), getContext(), and partialConstantFold().
Referenced by foldLoopBounds().
|
inline |
Returns a new AffineMap with the same number of dims and symbols and one less result at pos
, dropped.
Definition at line 293 of file AffineMap.h.
References dropResults().
Referenced by mlir::linalg::splitReductionByScaling().
Definition at line 299 of file AffineMap.h.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResults().
Referenced by dropResult(), and mlir::expandDimsToRank().
AffineMap AffineMap::dropResults | ( | const llvm::SmallBitVector & | positions | ) | const |
Definition at line 543 of file AffineMap.cpp.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResults().
AffineMap AffineMap::dropZeroResults | ( | ) |
Returns the AffineMap resulting from removing "zero" results (constant values == 0) from this map.
Example:
(d0, d1) -> (d0, d1, 0)
returns (d0, d1) -> (d0, d1)
(d0, d1, d2) -> (d0, d1)
returns (d0, d1, d2) -> (d0, d1)
(d0, d1, d2) -> (d0, 0, d1, 0, d2)
returns (d0, d1, d2) -> (d0, d1, d2)
Definition at line 600 of file AffineMap.cpp.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResults().
void AffineMap::dump | ( | ) | const |
Definition at line 3991 of file AsmPrinter.cpp.
|
static |
Returns a zero result affine map with no dimensions or symbols: () -> ().
Definition at line 1221 of file MLIRContext.cpp.
References mlir::OperationName::getImpl().
Referenced by mlir::ValueBoundsConstraintSet::addBound(), addConstToResults(), mlir::scf::addLoopRangeConstraints(), adjustMap(), mlir::ValueBoundsConstraintSet::areOverlappingSlices(), augmentMapAndBounds(), broadcastDynamicDimension(), mlir::tensor::bubbleUpPadSlice(), calculateImplicitMap(), canonicalizeMapExprAndTermOrder(), mlir::vector::castAwayContractionLeadingOneDim(), mlir::affine::coalesceLoops(), compose(), composeMultiResultAffineMap(), composeSetAndOperands(), compressUnusedListImpl(), mlir::ValueBoundsConstraintSet::computeBound(), mlir::ValueBoundsConstraintSet::computeConstantDelta(), computeIteratorTypesAndIndexingMaps(), mlir::linalg::computePaddedShape(), mlir::concatAffineMaps(), constructTiledIndexSetHyperRect(), mlir::affine::createAffineComputationSlice(), createNewDynamicSizes(), createPrivateMemRef(), createSubApply(), mlir::affine::decompose(), mlir::affine::AffineValueMap::difference(), doubleBuffer(), dropResults(), dropUnitExtentFromOperandMetadata(), dropZeroResults(), emitElementwiseComputation(), mlir::linalg::extractOrIdentityMap(), forEachIJPairInAllBuffers(), mlir::affine::fullyComposeAndComputeConstantDelta(), generateCopy(), generatePointWiseCopy(), genReplaceDimToLvlMap(), mlir::MutableAffineMap::getAffineMap(), getBoundedTileSize(), getBroadcastingMap(), getCleanupLoopLowerBound(), mlir::tensor::getCollapsedExtractSliceInfo(), getCollapsedOpIndexingMap(), getCollapsedOutputDimFromInputShape(), mlir::Builder::getConstantAffineMap(), mlir::affine::MemRefRegion::getConstantBoundingSizeAndShape(), mlir::FlatLinearConstraints::getConstantBoundOnDimSize(), getConstantMap(), mlir::Builder::getDimIdentityMap(), mlir::sparse_tensor::ir_detail::DimLvlMap::getDimToLvlMap(), mlir::Builder::getEmptyAffineMap(), getIndexingMapInExpandedOp(), getIndicesForAccess(), mlir::affine::FlatAffineValueConstraints::getIneqAsAffineValueMap(), mlir::nvgpu::getLaneIdAndValueIdToOperandCoord(), mlir::nvgpu::getLaneIdToLdMatrixMatrixCoord(), mlir::memref::getLinearizedMemRefOffsetAndSize(), mlir::FlatLinearConstraints::getLowerAndUpperBound(), mlir::sparse_tensor::ir_detail::DimLvlMap::getLvlToDimMap(), getMinorIdentityMap(), getMultiDimIdentityMap(), mlir::Builder::getMultiDimIdentityMap(), getMultiDimMapWithTargets(), getRegisterIndexToTileOffsetMap(), mlir::Builder::getShiftedAffineMap(), mlir::Builder::getSingleDimShiftAffineMap(), mlir::FlatLinearConstraints::getSliceBounds(), getSliceMap(), getSubMap(), mlir::Builder::getSymbolIdentityMap(), mlir::getSymbolLessAffineMaps(), mlir::vector::getTransferMinorIdentityMap(), mlir::affine::getTripCountMapAndOperands(), inferFromExprList(), insertResult(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::sparse_tensor::inverseBlockSparsity(), mlir::inversePermutation(), mlir::isBatchMatvec(), mlir::isBatchVecmat(), mlir::isColumnMajorMatmul(), mlir::isMatvec(), mlir::isRowMajorBatchMatmul(), mlir::isRowMajorMatmul(), isTransposeMatrixLoadMap(), mlir::isVecmat(), mlir::affine::loopUnrollJamByFactor(), mlir::linalg::lowerPack(), makeCanonicalAffineApplies(), makePermutationMap(), mlir::makeStridedLinearLayoutMap(), mlir::affine::mapLoopToProcessorIds(), DeduplicateAffineMinMaxExpressions< T >::matchAndRewrite(), MergeAffineMinMaxOp< T >::matchAndRewrite(), mlirAffineMapEmptyGet(), mlirAffineMapGet(), mlirAffineMapZeroResultGet(), mlir::affine::normalizeAffineFor(), mlir::affine::normalizeAffineParallel(), mlir::affine::normalizeMemRef(), parseAffineMapWithMinMax(), partialConstantFold(), peelForLoop(), processParallelLoop(), projectCommonImpl(), mlir::removeDuplicateExprs(), mlir::affine::reorderOperandsByHoistability(), replace(), mlir::affine::replaceAllMemRefUsesWith(), replaceDimsAndSymbols(), mlir::affine::resolveIndicesIntoOpWithOffsetsAndStrides(), mlir::linalg::rewriteInIm2Col(), setInterTileBoundsParametric(), setIntraTileBoundsParametric(), shiftDims(), shiftSymbols(), mlir::simplifyAffineMap(), simplifyAffineMinMaxOp(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), sliceTransferIndices(), mlir::linalg::splitReduction(), mlir::linalg::splitReductionByScaling(), transferReadSupportsMMAMatrixType(), mlir::ValueBoundsConstraintSet::Variable::Variable(), and verifyOutputShape().
|
static |
Returns an affine map with dimCount
dimensions and symbolCount
mapping to a single output dimension.
Definition at line 1230 of file MLIRContext.cpp.
References mlir::AffineExpr::getContext(), mlir::OperationName::getImpl(), and willBeValidAffineMap().
|
static |
Returns an affine map with dimCount
dimensions and symbolCount
mapping to the given results.
Definition at line 1236 of file MLIRContext.cpp.
References mlir::OperationName::getImpl(), and willBeValidAffineMap().
|
static |
Returns a zero result affine map with dimCount
dimensions and symbolCount
symbols, e.g.
: (...) -> ()
.
Definition at line 1225 of file MLIRContext.cpp.
References mlir::OperationName::getImpl().
|
inline |
Methods supporting C API.
Definition at line 410 of file AffineMap.h.
SmallVector< unsigned > AffineMap::getBroadcastDims | ( | ) | const |
Returns the list of broadcast dimensions (i.e.
dims indicated by value 0 in the result). Ex:
Definition at line 157 of file AffineMap.cpp.
References mlir::detail::enumerate(), and getResults().
Referenced by foldTransferInBoundsAttribute().
|
static |
Returns a single constant result affine map.
Definition at line 124 of file AffineMap.cpp.
References get(), and mlir::getAffineConstantExpr().
Referenced by mlir::affine::getTripCountMapAndOperands(), and mlirAffineMapConstantGet().
SmallVector< int64_t > AffineMap::getConstantResults | ( | ) | const |
Returns the constant results of this map.
This method asserts that the map has all constant results.
Definition at line 382 of file AffineMap.cpp.
References getResults(), and isConstant().
MLIRContext * AffineMap::getContext | ( | ) | const |
Definition at line 339 of file AffineMap.cpp.
References mlir::detail::AffineMapStorage::context.
Referenced by addConstToResults(), mlir::alignAffineMapWithValues(), canonicalizeMapExprAndTermOrder(), compose(), composeAffineMapAndOperands(), composeMultiResultAffineMap(), constantFold(), dropResults(), dropZeroResults(), mlir::expandDimsToRank(), genReplaceDimToLvlMap(), getCollapsedOpIndexingMap(), mlir::ValueBoundsConstraintSet::Variable::getContext(), getSliceMap(), getStridesAndOffset(), getSubMap(), mlir::vector::inferTransferOpMaskType(), insertResult(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::inversePermutation(), isMinorIdentity(), isNormalizedMemRefDynamicDim(), isTransposeMatrixLoadMap(), packLinalgMetadataOnce(), partialConstantFold(), projectCommonImpl(), mlir::removeDuplicateExprs(), replace(), replaceDimOrSym(), replaceDimsAndSymbols(), mlir::MutableAffineMap::reset(), shiftDims(), shiftSymbols(), mlir::simplifyAffineMap(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), and mlir::ValueBoundsConstraintSet::Variable::Variable().
unsigned AffineMap::getDimPosition | ( | unsigned | idx | ) | const |
Extracts the position of the dimensional expression at the given result, when the caller knows it is safe to do so.
Definition at line 411 of file AffineMap.cpp.
References getResult().
Referenced by adjustMap(), getDimPosition(), getReductionIndex(), getResultIndex(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::linalg::splitReduction(), mlir::sparse_tensor::toDim(), mlir::sparse_tensor::toLvl(), and transposePackedMatmul().
|
static |
Returns an identity affine map with numDims
input dimensions and filtered results using keepDimFilter
.
If keepDimFilter
returns true for a dimension, the dimension is kept in the affine map results. Otherwise, the dimension is dropped from the results.
Examples:
Definition at line 138 of file AffineMap.cpp.
References mlir::detail::enumerate(), and getMultiDimIdentityMap().
|
inlinestatic |
Definition at line 413 of file AffineMap.h.
References AffineMap().
uint64_t AffineMap::getLargestKnownDivisorOfMapExprs | ( | ) |
Get the largest known divisor of all map expressions.
For eg: for (d0, d1) -> (8*d0 + 4, 4*d1 + 2), the result is 2. In the case of maps with no expressions or all zero constant expressions, the largest known divisor is trivially the max uint64_t value.
Definition at line 319 of file AffineMap.cpp.
References getResults(), and max().
AffineMap AffineMap::getMajorSubMap | ( | unsigned | numResults | ) | const |
Returns the map consisting of the most major numResults
results.
Returns the null AffineMap if numResults
== 0. Returns *this
if numResults
>= this->getNumResults()
.
Definition at line 660 of file AffineMap.cpp.
References AffineMap(), getNumResults(), and getSliceMap().
|
static |
Returns an identity affine map (d0, ..., dn) -> (dp, ..., dn) on the most minor dimensions.
Definition at line 131 of file AffineMap.cpp.
References get(), getMultiDimIdentityMap(), and getResults().
Referenced by mlir::vector::getTransferMinorIdentityMap(), isMinorIdentity(), and mlirAffineMapMinorIdentityGet().
AffineMap AffineMap::getMinorSubMap | ( | unsigned | numResults | ) | const |
Returns the map consisting of the most minor numResults
results.
Returns the null AffineMap if numResults
== 0. Returns *this
if numResults
>= this->getNumResults()
.
Definition at line 668 of file AffineMap.cpp.
References AffineMap(), getNumResults(), and getSliceMap().
|
static |
Returns an AffineMap with 'numDims' identity result dim exprs.
Definition at line 330 of file AffineMap.cpp.
References get(), and mlir::getAffineDimExpr().
Referenced by mlir::tensor::bubbleUpPadSlice(), buildMax(), buildMin(), computeIteratorTypesAndIndexingMaps(), mlir::expandDimsToRank(), mlir::linalg::extractOrIdentityMap(), mlir::sparse_tensor::SparseTensorType::getExpandedDimToLvl(), getFatRawBufferTypeLike(), getFilteredIdentityMap(), mlir::shard::ElementwiseShardingInterface< ElemwiseOp >::getIndexingMaps(), getMinorIdentityMap(), getTileOffsetAndSizes(), insertParallelDim(), isAccessIndexInvariant(), mlir::linalg::makeMemRefCopyOp(), mlir::affine::AffineBuilder::max(), mlir::affine::AffineBuilder::min(), mlirAffineMapMultiDimIdentityGet(), mlir::affine::normalizeMemRefType(), mlir::linalg::rewriteInIm2Col(), scaleReductionDim(), and tileLinalgOpImpl().
|
static |
Returns an affine map with numDims
input dimensions and results specified by targets
.
Examples:
Definition at line 276 of file AffineMap.cpp.
References get(), and mlir::getAffineDimExpr().
Referenced by getPermutationMap().
unsigned AffineMap::getNumDims | ( | ) | const |
Definition at line 390 of file AffineMap.cpp.
References mlir::detail::AffineMapStorage::numDims.
Referenced by mlir::FlatLinearConstraints::addBound(), addConstToResults(), adjustMap(), mlir::alignAffineMapWithValues(), augmentMapAndBounds(), buildArithValue(), canonicalizeMapExprAndTermOrder(), collectInadmissInfo(), compose(), composeAffineMapAndOperands(), mlir::FlatLinearConstraints::composeMatchingMap(), composeMultiResultAffineMap(), composeSetAndOperands(), compressUnusedListImpl(), mlir::affine::MemRefRegion::compute(), mlir::linalg::computePaddedShape(), constructTiledIndexSetHyperRect(), createSubApply(), mlir::affine::decompose(), mlir::shard::detail::defaultGetShardingOption(), dropResults(), dropZeroResults(), mlir::affine::expandAffineMap(), findPermutationsIndexingOperand(), mlir::foldAttributesIntoMap(), genReplaceDimToLvlMap(), getCleanupLoopLowerBound(), getConstDifference(), mlir::getFlattenedAffineExprs(), getIndicesForAccess(), mlir::getMultiAffineFunctionFromMap(), mlir::affine::AffineValueMap::getNumDims(), mlir::affine::getRelationFromMap(), getSharding(), mlir::Builder::getShiftedAffineMap(), getSliceMap(), getStridesAndOffset(), getSubMap(), getXferIndices(), inferIteratorsFromOutMap(), mlir::ValueBoundsConstraintSet::insert(), insertParallelDim(), insertResult(), mlir::inversePermutation(), isEmpty(), isIdentity(), isMinorIdentity(), isMinorIdentityWithBroadcasting(), isPermutation(), isTransposeMatrixLoadMap(), makeCanonicalAffineApplies(), DeduplicateAffineMinMaxExpressions< T >::matchAndRewrite(), MergeAffineMinMaxOp< T >::matchAndRewrite(), mlir::affine::materializeComputedBound(), mlir::affine::normalizeAffineFor(), mlir::affine::normalizeAffineParallel(), mlir::affine::normalizeMemRef(), packLinalgMetadataOnce(), parseBound(), partialConstantFold(), mlir::AsmPrinter::Impl::printAffineMap(), printBound(), printMinMaxBound(), projectCommonImpl(), mlir::arith::reifyValueBound(), remainsLegalAfterInline(), mlir::removeDuplicateExprs(), mlir::affine::reorderOperandsByHoistability(), replaceAffineMinBoundingBoxExpression(), mlir::affine::replaceAllMemRefUsesWith(), replaceDimOrSym(), mlir::MutableAffineMap::reset(), scaleReductionDim(), setInterTileBoundsParametric(), setIntraTileBoundsParametric(), shiftDims(), shiftSymbols(), mlir::simplifyAffineMap(), simplifyAffineMinMaxOp(), mlir::affine::simplifyConstrainedMinMaxOp(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), mlir::linalg::splitReduction(), transferReadSupportsMMAMatrixType(), translateMap(), transposePackedMatmul(), mlir::ValueBoundsConstraintSet::Variable::Variable(), mlir::detail::verifyAffineMapAsLayout(), verifyMemoryOpIndexing(), and mlir::linalg::detail::verifyStructuredOpInterface().
unsigned AffineMap::getNumInputs | ( | ) | const |
Definition at line 399 of file AffineMap.cpp.
References mlir::detail::AffineMapStorage::numDims, and mlir::detail::AffineMapStorage::numSymbols.
Referenced by mlir::FlatLinearConstraints::addBound(), mlir::affine::FlatAffineValueConstraints::addDomainFromSliceMaps(), mlir::affine::FlatAffineValueConstraints::addSliceBounds(), mlir::alignAffineMapWithValues(), mlir::applyPermutationMap(), mlir::FlatLinearConstraints::composeMatchingMap(), mlir::FlatLinearValueConstraints::computeAlignedMap(), createNewDynamicSizes(), generatePointWiseCopy(), generateShiftedLoop(), mlir::affine::AffineDmaStartOp::getDstIndices(), mlir::affine::AffineDmaStartOp::getDstMemRefOperandIndex(), mlir::affine::MemRefRegion::getLowerAndUpperBound(), mlir::getMultiAffineFunctionFromMap(), mlir::vector::ScalableValueBoundsConstraintSet::ConstantOrScalableBound::getSize(), mlir::affine::AffineDmaStartOp::getSrcIndices(), mlir::affine::AffineDmaStartOp::getTagIndices(), mlir::affine::AffineDmaWaitOp::getTagIndices(), mlir::affine::AffineDmaStartOp::getTagMemRefOperandIndex(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::inversePermutation(), mlir::isBatchMatvec(), mlir::isBatchVecmat(), mlir::isColumnMajorMatmul(), mlir::isMatvec(), isPermutationOfMinorIdentityWithBroadcasting(), isProjectedPermutation(), mlir::isRowMajorBatchMatmul(), mlir::isRowMajorMatmul(), mlir::affine::AffineDmaStartOp::isStrided(), mlir::isVecmat(), makeCanonicalAffineApplies(), partialConstantFold(), mlir::affine::replaceAllMemRefUsesWith(), simplifyMapWithOperands(), verifyMemoryOpIndexing(), verifyOutputShape(), verifyPermutationMap(), and verifyTransferOp().
size_t AffineMap::getNumOfZeroResults | ( | ) | const |
Returns the number of "zero" results (constant values == 0) in this map.
Example:
(d0, d1) -> (d0, d1, 0)
returns 1(d0, d1, d2) -> (d0, d1)
returns 0(d0, d1, d2) -> (d0, 0, d1, 0, d2)
returns 2 Definition at line 589 of file AffineMap.cpp.
References getResults().
unsigned AffineMap::getNumResults | ( | ) | const |
Definition at line 398 of file AffineMap.cpp.
References getResults().
Referenced by mlir::FlatLinearConstraints::addBound(), mlir::affine::FlatAffineValueConstraints::addDomainFromSliceMaps(), mlir::affine::FlatAffineValueConstraints::addSliceBounds(), adjustMap(), mlir::applyPermutationMap(), mlir::linalg::areElementwiseOpsFusable(), buildArithValue(), mlir::affine::buildSliceTripCountMap(), calculateExpandedAccessIndices(), canonicalizeMapExprAndTermOrder(), collectInadmissInfo(), compose(), composeAffineMapAndOperands(), mlir::FlatLinearConstraints::composeMatchingMap(), composeMultiResultAffineMap(), mlir::linalg::computePaddedShape(), constructTiledIndexSetHyperRect(), createInlinedCompareImplementation(), foldLoopBounds(), forEachIJPairInAllBuffers(), forEachIJPairInXs(), mlir::sparse_tensor::foreachInSparseConstant(), generateCopy(), genReplaceDimToLvlMap(), getCleanupLoopLowerBound(), getCollapsedOpOperand(), getConstDifference(), getDimPosition(), getFirstResultIndexFunctionOf(), mlir::getFlattenedAffineExprs(), getIndicesForAccess(), mlir::affine::getLargestDivisorOfTripCount(), getMajorSubMap(), getMinorSubMap(), mlir::getMultiAffineFunctionFromMap(), mlir::affine::AffineValueMap::getNumResults(), getOperandReassociation(), getReductionIndex(), mlir::affine::getRelationFromMap(), getResultIndex(), getResultPosition(), mlir::Builder::getShiftedAffineMap(), mlir::vector::ScalableValueBoundsConstraintSet::ConstantOrScalableBound::getSize(), mlir::FlatLinearConstraints::getSliceBounds(), getStridesAndOffset(), mlir::ValueBoundsConstraintSet::insert(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::sparse_tensor::inverseBlockSparsity(), mlir::inversePermutation(), mlir::isBatchMatvec(), mlir::isBatchVecmat(), isBroadcasted(), mlir::isColumnMajorMatmul(), mlir::linalg::isDimSequencePreserved(), isEmpty(), isFusableWithReshapeByDimExpansion(), isIdentity(), mlir::isMatvec(), isMinorIdentity(), isMinorIdentityWithBroadcasting(), isPermutation(), isPermutationOfMinorIdentityWithBroadcasting(), isProjectedPermutation(), mlir::isRowMajorBatchMatmul(), mlir::isRowMajorMatmul(), isSingleConstant(), isSymbolIdentity(), isTiled(), isTransposed(), mlir::isVecmat(), makeCanonicalAffineApplies(), mlir::affine::makeComposedFoldedAffineApply(), mlir::affine::makeComposedFoldedMultiResultAffineApply(), mlir::linalg::makeTiledLoopRanges(), DeduplicateAffineMinMaxExpressions< T >::matchAndRewrite(), mlir::affine::normalizeMemRefType(), packLinalgMetadataOnce(), parseBound(), partialConstantFold(), printBound(), projectCommonImpl(), replace(), replaceAffineMinBoundingBoxExpression(), mlir::affine::replaceAllMemRefUsesWith(), replaceDimOrSym(), replaceDimsAndSymbols(), setInterTileBoundsParametric(), setIntraTileBoundsParametric(), simplifyAffineMinMaxOp(), mlir::affine::simplifyConstrainedMinMaxOp(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), mlir::linalg::splitReduction(), transposePackedMatmul(), mlir::ValueBoundsConstraintSet::Variable::Variable(), verifyInputMaps(), verifyMemoryOpIndexing(), verifyOutputMap(), and verifyTransferOp().
unsigned AffineMap::getNumSymbols | ( | ) | const |
Definition at line 394 of file AffineMap.cpp.
References mlir::detail::AffineMapStorage::numSymbols.
Referenced by mlir::FlatLinearConstraints::addBound(), addConstToResults(), mlir::alignAffineMapWithValues(), augmentMapAndBounds(), canonicalizeMapExprAndTermOrder(), compose(), mlir::FlatLinearConstraints::composeMatchingMap(), composeSetAndOperands(), compressUnusedListImpl(), mlir::affine::MemRefRegion::compute(), constructTiledIndexSetHyperRect(), createNewDynamicSizes(), createSubApply(), mlir::affine::decompose(), dropResults(), dropUnitExtentFromOperandMetadata(), dropZeroResults(), mlir::foldAttributesIntoMap(), getCleanupLoopLowerBound(), getConstDifference(), mlir::getFlattenedAffineExprs(), getIndexingMapInExpandedOp(), getIndicesForAccess(), mlir::getMultiAffineFunctionFromMap(), mlir::affine::AffineValueMap::getNumSymbols(), mlir::Builder::getShiftedAffineMap(), getSliceMap(), getStridesAndOffset(), getSubMap(), mlir::sparse_tensor::inferLvlToDim(), insertResult(), mlir::inversePermutation(), isEmpty(), isProjectedPermutation(), isSymbolIdentity(), makeCanonicalAffineApplies(), DeduplicateAffineMinMaxExpressions< T >::matchAndRewrite(), MergeAffineMinMaxOp< T >::matchAndRewrite(), mlir::affine::normalizeAffineFor(), mlir::affine::normalizeAffineParallel(), mlir::affine::normalizeMemRef(), mlir::affine::normalizeMemRefType(), parseBound(), partialConstantFold(), mlir::AsmPrinter::Impl::printAffineMap(), printBound(), projectCommonImpl(), remainsLegalAfterInline(), mlir::removeDuplicateExprs(), replaceAffineMinBoundingBoxExpression(), mlir::affine::replaceAllMemRefUsesWith(), replaceDimOrSym(), mlir::MutableAffineMap::reset(), setInterTileBoundsParametric(), setIntraTileBoundsParametric(), shiftDims(), shiftSymbols(), mlir::simplifyAffineMap(), simplifyAffineMinMaxOp(), mlir::affine::simplifyConstrainedMinMaxOp(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), mlir::ValueBoundsConstraintSet::Variable::Variable(), and verifyTransferOp().
|
static |
Definition at line 269 of file AffineMap.cpp.
References getPermutationMap().
|
static |
Returns an AffineMap representing a permutation.
The permutation is expressed as a non-empty vector of integers. E.g. the permutation (i,j,k) -> (j,k,i)
will be expressed with permutation = [1,2,0]
. All values in permutation
must be integers, in the range 0..permutation.size()-1
without duplications (i.e. [1,1,2]
is an invalid permutation).
Definition at line 260 of file AffineMap.cpp.
References getMultiDimMapWithTargets().
Referenced by convertTransferReadOp(), foldTransferInBoundsAttribute(), getPermutationMap(), mlir::linalg::interchangeGenericOp(), interchangeGenericOpPrecondition(), isTransposed(), mlirAffineMapPermutationGet(), tileLinalgOpImpl(), transferReadSupportsMMAMatrixType(), and transposeOneLinalgOperandAndReplace().
AffineExpr AffineMap::getResult | ( | unsigned | idx | ) | const |
Definition at line 407 of file AffineMap.cpp.
References getResults().
Referenced by mlir::affine::FlatAffineValueConstraints::addDomainFromSliceMaps(), mlir::affine::FlatAffineValueConstraints::addSliceBounds(), buildArithValue(), canonicalizeMapExprAndTermOrder(), collectInadmissInfo(), composeMultiResultAffineMap(), mlir::linalg::computePaddedShape(), convertTransferReadOp(), mlir::affine::decompose(), foldTransferInBoundsAttribute(), forEachIJPairInXs(), genReplaceDimToLvlMap(), getCleanupLoopLowerBound(), getConstDifference(), getDimPosition(), getFirstResultIndexFunctionOf(), mlir::nvgpu::getLaneIdAndValueIdToOperandCoord(), getOperandReassociation(), mlir::affine::AffineValueMap::getResult(), getResultIndex(), getResultPosition(), getSingleConstantResult(), mlir::vector::ScalableValueBoundsConstraintSet::ConstantOrScalableBound::getSize(), getStridesAndOffset(), getSubMap(), getXferIndices(), mlir::ValueBoundsConstraintSet::insert(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::sparse_tensor::inverseBlockSparsity(), mlir::isBatchMatvec(), mlir::isBatchVecmat(), mlir::isColumnMajorMatmul(), mlir::linalg::isDimSequencePreserved(), mlir::affine::AffineValueMap::isFunctionOf(), mlir::isMatvec(), mlir::isRowMajorBatchMatmul(), mlir::isRowMajorMatmul(), isSingleConstant(), isTiled(), isTransposed(), mlir::isVecmat(), mlir::affine::materializeComputedBound(), mlir::affine::normalizeAffineParallel(), mlir::affine::normalizeMemRef(), packLinalgMetadataOnce(), peelForLoop(), printBound(), printMinMaxBound(), mlir::arith::reifyValueBound(), mlir::affine::reorderOperandsByHoistability(), replaceDimOrSym(), and verifyInputMaps().
std::optional< unsigned > AffineMap::getResultPosition | ( | AffineExpr | input | ) | const |
Extracts the first result position where input
dimension resides.
Returns std::nullopt
if input
is not a dimension expression or cannot be found in results.
Definition at line 415 of file AffineMap.cpp.
References getNumResults(), and getResult().
ArrayRef< AffineExpr > AffineMap::getResults | ( | ) | const |
Definition at line 403 of file AffineMap.cpp.
References mlir::detail::AffineMapStorage::results().
Referenced by addConstToResults(), mlir::applyPermutationMap(), areResultExprsSubsetOf(), augmentMapAndBounds(), canonicalizeMapExprAndTermOrder(), mlir::affine::coalesceLoops(), mlir::AffineExpr::compose(), compose(), composeSetAndOperands(), compressUnusedListImpl(), mlir::linalg::computePaddedShape(), constructTiledIndexSetHyperRect(), createNewDynamicSizes(), mlir::shard::detail::defaultGetShardingOption(), dropResults(), mlir::linalg::dropUnitDims(), dropUnitExtentFromOperandMetadata(), dropZeroResults(), mlir::affine::expandAffineMap(), findPermutationsIndexingOperand(), forEachIJPairInAllBuffers(), fuse(), genReplaceDimToLvlMap(), mlir::sparse_tensor::getBlockSize(), getBroadcastDims(), getCollapsedOpIndexingMap(), getCollapsedOutputDimFromInputShape(), getConstantResults(), mlir::affine::getConstantTripCount(), getDomainReassociation(), getExpandedShapeAndType(), mlir::getFlattenedAffineExprs(), getIndexingMapInExpandedOp(), getIndicesForAccess(), mlir::affine::getLargestDivisorOfTripCount(), getLargestKnownDivisorOfMapExprs(), getMangledSortHelperFuncName(), getMinorIdentityMap(), getNumNonTrivialIdxExpOnSparseLvls(), getNumOfZeroResults(), getNumResults(), getPreservedDims(), getReassociationForExpansion(), getResult(), getShapeDefiningLoopRange(), getSharding(), mlir::Builder::getShiftedAffineMap(), getSliceMap(), getTileSizePos(), hasAtMostOneResultFunctionOfDim(), inferIteratorsFromOutMap(), insertResult(), mlir::inversePermutation(), mlir::sparse_tensor::isBlockSparsity(), isConstant(), mlir::linalg::isDimSequencePreserved(), isFunctionOfDim(), isFunctionOfSymbol(), isIdentity(), isMinorIdentityWithBroadcasting(), isNormalizedMemRefDynamicDim(), isPermutationOfMinorIdentityWithBroadcasting(), isProjectedPermutation(), isSymbolIdentity(), makeCanonicalAffineApplies(), DeduplicateAffineMinMaxExpressions< T >::matchAndRewrite(), MergeAffineMinMaxOp< T >::matchAndRewrite(), mlir::affine::normalizeAffineParallel(), mlir::affine::AffineValueMap::operator==(), partialConstantFold(), permuteValues(), mlir::AsmPrinter::Impl::printAffineMap(), projectCommonImpl(), mlir::removeDuplicateExprs(), replace(), replaceAffineMinBoundingBoxExpression(), mlir::affine::replaceAllMemRefUsesWith(), replaceDimsAndSymbols(), mlir::MutableAffineMap::reset(), setInterTileBoundsParametric(), setIntraTileBoundsParametric(), shiftDims(), shiftSymbols(), mlir::simplifyAffineMap(), simplifyMapWithOperands(), simplifyMinOrMaxExprWithOperands(), sliceTransferIndices(), verifyOutputShape(), verifyPermutationMap(), and walkExprs().
int64_t AffineMap::getSingleConstantResult | ( | ) | const |
Returns the constant result of this map.
This methods asserts that the map has a single constant result.
Definition at line 377 of file AffineMap.cpp.
References getResult(), and isSingleConstant().
Referenced by mlir::affine::FlatAffineValueConstraints::addAffineParallelOpDomain(), mlir::vector::ScalableValueBoundsConstraintSet::ConstantOrScalableBound::getSize(), mlir::affine::materializeComputedBound(), and mlir::arith::reifyValueBound().
AffineMap AffineMap::getSliceMap | ( | unsigned | start, |
unsigned | length | ||
) | const |
Returns the map consisting of length
expressions starting from start
.
Definition at line 655 of file AffineMap.cpp.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResults().
Referenced by getMajorSubMap(), getMinorSubMap(), printMinMaxBound(), and replaceAffineMinBoundingBoxExpression().
Returns the map consisting of the resultPos
subset.
Definition at line 647 of file AffineMap.cpp.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResult().
Referenced by calculateExpandedAccessIndices(), composeMultiResultAffineMap(), mlir::linalg::computePaddedShape(), mlir::linalg::computeSliceParameters(), generateFusedElementwiseOpRegion(), mlir::linalg::interchangeGenericOp(), and mlir::affine::simplifyConstrainedMinMaxOp().
|
static |
Returns a vector of AffineMaps; each with as many results as exprs.size()
, as many dims as the largest dim in exprs
and as many symbols as the largest symbol in exprs
.
Definition at line 308 of file AffineMap.cpp.
References inferFromExprList().
Referenced by mlir::linalg::computeSliceParameters(), contractSupportsMMAMatrixType(), createSubViewIntersection(), mlir::linalg::getIm2ColInputExpressions(), mlir::StructuredGenerator< StructuredOpInterface, IteratorTypeT >::layout(), mlir::makeCanonicalStridedLayoutExpr(), mlir::affine::makeComposedAffineApply(), mlir::affine::makeComposedFoldedAffineApply(), replace(), mlir::linalg::rewriteInIm2Col(), and mlir::linalg::splitOp().
|
static |
Definition at line 314 of file AffineMap.cpp.
References inferFromExprList().
|
inline |
Returns a new AffineMap with the same number of dims and symbols and an extra result inserted at pos
.
Definition at line 315 of file AffineMap.h.
References get(), getContext(), getNumDims(), getNumSymbols(), and getResults().
Referenced by insertParallelDim(), and packLinalgMetadataOnce().
bool AffineMap::isConstant | ( | ) | const |
Returns true if this affine map has only constant results.
Definition at line 373 of file AffineMap.cpp.
References getResults().
Referenced by mlir::affine::FlatAffineValueConstraints::addAffineParallelOpDomain(), and getConstantResults().
bool AffineMap::isEmpty | ( | ) | const |
Returns true if this affine map is an empty map, i.e., () -> ().
Definition at line 365 of file AffineMap.cpp.
References getNumDims(), getNumResults(), and getNumSymbols().
Referenced by mlir::linalg::interchangeGenericOp(), mlir::inversePermutation(), and makeCanonicalAffineApplies().
|
inline |
Return true if any affine expression involves AffineDimExpr position
.
Definition at line 221 of file AffineMap.h.
References getResults(), and mlir::AffineExpr::isFunctionOfDim().
Referenced by composeAffineMapAndOperands().
|
inline |
Return true if any affine expression involves AffineSymbolExpr position
.
Definition at line 228 of file AffineMap.h.
References getResults(), and mlir::AffineExpr::isFunctionOfSymbol().
Referenced by composeAffineMapAndOperands().
bool AffineMap::isIdentity | ( | ) | const |
Returns true if this affine map is an identity affine map.
An identity affine map corresponds to an identity affine function on the dimensional identifiers.
Definition at line 341 of file AffineMap.cpp.
References getNumDims(), getNumResults(), and getResults().
Referenced by getStridesAndOffset(), and mlir::affine::normalizeMemRef().
bool AffineMap::isMinorIdentity | ( | ) | const |
Returns true if this affine map is a minor identity, i.e.
an identity affine map (d0, ..., dn) -> (dp, ..., dn) on the most minor dimensions.
Definition at line 151 of file AffineMap.cpp.
References getContext(), getMinorIdentityMap(), getNumDims(), and getNumResults().
Referenced by transferReadSupportsMMAMatrixType().
bool AffineMap::isMinorIdentityWithBroadcasting | ( | SmallVectorImpl< unsigned > * | broadcastedDims = nullptr | ) | const |
Returns true if this affine map is a minor identity up to broadcasted dimensions which are indicated by value 0 in the result.
If broadcastedDims
is not null, it will be populated with the indices of the broadcasted dimensions in the result array. Example: affine_map<(d0, d1, d2, d3, d4) -> (0, d2, 0, d4)> (broadcastedDims
will contain [0, 2])
Definition at line 172 of file AffineMap.cpp.
References mlir::detail::enumerate(), getNumDims(), getNumResults(), and getResults().
bool AffineMap::isPermutation | ( | ) | const |
Returns true if the AffineMap represents a symbol-less permutation map.
Definition at line 641 of file AffineMap.cpp.
References getNumDims(), getNumResults(), and isProjectedPermutation().
Referenced by mlir::linalg::areElementwiseOpsFusable(), forEachIJPairInAllBuffers(), mlir::sparse_tensor::inferLvlToDim(), permuteValues(), and reductionPreconditions().
bool AffineMap::isPermutationOfMinorIdentityWithBroadcasting | ( | SmallVectorImpl< unsigned > & | permutedDims | ) | const |
Return true if this affine map can be converted to a minor identity with broadcast by doing a permute.
Return a permutation (there may be several) to apply to get to a minor identity with broadcasts. Ex:
Definition at line 212 of file AffineMap.cpp.
References mlir::detail::enumerate(), getNumInputs(), getNumResults(), getResults(), and max().
bool AffineMap::isProjectedPermutation | ( | bool | allowZeroInResults = false | ) | const |
Returns true if the AffineMap represents a subset (i.e.
a projection) of a symbol-less permutation map. allowZeroInResults
allows projected permutation maps with constant zero result expressions. TODO: Remove allowZeroInResults
when constant zero result expressions are broadly supported.
Definition at line 611 of file AffineMap.cpp.
References getNumInputs(), getNumResults(), getNumSymbols(), and getResults().
Referenced by mlir::applyPermutationMap(), mlir::linalg::collapseOpIterationDims(), getCollapsedOpIndexingMap(), getDomainReassociation(), getPreservedDims(), inferIteratorsFromOutMap(), mlir::inverseAndBroadcastProjectedPermutation(), mlir::linalg::detail::isContractionInterfaceImpl(), mlir::linalg::isDimSequencePreserved(), isPermutation(), and reindexIndexingMap().
bool AffineMap::isSingleConstant | ( | ) | const |
Returns true if this affine map is a single result constant function.
Definition at line 369 of file AffineMap.cpp.
References getNumResults(), and getResult().
Referenced by getSingleConstantResult(), mlir::vector::ScalableValueBoundsConstraintSet::ConstantOrScalableBound::getSize(), mlir::affine::materializeComputedBound(), and mlir::arith::reifyValueBound().
bool AffineMap::isSymbolIdentity | ( | ) | const |
Returns true if this affine map is an identity affine map on the symbol identifiers.
Definition at line 353 of file AffineMap.cpp.
References getNumResults(), getNumSymbols(), and getResults().
|
inlineexplicit |
Definition at line 132 of file AffineMap.h.
|
inline |
Definition at line 134 of file AffineMap.h.
|
inline |
Definition at line 133 of file AffineMap.h.
AffineMap AffineMap::partialConstantFold | ( | ArrayRef< Attribute > | operandConstants, |
SmallVectorImpl< int64_t > * | results = nullptr , |
||
bool * | hasPoison = nullptr |
||
) | const |
Propagates the constant operands into this affine map.
Operands are allowed to be null, at which point they are treated as non-constant. This does not change the number of symbols and dimensions. Returns a new map, which may be equal to the old map if no folding happened. If results
is provided and if all expressions in the map were folded to constants, results
will contain the values of these constants.
Definition at line 449 of file AffineMap.cpp.
References get(), mlir::getAffineConstantExpr(), getContext(), getNumDims(), getNumInputs(), getNumResults(), getNumSymbols(), and getResults().
Referenced by constantFold().
void AffineMap::print | ( | raw_ostream & | os | ) | const |
Definition at line 4015 of file AsmPrinter.cpp.
Referenced by mlir::operator<<().
AffineMap AffineMap::replace | ( | AffineExpr | expr, |
AffineExpr | replacement, | ||
unsigned | numResultDims, | ||
unsigned | numResultSyms | ||
) | const |
Sparse replace method.
Apply AffineExpr::replace(expr
, replacement
) to each of the results and return a new AffineMap with the new results and with the specified number of dims and symbols.
Definition at line 511 of file AffineMap.cpp.
References get(), getContext(), getNumResults(), and getResults().
Referenced by replaceAffineMinBoundingBoxExpression(), replaceDimOrSym(), scaleReductionDim(), mlir::affine::simplifyConstrainedMinMaxOp(), translateMap(), and mlir::ValueBoundsConstraintSet::Variable::Variable().
AffineMap AffineMap::replace | ( | const DenseMap< AffineExpr, AffineExpr > & | map | ) | const |
Sparse replace method.
Apply AffineExpr::replace(map
) to each of the results and return a new AffineMap with the new results and with inferred number of dims and symbols.
Definition at line 535 of file AffineMap.cpp.
References getContext(), getNumResults(), getResults(), and inferFromExprList().
AffineMap AffineMap::replace | ( | const DenseMap< AffineExpr, AffineExpr > & | map, |
unsigned | numResultDims, | ||
unsigned | numResultSyms | ||
) | const |
Sparse replace method.
Apply AffineExpr::replace(map
) to each of the results and return a new AffineMap with the new results and with the specified number of dims and symbols.
Definition at line 524 of file AffineMap.cpp.
References get(), getContext(), getNumResults(), and getResults().
AffineMap AffineMap::replaceDimsAndSymbols | ( | ArrayRef< AffineExpr > | dimReplacements, |
ArrayRef< AffineExpr > | symReplacements, | ||
unsigned | numResultDims, | ||
unsigned | numResultSyms | ||
) | const |
This method substitutes any uses of dimensions and symbols (e.g.
dim#0 with dimReplacements[0]) in subexpressions and returns the modified expression mapping. Because this can be used to eliminate dims and symbols, the client needs to specify the number of dims and symbols in the result. The returned map always has the same number of results.
Definition at line 496 of file AffineMap.cpp.
References get(), getContext(), getNumResults(), getResults(), and mlir::AffineExpr::replaceDimsAndSymbols().
Referenced by mlir::alignAffineMapWithValues(), compose(), composeAffineMapAndOperands(), mlir::linalg::dropUnitDims(), mlir::foldAttributesIntoMap(), mlir::affine::reorderOperandsByHoistability(), and mlir::ValueBoundsConstraintSet::Variable::Variable().
|
inline |
Replace dims[offset ...
numDims) by dims[offset + shift ... shift + numDims).
Definition at line 267 of file AffineMap.h.
References get(), getContext(), getNumDims(), getNumSymbols(), getResults(), and mlir::AffineExpr::shiftDims().
Referenced by composeMultiResultAffineMap(), mlir::affine::AffineValueMap::difference(), insertParallelDim(), packLinalgMetadataOnce(), replaceDimOrSym(), scaleReductionDim(), and mlir::affine::simplifyConstrainedMinMaxOp().
|
inline |
Replace symbols[offset ...
numSymbols) by symbols[offset + shift ... shift + numSymbols).
Definition at line 280 of file AffineMap.h.
References get(), getContext(), getNumDims(), getNumSymbols(), getResults(), and mlir::AffineExpr::shiftSymbols().
Referenced by composeMultiResultAffineMap(), mlir::affine::AffineValueMap::difference(), and replaceDimOrSym().
void AffineMap::walkExprs | ( | llvm::function_ref< void(AffineExpr)> | callback | ) | const |
Walk all of the AffineExpr's in this mapping.
Each node in an expression tree is visited in postorder.
Definition at line 486 of file AffineMap.cpp.
References getResults(), and mlir::AffineExpr::walk().
|
friend |
Definition at line 425 of file AffineMap.h.