Lines Matching refs:forOp
319 static void replaceIterArgsAndYieldResults(scf::ForOp forOp) { in replaceIterArgsAndYieldResults() argument
321 auto iterOperands = forOp.getIterOperands(); in replaceIterArgsAndYieldResults()
322 auto iterArgs = forOp.getRegionIterArgs(); in replaceIterArgsAndYieldResults()
327 auto outerResults = forOp.getResults(); in replaceIterArgsAndYieldResults()
328 auto innerResults = forOp.getBody()->getTerminator()->getOperands(); in replaceIterArgsAndYieldResults()
335 LogicalResult mlir::promoteIfSingleIteration(scf::ForOp forOp) { in promoteIfSingleIteration() argument
336 auto lbCstOp = forOp.getLowerBound().getDefiningOp<arith::ConstantIndexOp>(); in promoteIfSingleIteration()
337 auto ubCstOp = forOp.getUpperBound().getDefiningOp<arith::ConstantIndexOp>(); in promoteIfSingleIteration()
338 auto stepCstOp = forOp.getStep().getDefiningOp<arith::ConstantIndexOp>(); in promoteIfSingleIteration()
346 auto iv = forOp.getInductionVar(); in promoteIfSingleIteration()
349 replaceIterArgsAndYieldResults(forOp); in promoteIfSingleIteration()
353 auto *parentBlock = forOp->getBlock(); in promoteIfSingleIteration()
354 forOp.getBody()->getTerminator()->erase(); in promoteIfSingleIteration()
355 parentBlock->getOperations().splice(Block::iterator(forOp), in promoteIfSingleIteration()
356 forOp.getBody()->getOperations()); in promoteIfSingleIteration()
357 forOp.erase(); in promoteIfSingleIteration()
419 scf::ForOp forOp, uint64_t unrollFactor, in loopUnrollByFactor() argument
424 if (llvm::hasSingleElement(forOp.getBody()->getOperations())) in loopUnrollByFactor()
429 OpBuilder boundsBuilder(forOp); in loopUnrollByFactor()
430 auto loc = forOp.getLoc(); in loopUnrollByFactor()
431 auto step = forOp.getStep(); in loopUnrollByFactor()
436 auto lbCstOp = forOp.getLowerBound().getDefiningOp<arith::ConstantIndexOp>(); in loopUnrollByFactor()
437 auto ubCstOp = forOp.getUpperBound().getDefiningOp<arith::ConstantIndexOp>(); in loopUnrollByFactor()
438 auto stepCstOp = forOp.getStep().getDefiningOp<arith::ConstantIndexOp>(); in loopUnrollByFactor()
449 if (tripCount == 1 && failed(promoteIfSingleIteration(forOp))) in loopUnrollByFactor()
476 auto lowerBound = forOp.getLowerBound(); in loopUnrollByFactor()
477 auto upperBound = forOp.getUpperBound(); in loopUnrollByFactor()
499 OpBuilder epilogueBuilder(forOp->getContext()); in loopUnrollByFactor()
500 epilogueBuilder.setInsertionPoint(forOp->getBlock(), in loopUnrollByFactor()
501 std::next(Block::iterator(forOp))); in loopUnrollByFactor()
502 auto epilogueForOp = cast<scf::ForOp>(epilogueBuilder.clone(*forOp)); in loopUnrollByFactor()
506 auto results = forOp.getResults(); in loopUnrollByFactor()
518 forOp.setUpperBound(upperBoundUnrolled); in loopUnrollByFactor()
519 forOp.setStep(stepUnrolled); in loopUnrollByFactor()
521 auto iterArgs = ValueRange(forOp.getRegionIterArgs()); in loopUnrollByFactor()
522 auto yieldedValues = forOp.getBody()->getTerminator()->getOperands(); in loopUnrollByFactor()
525 forOp.getBody(), forOp.getInductionVar(), unrollFactor, in loopUnrollByFactor()
534 (void)promoteIfSingleIteration(forOp); in loopUnrollByFactor()
835 static Loops stripmineSink(scf::ForOp forOp, Value factor, in stripmineSink() argument
837 auto originalStep = forOp.getStep(); in stripmineSink()
838 auto iv = forOp.getInductionVar(); in stripmineSink()
840 OpBuilder b(forOp); in stripmineSink()
841 forOp.setStep(b.create<arith::MulIOp>(forOp.getLoc(), originalStep, factor)); in stripmineSink()
851 Value stepped = b.create<arith::AddIOp>(t.getLoc(), iv, forOp.getStep()); in stripmineSink()
853 forOp.getUpperBound(), stepped); in stripmineSink()
855 forOp.getUpperBound(), stepped); in stripmineSink()
874 static scf::ForOp stripmineSink(scf::ForOp forOp, SizeType factor, in stripmineSink() argument
880 auto res = stripmineSink(forOp, factor, ArrayRef<scf::ForOp>(target)); in stripmineSink()
944 auto forOp = forOps[i]; in extractFixedOuterLoops() local
945 OpBuilder builder(forOp); in extractFixedOuterLoops()
946 auto loc = forOp.getLoc(); in extractFixedOuterLoops()
947 Value diff = builder.create<arith::SubIOp>(loc, forOp.getUpperBound(), in extractFixedOuterLoops()
948 forOp.getLowerBound()); in extractFixedOuterLoops()
949 Value numIterations = ceilDivPositive(builder, loc, diff, forOp.getStep()); in extractFixedOuterLoops()