[Mlir-commits] [mlir] [mlir] Add option for a cleanup pattern set to SCF tiling helper (PR #109554)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Sep 25 09:37:24 PDT 2024
================
@@ -1370,33 +1538,33 @@ mlir::scf::tileConsumerAndFuseProducersUsingSCF(
tensor::ExtractSliceOp candidateSlice;
SCFTileAndFuseOptions::ControlFnResult controlFnResult;
};
- std::deque<WorklistItem> worklist;
- auto addCandidateSlices = [&worklist, &options,
- &loops](ArrayRef<Operation *> candidates) {
- for (auto candidate : candidates) {
- auto sliceOp = dyn_cast<tensor::ExtractSliceOp>(candidate);
- if (!sliceOp || sliceOp.use_empty())
- continue;
- auto [fusableProducer, destinationInitArg] =
- getUntiledProducerFromSliceSource(&sliceOp.getSourceMutable(), loops);
- if (!fusableProducer)
- continue;
- std::optional<SCFTileAndFuseOptions::ControlFnResult> controlFnResult =
- options.fusionControlFn(sliceOp, fusableProducer,
- destinationInitArg.has_value());
- if (!controlFnResult)
- continue;
- worklist.emplace_back(WorklistItem{sliceOp, controlFnResult.value()});
- }
- };
+ SliceTrackingListener sliceTracker =
+ SliceTrackingListener(options.cleanupPatterns);
- addCandidateSlices(tilingResult->generatedSlices);
+ if (failed(
+ sliceTracker.insertAndApplyPatterns(tilingResult->generatedSlices))) {
+ return rewriter.notifyMatchFailure(consumer, "cleanup patterns failed");
+ }
OpBuilder::InsertionGuard g(rewriter);
- while (!worklist.empty()) {
- // Traverse the slices in BFS fashion.
- WorklistItem worklistItem = worklist.front();
- worklist.pop_front();
+ while (Operation *next = sliceTracker.worklist.pop()) {
+ auto candidateSlice = dyn_cast<tensor::ExtractSliceOp>(next);
+ if (!candidateSlice)
+ continue;
+
+ auto [fusableProducer, destinationInitArg] =
+ getUntiledProducerFromSliceSource(&candidateSlice.getSourceMutable(),
+ loops);
+ if (!fusableProducer)
+ continue;
+
+ std::optional<SCFTileAndFuseOptions::ControlFnResult> controlFnResult =
+ options.fusionControlFn(candidateSlice, fusableProducer,
+ destinationInitArg.has_value());
+ if (!controlFnResult)
+ continue;
+
+ WorklistItem worklistItem = {candidateSlice, controlFnResult.value()};
----------------
MaheshRavishankar wrote:
I think we can remove `WorklistItem` now. I dont think it is serving any purpose.
https://github.com/llvm/llvm-project/pull/109554
More information about the Mlir-commits
mailing list