Lines Matching defs:loopOp

721 /// loops existing `init` operands (or similar), and replace `loopOp` with
729 yieldTiledValuesAndReplaceLoop(LoopType loopOp, RewriterBase &rewriter,
732 return rewriter.notifyMatchFailure(loopOp, "unhandled loop type");
738 scf::ForOp loopOp, RewriterBase &rewriter, ValueRange newInitOperands,
741 Location loc = loopOp.getLoc();
742 rewriter.setInsertionPoint(loopOp);
744 auto inits = llvm::to_vector(loopOp.getInitArgs());
747 loc, loopOp.getLowerBound(), loopOp.getUpperBound(), loopOp.getStep(),
751 Block *loopBody = loopOp.getBody();
768 return rewriter.notifyMatchFailure(loopOp, "failed to get tiled values");
784 rewriter.replaceOp(loopOp,
785 newLoop->getResults().take_front(loopOp.getNumResults()));
792 scf::ForallOp loopOp, RewriterBase &rewriter, ValueRange newInitOperands,
795 Location loc = loopOp.getLoc();
796 rewriter.setInsertionPoint(loopOp);
797 auto inits = llvm::to_vector(loopOp.getOutputs());
800 loc, loopOp.getMixedLowerBound(), loopOp.getMixedUpperBound(),
801 loopOp.getMixedStep(), inits, loopOp.getMapping(),
805 Block *loopBody = loopOp.getBody();
821 return rewriter.notifyMatchFailure(loopOp,
837 rewriter.replaceOp(loopOp,
838 newLoop->getResults().take_front(loopOp.getNumResults()));
851 [&](auto loopOp) -> FailureOr<LoopLikeOpInterface> {
853 loopOp, rewriter, newInitOperands, yieldTiledValuesFn);
855 .Default([&](auto loopOp) -> FailureOr<LoopLikeOpInterface> {
856 return rewriter.notifyMatchFailure(loopOp, "unhandled loop type");
1685 /// An utility to get the first user of the given loopOp. If any of user stay
1686 /// in different block of loopOp, return failure.
1687 static FailureOr<Operation *> getFirstUserOfLoop(Operation *loopOp) {
1688 if (!isa<LoopLikeOpInterface>(loopOp))
1691 for (Operation *userOp : loopOp->getUsers()) {
1710 if (loopOp->getBlock() != userOp->getBlock())
1738 /// would be invalid to move the `loopOp` right before the `firstUserOfLoop`,
1751 /// @param loopOp: loop operation
1758 checkAssumptionForLoop(Operation *loopOp, Operation *consumerOp,
1760 FailureOr<Operation *> firstUserOfLoop = getFirstUserOfLoop(loopOp);
1770 if (op == loopOp) {
1784 // If consumerOp has one producer, which is also the user of loopOp.
1787 // %0 = %loopOp
1791 // We can not fuse consumerOp2 into loopOp due to UD chain, unless
1792 // consumerOp1 has already been fused into loopOp before.
1804 Operation *loopOp,
1806 if (!isa<LoopLikeOpInterface>(loopOp))
1808 Value val = loopOp->getResult(resultNumber);
1809 Block *loopBlock = loopOp->getBlock();
1829 checkAssumptionForLoop(loopOp, consumerOp, true);
1836 FailureOr<Operation *> firstUserOfLoop = getFirstUserOfLoop(loopOp);