diff --git a/compiler/include/concretelang/Dialect/RT/IR/RTOps.td b/compiler/include/concretelang/Dialect/RT/IR/RTOps.td index 5a4164fc9..50b27e980 100644 --- a/compiler/include/concretelang/Dialect/RT/IR/RTOps.td +++ b/compiler/include/concretelang/Dialect/RT/IR/RTOps.td @@ -12,7 +12,9 @@ include "concretelang/Dialect/RT/IR/RTTypes.td" class RT_Op traits = []> : Op; -def DataflowTaskOp : RT_Op<"dataflow_task", [SingleBlockImplicitTerminator<"DataflowYieldOp">]> { +def DataflowTaskOp : RT_Op<"dataflow_task", [ + DeclareOpInterfaceMethods, + SingleBlockImplicitTerminator<"DataflowYieldOp">]> { let arguments = (ins Variadic: $inputs); let results = (outs Variadic:$outputs); diff --git a/compiler/lib/Dialect/RT/IR/RTOps.cpp b/compiler/lib/Dialect/RT/IR/RTOps.cpp index c444b2eac..91b510252 100644 --- a/compiler/lib/Dialect/RT/IR/RTOps.cpp +++ b/compiler/lib/Dialect/RT/IR/RTOps.cpp @@ -29,3 +29,9 @@ void DataflowTaskOp::build( reg->push_back(body); result.addTypes(resultTypes); } + +void DataflowTaskOp::getSuccessorRegions( + Optional index, ArrayRef operands, + SmallVectorImpl ®ions) { + regions.push_back(RegionSuccessor(&body())); +} diff --git a/compiler/lib/Support/Pipeline.cpp b/compiler/lib/Support/Pipeline.cpp index 6eec827b5..38d5f0af8 100644 --- a/compiler/lib/Support/Pipeline.cpp +++ b/compiler/lib/Support/Pipeline.cpp @@ -237,6 +237,9 @@ lowerStdToLLVMDialect(mlir::MLIRContext &context, mlir::ModuleOp &module, addPotentiallyNestedPass( pm, mlir::concretelang::createFinalizingBufferizePass(), enablePass); + addPotentiallyNestedPass(pm, mlir::createBufferDeallocationPass(), + enablePass); + if (parallelizeLoops) addPotentiallyNestedPass(pm, mlir::createConvertSCFToOpenMPPass(), enablePass);