[Openmp-commits] [flang] [llvm] [mlir] [openmp] [MLIR][OpenMP] Add omp.fuse operation (PR #168898)
Michael Kruse via Openmp-commits
openmp-commits at lists.llvm.org
Wed Jan 21 03:24:33 PST 2026
================
@@ -3810,6 +3824,60 @@ std::pair<unsigned, unsigned> TileOp::getGenerateesODSOperandIndexAndLength() {
return getODSOperandIndexAndLength(odsIndex_generatees);
}
+//===----------------------------------------------------------------------===//
+// FuseOp
+//===----------------------------------------------------------------------===//
+
+static void printLoopTransformClis(OpAsmPrinter &p, FuseOp op,
+ OperandRange generatees,
+ OperandRange applyees) {
+ if (!generatees.empty())
+ p << '(' << llvm::interleaved(generatees) << ')';
+
+ if (!applyees.empty())
+ p << " <- (" << llvm::interleaved(applyees) << ')';
+}
+
+LogicalResult FuseOp::verify() {
+ if (getApplyees().size() < 2)
+ return emitOpError() << "must apply to at least two loops";
+
+ if (getFirst() && getCount()) {
+ unsigned int first = getFirst().getInt();
+ unsigned int count = getCount().getInt();
+ if (first + count - 1 > getApplyees().size())
+ return emitOpError() << "the numbers of applyees must be at least first "
+ "minus one plus count attributes";
+ if (!getGeneratees().empty() &&
+ getGeneratees().size() != getApplyees().size() + 1 - count)
+ return emitOpError() << "the number of generatees must be the number of "
+ "aplyees plus one minus count";
+
+ } else {
+ if (!getGeneratees().empty() && getGeneratees().size() != 1)
+ return emitOpError()
+ << "in a complete fuse the number of generatees must be exactly 1";
+ }
+ for (auto &&applyee : getApplyees()) {
+ auto [create, gen, cons] = decodeCli(applyee);
+
+ if (!gen)
+ return emitOpError() << "applyee CLI has no generator";
+ auto loop = dyn_cast_or_null<CanonicalLoopOp>(gen->getOwner());
+ if (!loop)
+ return emitOpError()
+ << "currently only supports omp.canonical_loop as applyee";
+ }
+ return success();
+}
+std::pair<unsigned, unsigned> FuseOp ::getApplyeesODSOperandIndexAndLength() {
----------------
Meinersbur wrote:
```suggestion
std::pair<unsigned, unsigned> FuseOp::getApplyeesODSOperandIndexAndLength() {
```
[nit]
https://github.com/llvm/llvm-project/pull/168898
More information about the Openmp-commits
mailing list