MLIR: lib/Dialect/SparseTensor/Transforms/Sparsification.cpp File Reference (original) (raw)
Go to the source code of this file.
Functions | |
---|---|
static bool | isInvariantAffine (AffineExpr a, LoopId curr, bool &isCurrentLoop) |
Returns true iff affine expression is invariant. More... | |
static bool | findAffine (Merger &merger, TensorId tid, Level lvl, AffineExpr a, LevelType lt, bool setLvlFormat=true) |
Helper method to inspect affine expressions. More... | |
static bool | findDepIdxSet (Merger &merger, TensorId tensor, Level lvl, AffineExpr a, LevelType lt, bool isSubExp=false, int64_t coefficient=1) |
Helper method to inspect affine expressions for index variable reduction based codegen. More... | |
static unsigned | getNumNonTrivialIdxExpOnSparseLvls (AffineMap map, Value tensor) |
Gets the total number of compound affine expressions in the getMatchingIndexingMap for the given tensor. More... | |
static unsigned | getNumNonTrivialIdxExpOnSparseLvls (linalg::GenericOp op) |
Gets the total number of sparse levels with compound affine expressions, summed over all operands of the GenericOp. More... | |
static bool | hasNonTrivialAffineOnSparseOut (linalg::GenericOp op) |
static bool | findSparseAnnotations (CodegenEnv &env, bool idxReducBased) |
Helper method to inspect sparse encodings in the tensor types. More... | |
static void | genBuffers (CodegenEnv &env, OpBuilder &builder) |
Local bufferization of all dense and sparse data structures. More... | |
static Value | genIndex (CodegenEnv &env, OpOperand *t) |
Generates index for load/store on sparse tensor. More... | |
static Value | genSubscript (CodegenEnv &env, OpBuilder &builder, OpOperand *t, SmallVectorImpl< Value > &args) |
Generates subscript for load/store on a dense or sparse tensor. More... | |
static Value | genInsertionLoad (CodegenEnv &env, OpBuilder &builder, OpOperand *t) |
Generates insertion code to implement dynamic tensor load. More... | |
static Value | genInsertionLoadReduce (CodegenEnv &env, OpBuilder &builder, OpOperand *t) |
Generates insertion code to implement dynamic tensor load for reduction. More... | |
static Value | genConditionalInsert (Location loc, OpBuilder &builder, Value cond, Value sparseOut, ValueRange ivs, Value v) |
static void | genInsertionStore (CodegenEnv &env, OpBuilder &builder, OpOperand *t, Value rhs) |
Generates insertion code to implement dynamic tensor store. More... | |
static Value | genTensorLoad (CodegenEnv &env, OpBuilder &builder, ExprId exp) |
Generates a load on a dense or sparse tensor. More... | |
static void | genTensorStore (CodegenEnv &env, OpBuilder &builder, ExprId exp, Value rhs) |
Generates a store on a dense or sparse tensor. More... | |
static Value | genInvariantValue (CodegenEnv &env, ExprId exp) |
Generates an invariant value. More... | |
static Value | relinkBranch (CodegenEnv &env, RewriterBase &rewriter, Block *block, Value e) |
Semi-ring branches are simply inlined by the sparsifier. More... | |
static Value | genExp (CodegenEnv &env, RewriterBase &rewriter, ExprId e) |
Recursively generates tensor expression. More... | |
static void | genInvariants (CodegenEnv &env, OpBuilder &builder, ExprId exp, LoopId curr, bool isStart) |
Hoists loop invariant tensor loads for which indices have been exhausted. More... | |
static void | genExpand (CodegenEnv &env, OpBuilder &builder, LoopId curr, bool isStart) |
Generates an expanded access pattern in innermost dimension. More... | |
static bool | isParallelFor (CodegenEnv &env, bool isOuter, bool isSparse) |
Returns parallelization strategy. More... | |
static bool | shouldTryParallize (CodegenEnv &env, LoopId curr, ArrayRef< TensorLevel > tidLvls) |
Whether or not the current loop being generated should be parallized (if possible) according to the configuration. More... | |
static Operation * | genCoIteration (CodegenEnv &env, OpBuilder &builder, ArrayRef< TensorLevel > tidLvls, unsigned numCases, bool tryParallel, bool needsUniv) |
Emit a loop to coiterate over the list of tensor levels. More... | |
static Operation * | genLoop (CodegenEnv &env, OpBuilder &builder, LoopId curr, unsigned numCases, bool needsUniv, ArrayRef< TensorLevel > tidLvls) |
Generates a for-loop or a while-loop, depending on whether it implements singleton iteration or co-iteration over the given conjunction. More... | |
static void | finalizeWhileOp (CodegenEnv &env, OpBuilder &builder, bool needsUniv) |
Generates the induction structure for a while-loop. More... | |
static void | genCoIterationCase (CodegenEnv &env, OpBuilder &builder, unsigned caseIdx, LatPointId allCase, LatPointId curCase, MutableArrayRef< Value > reduc) |
Generates a case region in the coiterate operation. More... | |
static scf::IfOp | genIf (CodegenEnv &env, OpBuilder &builder, LoopId curr, LatPointId p) |
Generates a single if-statement within a while-loop. More... | |
static void | endIf (CodegenEnv &env, OpBuilder &builder, scf::IfOp ifOp, Value redInput, Value cntInput, Value insInput, Value validIns) |
Generates end of true branch of if-statement within a while-loop. More... | |
static bool | getAllTidLvlsInLatPoints (CodegenEnv &env, LatPointId li, LoopId curr, llvm::function_ref< void(TensorLevel, AffineExpr)> callback) |
static bool | startLoopSeq (CodegenEnv &env, OpBuilder &builder, ExprId exp, LoopId curr, LatSetId lts) |
Starts a loop sequence at given level. More... | |
static void | genConstantDenseAddressFromLevel (CodegenEnv &env, OpBuilder &builder, TensorId tid, Level startLvl) |
static void | genInitConstantDenseAddress (CodegenEnv &env, RewriterBase &rewriter) |
static bool | translateBitsToTidLvlPairs (CodegenEnv &env, LatPointId li, LoopId curr, SmallVectorImpl< TensorLevel > &tidLvls, SmallVectorImpl< std::pair< TensorLevel, AffineExpr >> &affineTidLvls) |
Returns true if the lattice bit can be iterated by a for loop. More... | |
static std::pair< Operation *, bool > | startLoop (CodegenEnv &env, OpBuilder &builder, LoopId curr, LatPointId li, unsigned numCases, bool needsUniv) |
Starts a single loop in current sequence. More... | |
static bool | endLoop (CodegenEnv &env, RewriterBase &rewriter, Operation *loop, LatPointId li, bool needsUniv, bool isSingleCond) |
Ends a single loop in current sequence. Returns new values for needsUniv. More... | |
static void | endLoopSeq (CodegenEnv &env, OpBuilder &builder, unsigned exp, unsigned at) |
Ends a loop sequence at given level. More... | |
static void | genStmt (CodegenEnv &env, RewriterBase &rewriter, ExprId exp, LoopId curr) |
Recursively generates code while computing iteration lattices in order to manage the complexity of implementing co-iteration over unions and intersections of sparse iterations spaces. More... | |
static void | genResult (CodegenEnv &env, RewriterBase &rewriter) |
Converts the result computed by the sparse kernel into the required form. More... | |
◆ endIf()
Generates end of true branch of if-statement within a while-loop.
Definition at line 974 of file Sparsification.cpp.
References mlir::sparse_tensor::constantI1(), mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::getExpandCount(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::CodegenEnv::getReduc(), mlir::sparse_tensor::CodegenEnv::isExpand(), mlir::sparse_tensor::CodegenEnv::isReduc(), mlir::sparse_tensor::CodegenEnv::isValidLexInsert(), mlir::sparse_tensor::CodegenEnv::op(), mlir::OpBuilder::setInsertionPointToStart(), mlir::sparse_tensor::CodegenEnv::updateExpandCount(), mlir::sparse_tensor::CodegenEnv::updateInsertionChain(), mlir::sparse_tensor::CodegenEnv::updateReduc(), and mlir::sparse_tensor::CodegenEnv::updateValidLexInsert().
Referenced by genStmt().
◆ endLoop()
◆ endLoopSeq()
static void endLoopSeq ( CodegenEnv & env, OpBuilder & builder, unsigned exp, unsigned at ) | static |
---|
◆ finalizeWhileOp()
Generates the induction structure for a while-loop.
Definition at line 867 of file Sparsification.cpp.
References mlir::OpBuilder::create(), mlir::get(), mlir::sparse_tensor::CodegenEnv::getExpandCount(), mlir::OpBuilder::getInsertionBlock(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::LoopEmitter::getLoopEmitterLoopAttrName(), mlir::Block::getParentOp(), mlir::sparse_tensor::CodegenEnv::getReduc(), mlir::sparse_tensor::CodegenEnv::getValidLexInsert(), mlir::sparse_tensor::CodegenEnv::isExpand(), mlir::sparse_tensor::CodegenEnv::isReduc(), mlir::sparse_tensor::CodegenEnv::isValidLexInsert(), mlir::sparse_tensor::CodegenEnv::op(), mlir::OpBuilder::setInsertionPointAfter(), mlir::sparse_tensor::CodegenEnv::updateExpandCount(), mlir::sparse_tensor::CodegenEnv::updateInsertionChain(), mlir::sparse_tensor::CodegenEnv::updateReduc(), and mlir::sparse_tensor::CodegenEnv::updateValidLexInsert().
Referenced by endLoop().
◆ findAffine()
◆ findDepIdxSet()
Helper method to inspect affine expressions for index variable reduction based codegen.
It finds the dependent index set for all tensor levels in the current expression we are generating.
For example, when handling A[i+j][j+k], we build the two way mapping in merger between (tensor, level) pairs and their dependent index variable set: A_0 <=> [i, j] and A_1 <=> [j, k]
It rejects cases (returns false) 1st, when the same index is used more than once, e.g., A[i+j][i] 2nd, when multiplication is used in the non-trivial index expression. 3rd, when a constant operand is used in the non-trivial index expression.
TODO: constant should be easy to handle.
Definition at line 119 of file Sparsification.cpp.
References mlir::Add, mlir::Constant, mlir::DimId, mlir::AffineExpr::getKind(), mlir::sparse_tensor::Merger::getLvlType(), mlir::sparse_tensor::Merger::hasDependentLvl(), mlir::sparse_tensor::isUndefLT(), mlir::sparse_tensor::Merger::makeLoopId(), mlir::Mul, mlir::sparse_tensor::Merger::setLevelAndType(), and mlir::sparse_tensor::Merger::setLoopDependentTensorLevel().
Referenced by findSparseAnnotations().
◆ findSparseAnnotations()
static bool findSparseAnnotations ( CodegenEnv & env, bool idxReducBased ) | static |
---|
◆ genBuffers()
Local bufferization of all dense and sparse data structures.
Generates buffer for the output tensor. Note that all sparse kernels assume that when all elements are written to (viz. x(i) = y(i) * z(i)), the output buffer is already initialized to all zeroes and only nonzeroes values are computed and written out. For updates (viz. x(i) += y(i) * z(i)), only nonzeroes values are used for the updates and no assumption on the original contents of the output buffer is necessary.
Definition at line 287 of file Sparsification.cpp.
References mlir::sparse_tensor::constantZero(), mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::emitter(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::getElementTypeOrSelf(), mlir::sparse_tensor::getSparseTensorEncoding(), mlir::Value::getType(), mlir::getValueOrCreateConstantIndexOp(), mlir::sparse_tensor::LoopEmitter::initializeLoopEmit(), and mlir::sparse_tensor::CodegenEnv::op().
◆ genCoIteration()
◆ genCoIterationCase()
◆ genConditionalInsert()
◆ genConstantDenseAddressFromLevel()
Definition at line 1148 of file Sparsification.cpp.
References mlir::sparse_tensor::CodegenEnv::emitter(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::OpOperand::getOperandNumber(), mlir::sparse_tensor::getSparseTensorEncoding(), mlir::Value::getType(), mlir::sparse_tensor::LoopEmitter::locateLvlAtAffineAddress(), mlir::sparse_tensor::CodegenEnv::makeTensorId(), mlir::sparse_tensor::CodegenEnv::makeTensorLevel(), and mlir::sparse_tensor::CodegenEnv::op().
Referenced by genInitConstantDenseAddress(), and startLoop().
◆ genExp()
Recursively generates tensor expression.
Definition at line 627 of file Sparsification.cpp.
References mlir::sparse_tensor::Merger::buildExp(), mlir::sparse_tensor::TensorExp::children, mlir::sparse_tensor::constantZero(), mlir::sparse_tensor::TensorExp::Children::e0, mlir::sparse_tensor::TensorExp::Children::e1, mlir::sparse_tensor::CodegenEnv::endCustomReduc(), mlir::sparse_tensor::CodegenEnv::exp(), genInvariantValue(), genTensorLoad(), mlir::sparse_tensor::CodegenEnv::getLoopVar(), mlir::Value::getParentBlock(), mlir::Value::getType(), mlir::sparse_tensor::TensorExp::kBinary, mlir::sparse_tensor::TensorExp::kBinaryBranch, mlir::sparse_tensor::TensorExp::kind, kind, mlir::sparse_tensor::detail::kInvalidId, mlir::sparse_tensor::TensorExp::kInvariant, mlir::sparse_tensor::TensorExp::kLoopVar, mlir::sparse_tensor::TensorExp::kReduce, mlir::sparse_tensor::TensorExp::kSelect, mlir::sparse_tensor::TensorExp::kSynZero, mlir::sparse_tensor::TensorExp::kTensor, mlir::sparse_tensor::TensorExp::kUnary, mlir::sparse_tensor::TensorExp::loop, mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), relinkBranch(), mlir::sparse_tensor::Merger::setExprValue(), and mlir::sparse_tensor::CodegenEnv::startCustomReduc().
Referenced by genStmt().
◆ genExpand()
◆ genIf()
Generates a single if-statement within a while-loop.
Definition at line 927 of file Sparsification.cpp.
References mlir::sparse_tensor::constantI1(), mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::emitter(), mlir::sparse_tensor::Merger::foreachTensorLoopId(), mlir::sparse_tensor::LoopEmitter::getCoord(), mlir::Builder::getIndexType(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::CodegenEnv::getLoopVar(), mlir::sparse_tensor::CodegenEnv::getReduc(), mlir::sparse_tensor::getSparseTensorType(), mlir::Value::getType(), mlir::sparse_tensor::CodegenEnv::getValidLexInsert(), mlir::sparse_tensor::LevelType::hasDenseSemantic(), mlir::sparse_tensor::LevelType::hasSparseSemantic(), mlir::sparse_tensor::CodegenEnv::isExpand(), mlir::sparse_tensor::CodegenEnv::isReduc(), mlir::sparse_tensor::isUndefLT(), mlir::sparse_tensor::CodegenEnv::isValidLexInsert(), mlir::sparse_tensor::Merger::loop(), mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), and mlir::OpBuilder::setInsertionPointToStart().
Referenced by genStmt().
◆ genIndex()
◆ genInitConstantDenseAddress()
◆ genInsertionLoad()
◆ genInsertionLoadReduce()
◆ genInsertionStore()
Generates insertion code to implement dynamic tensor store.
Definition at line 426 of file Sparsification.cpp.
References mlir::sparse_tensor::constantI1(), mlir::sparse_tensor::constantIndex(), mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::emitter(), genConditionalInsert(), genIndex(), mlir::sparse_tensor::genIsNonzero(), mlir::sparse_tensor::CodegenEnv::getCurrentDepth(), mlir::sparse_tensor::CodegenEnv::getExpandAdded(), mlir::sparse_tensor::CodegenEnv::getExpandCount(), mlir::sparse_tensor::CodegenEnv::getExpandFilled(), mlir::sparse_tensor::CodegenEnv::getExpandValues(), mlir::Builder::getIndexType(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::LoopEmitter::getLoopIVsRange(), mlir::sparse_tensor::CodegenEnv::getValidLexInsert(), mlir::sparse_tensor::hasAnySparseType(), mlir::sparse_tensor::CodegenEnv::isExpand(), mlir::sparse_tensor::CodegenEnv::isValidLexInsert(), mlir::sparse_tensor::CodegenEnv::op(), mlir::OpBuilder::setInsertionPointAfter(), mlir::OpBuilder::setInsertionPointToStart(), mlir::sparse_tensor::CodegenEnv::updateExpandCount(), and mlir::sparse_tensor::CodegenEnv::updateInsertionChain().
Referenced by genTensorStore().
◆ genInvariants()
Hoists loop invariant tensor loads for which indices have been exhausted.
Definition at line 686 of file Sparsification.cpp.
References mlir::sparse_tensor::TensorExp::children, mlir::sparse_tensor::Merger::clearExprValue(), mlir::sparse_tensor::constantI1(), mlir::sparse_tensor::TensorExp::Children::e0, mlir::sparse_tensor::TensorExp::Children::e1, mlir::sparse_tensor::CodegenEnv::endCustomReduc(), mlir::sparse_tensor::CodegenEnv::endReduc(), mlir::sparse_tensor::CodegenEnv::endValidLexInsert(), mlir::sparse_tensor::CodegenEnv::exp(), genTensorLoad(), genTensorStore(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::sparse_tensor::CodegenEnv::getCustomRedId(), mlir::sparse_tensor::getSparseTensorType(), mlir::sparse_tensor::CodegenEnv::hasSparseOutput(), mlir::sparse_tensor::CodegenEnv::isCustomReduc(), isInvariantAffine(), mlir::sparse_tensor::CodegenEnv::isReduc(), mlir::sparse_tensor::TensorExp::kind, mlir::sparse_tensor::detail::kInvalidId, mlir::sparse_tensor::TensorExp::kInvariant, mlir::sparse_tensor::TensorExp::kLoopVar, mlir::sparse_tensor::TensorExp::kReduce, mlir::sparse_tensor::TensorExp::kSynZero, mlir::sparse_tensor::TensorExp::kTensor, mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::Merger::setExprValue(), mlir::sparse_tensor::CodegenEnv::startCustomReduc(), mlir::sparse_tensor::CodegenEnv::startReduc(), mlir::sparse_tensor::CodegenEnv::startValidLexInsert(), and mlir::sparse_tensor::TensorExp::tensor.
Referenced by endLoopSeq(), and startLoopSeq().
◆ genInvariantValue()
◆ genLoop()
◆ genResult()
Converts the result computed by the sparse kernel into the required form.
Definition at line 1363 of file Sparsification.cpp.
References mlir::sparse_tensor::CodegenEnv::emitter(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::Merger::getOutTensorID(), mlir::sparse_tensor::getSparseTensorEncoding(), mlir::Value::getType(), mlir::sparse_tensor::LoopEmitter::getValBuffer(), mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), and mlir::RewriterBase::replaceOpWithNewOp().
◆ genStmt()
Recursively generates code while computing iteration lattices in order to manage the complexity of implementing co-iteration over unions and intersections of sparse iterations spaces.
Definition at line 1270 of file Sparsification.cpp.
References mlir::sparse_tensor::Merger::buildLattices(), mlir::OpBuilder::create(), endIf(), endLoop(), endLoopSeq(), mlir::sparse_tensor::LatPoint::exp, genCoIterationCase(), mlir::sparse_tensor::CodegenEnv::generatingSparseIterator(), genExp(), genIf(), mlir::sparse_tensor::CodegenEnv::genLoopBoundary(), genTensorStore(), mlir::sparse_tensor::CodegenEnv::getCurrentDepth(), mlir::sparse_tensor::CodegenEnv::getExpandCount(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::sparse_tensor::CodegenEnv::getLoopNum(), mlir::sparse_tensor::CodegenEnv::getReduc(), mlir::sparse_tensor::CodegenEnv::getValidLexInsert(), mlir::sparse_tensor::CodegenEnv::lat(), mlir::sparse_tensor::Merger::latGT(), mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::Merger::optimizeSet(), mlir::sparse_tensor::CodegenEnv::set(), startLoop(), and startLoopSeq().
◆ genSubscript()
Generates subscript for load/store on a dense or sparse tensor.
Definition at line 349 of file Sparsification.cpp.
References mlir::sparse_tensor::CodegenEnv::emitter(), mlir::sparse_tensor::LoopEmitter::genAffine(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::OpOperand::getOperandNumber(), mlir::sparse_tensor::getSparseTensorType(), mlir::sparse_tensor::LoopEmitter::getValBuffer(), mlir::sparse_tensor::LoopEmitter::getValPosits(), mlir::kSparseIterator, mlir::sparse_tensor::CodegenEnv::makeTensorId(), mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::CodegenEnv::options(), and mlir::SparsificationOptions::sparseEmitStrategy.
Referenced by genTensorLoad(), genTensorStore(), and relinkBranch().
◆ genTensorLoad()
Generates a load on a dense or sparse tensor.
Definition at line 499 of file Sparsification.cpp.
References mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::exp(), genInsertionLoad(), genInsertionLoadReduce(), genSubscript(), mlir::sparse_tensor::genValFromAttr(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::sparse_tensor::getSparseTensorType(), mlir::Value::getType(), mlir::sparse_tensor::CodegenEnv::isCustomReduc(), mlir::sparse_tensor::CodegenEnv::isSparseOutput(), mlir::kSparseIterator, mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::CodegenEnv::options(), mlir::SparsificationOptions::sparseEmitStrategy, mlir::sparse_tensor::TensorExp::tensor, and mlir::sparse_tensor::TensorExp::val.
Referenced by genExp(), and genInvariants().
◆ genTensorStore()
Generates a store on a dense or sparse tensor.
Definition at line 531 of file Sparsification.cpp.
References mlir::sparse_tensor::Merger::clearExprValue(), mlir::OpBuilder::create(), mlir::sparse_tensor::CodegenEnv::exp(), genInsertionStore(), genSubscript(), mlir::sparse_tensor::CodegenEnv::getInsertionChain(), mlir::Value::getType(), mlir::sparse_tensor::CodegenEnv::isReduc(), mlir::sparse_tensor::CodegenEnv::isSparseOutput(), mlir::sparse_tensor::TensorExp::kBinary, mlir::sparse_tensor::TensorExp::kind, mlir::sparse_tensor::TensorExp::kReduce, mlir::sparse_tensor::TensorExp::kSelect, mlir::sparse_tensor::TensorExp::kUnary, mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), mlir::OpBuilder::setInsertionPointAfter(), mlir::OpBuilder::setInsertionPointToStart(), mlir::sparse_tensor::CodegenEnv::updateInsertionChain(), mlir::sparse_tensor::CodegenEnv::updateReduc(), and mlir::sparse_tensor::TensorExp::val.
Referenced by genInvariants(), and genStmt().
◆ getAllTidLvlsInLatPoints()
Definition at line 1004 of file Sparsification.cpp.
References mlir::sparse_tensor::Merger::foreachTensorLoopId(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::sparse_tensor::CodegenEnv::getCurrentDepth(), mlir::sparse_tensor::Merger::getLvl(), mlir::sparse_tensor::Merger::getOutTensorID(), mlir::sparse_tensor::getSparseTensorType(), mlir::sparse_tensor::Merger::getSynTensorID(), mlir::sparse_tensor::LevelType::hasDenseSemantic(), mlir::sparse_tensor::isDenseLT(), isInvariantAffine(), mlir::sparse_tensor::isUndefLT(), mlir::sparse_tensor::isUniqueLT(), mlir::kSparseIterator, mlir::sparse_tensor::CodegenEnv::lat(), mlir::sparse_tensor::CodegenEnv::lt(), mlir::sparse_tensor::CodegenEnv::makeTensorLevel(), mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::CodegenEnv::options(), mlir::sparse_tensor::LatPoint::simple, and mlir::SparsificationOptions::sparseEmitStrategy.
Referenced by startLoopSeq(), and translateBitsToTidLvlPairs().
◆ getNumNonTrivialIdxExpOnSparseLvls() [1/2]
static unsigned getNumNonTrivialIdxExpOnSparseLvls ( AffineMap map, Value tensor ) | static |
---|
◆ getNumNonTrivialIdxExpOnSparseLvls() [2/2]
static unsigned getNumNonTrivialIdxExpOnSparseLvls ( linalg::GenericOp op) | static |
---|
◆ hasNonTrivialAffineOnSparseOut()
static bool hasNonTrivialAffineOnSparseOut ( linalg::GenericOp op) | static |
---|
◆ isInvariantAffine()
static bool isInvariantAffine ( AffineExpr a, LoopId curr, bool & isCurrentLoop ) | static |
---|
◆ isParallelFor()
static bool isParallelFor ( CodegenEnv & env, bool isOuter, bool isSparse ) | static |
---|
◆ relinkBranch()
Semi-ring branches are simply inlined by the sparsifier.
Prior analysis has verified that all computations are "local" to the inlined branch or otherwise invariantly defined outside the loop nest, with the exception of index computations, which need to be relinked to actual inlined cloned code.
Definition at line 593 of file Sparsification.cpp.
References mlir::OpBuilder::create(), genSubscript(), mlir::IROperand< DerivedT, IRValueT >::get(), mlir::Value::getDefiningOp(), mlir::sparse_tensor::CodegenEnv::getLoopVar(), mlir::sparse_tensor::getSparseTensorType(), mlir::sparse_tensor::SparseTensorType::hasEncoding(), mlir::sparse_tensor::CodegenEnv::makeLoopId(), mlir::sparse_tensor::CodegenEnv::makeTensorId(), mlir::RewriterBase::modifyOpInPlace(), mlir::sparse_tensor::CodegenEnv::op(), and mlir::OpBuilder::setInsertionPoint().
Referenced by genExp().
◆ shouldTryParallize()
◆ startLoop()
◆ startLoopSeq()
Starts a loop sequence at given level.
Returns true if the universal loop index must be maintained at this level.
Definition at line 1116 of file Sparsification.cpp.
References mlir::sparse_tensor::CodegenEnv::emitter(), mlir::sparse_tensor::LoopEmitter::enterNewLoopSeq(), genExpand(), genInvariants(), getAllTidLvlsInLatPoints(), mlir::sparse_tensor::CodegenEnv::getLoopVar(), mlir::sparse_tensor::Merger::hasAnySparse(), mlir::sparse_tensor::CodegenEnv::lat(), mlir::sparse_tensor::CodegenEnv::merger(), mlir::sparse_tensor::CodegenEnv::op(), mlir::sparse_tensor::CodegenEnv::set(), and mlir::sparse_tensor::LatPoint::simple.
Referenced by genStmt().