Lines Matching defs:linalgOp

46 /// Method to inline the payload of a `linalgOp` given the iteration space
48 static LogicalResult inlinePayload(OpBuilder &b, LinalgOp linalgOp,
50 Block *body = linalgOp.getBlock();
65 OpOperand *storeInto = linalgOp.getDpsInitOperand(operand.index());
67 b, loc, linalgOp.getMatchingIndexingMap(storeInto), ivs);
69 loc, toStore, linalgOp.getDpsInitOperand(operand.index())->get(),
100 LinalgOp linalgOp = cast<LinalgOp>(op);
102 linalgOp.createFlatListOfOperandDims(b, loc);
103 AffineMap map = linalgOp.getShapesToLoopsMap();
121 LinalgOp linalgOp = cast<LinalgOp>(op);
122 SmallVector<Value> valuesToTile = linalgOp->getOperands();
124 b, loc, linalgOp, valuesToTile, offsets, sizes, {}, true);
135 getTensorOutputTypes(linalgOp, tiledOperands);
137 Operation *tiledOp = clone(b, linalgOp, resultTensorTypes, tiledOperands);
148 getMappedOffsetAndSize(LinalgOp linalgOp, OpBuilder &b, AffineMap indexingMap,
153 unsigned numLoops = linalgOp.getNumLoops();
154 auto tilingInterfaceOp = cast<TilingInterface>(linalgOp.getOperation());
180 auto linalgOp = cast<LinalgOp>(op);
187 linalgOp.getMatchingIndexingMap(&op->getOpOperand(operandNumber));
194 getMappedOffsetAndSize(linalgOp, b, indexingMap, offsets, sizes,
208 LinalgOp linalgOp = cast<LinalgOp>(op);
217 OpOperand *outOperand = linalgOp.getDpsInitOperand(resultNumber);
220 linalgOp.getMatchingIndexingMap(outOperand), offsets,
232 auto linalgOp = cast<LinalgOp>(op);
239 linalgOp.getIndexingMapMatchingResult(op->getResult(resultNumber));
246 getMappedOffsetAndSize(linalgOp, b, indexingMap, offsets, sizes,
293 auto linalgOp = cast<LinalgOp>(op);
294 if (!linalgOp.hasPureBufferSemantics())
298 indexedValues.reserve(linalgOp->getNumOperands());
302 for (OpOperand &operand : linalgOp->getOpOperands()) {
303 if (!linalgOp.payloadUsesValueFromOperand(&operand)) {
307 if (linalgOp.isScalar(&operand)) {
312 builder, linalgOpLoc, linalgOp.getMatchingIndexingMap(&operand), ivs);
319 return inlinePayload(builder, linalgOp, ivs, indexedValues);
334 static AffineMap getPartialResultAffineMap(LinalgOp linalgOp,
338 linalgOp.getMatchingIndexingMap(linalgOp.getDpsInitOperand(resultNumber));
340 map = map.insertResult(getAffineDimExpr(redPos, linalgOp.getContext()),
355 auto linalgOp = cast<LinalgOp>(op);
358 if (linalgOp.hasPureBufferSemantics())
362 auto tilingInterfaceOp = cast<TilingInterface>(linalgOp.getOperation());
377 for (int initIdx = 0, e = linalgOp.getNumDpsInits(); initIdx < e;
380 if (!matchReduction(linalgOp.getRegionOutputArgs(), initIdx,
393 getPartialResultAffineMap(linalgOp, reductionDims, initIdx);
401 getElementTypeOrSelf(linalgOp->getResult(initIdx).getType());
419 auto linalgOp = cast<LinalgOp>(op);
424 newInitMaps.reserve(linalgOp.getNumDpsInits());
425 for (int idx : llvm::seq<int>(0, linalgOp.getNumDpsInits())) {
429 getPartialResultAffineMap(linalgOp, reductionDims, idx);
435 b, loc, linalgOp, linalgOp.getDpsInputs(), offsets, sizes, {}, true);
460 SmallVector<AffineMap> newMaps = linalgOp.getIndexingMapsArray();
462 for (int idx : llvm::seq<int>(0, linalgOp.getNumDpsInits())) {
465 OpOperand *initOperand = linalgOp.getDpsInitOperand(idx);
466 int64_t mapIdx = linalgOp.getIndexingMapIndex(initOperand);
472 linalgOp.getIteratorTypesArray();
493 auto linalgOp = cast<LinalgOp>(op);
497 int64_t numInits = linalgOp.getNumDpsInits();
506 getPartialResultAffineMap(linalgOp, reductionDims, idx);
517 Value init = linalgOp.getDpsInits()[idx];
521 [&linalgOp, &idx](OpBuilder &b, Location loc, ValueRange inputs) {
524 matchReduction(linalgOp.getRegionOutputArgs(), idx, combinerOps);
545 auto linalgOp = cast<LinalgOp>(op);
548 getPartialResultAffineMap(linalgOp, reductionDims, resultNumber);