fix(compiler): delay all memref deallocation calls introduced by the bufferizer and that are made into futures until after the synchronization point.

This commit is contained in:
Antoniu Pop
2022-06-28 14:26:06 +01:00
committed by Antoniu Pop
parent fb219f0fbf
commit 26084a68aa
2 changed files with 21 additions and 1 deletions

View File

@@ -325,6 +325,26 @@ struct LowerDataflowTasksPass
ArrayRef<NamedAttribute>());
}
});
// Delay memref deallocations when memrefs are made into futures
module.walk([&](Operation *op) {
if (isa<RT::MakeReadyFutureOp>(*op) &&
op->getOperand(0).getType().isa<mlir::MemRefType>()) {
for (auto &use :
llvm::make_early_inc_range(op->getOperand(0).getUses())) {
if (isa<mlir::memref::DeallocOp>(use.getOwner())) {
OpBuilder builder(use.getOwner()
->getParentOfType<mlir::func::FuncOp>()
.getBody()
.back()
.getTerminator());
builder.clone(*use.getOwner());
use.getOwner()->erase();
}
}
}
return WalkResult::advance();
});
}
LowerDataflowTasksPass(bool debug) : debug(debug){};

View File

@@ -9,7 +9,7 @@
// Auto-parallelize independent FHE ops /////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
TEST(ParallelizeAndRunFHE, DISABLED_add_eint_tree) {
TEST(ParallelizeAndRunFHE, add_eint_tree) {
checkedJit(lambda, R"XXX(
func @main(%arg0: !FHE.eint<7>, %arg1: !FHE.eint<7>, %arg2: !FHE.eint<7>, %arg3: !FHE.eint<7>) -> !FHE.eint<7> {
%1 = "FHE.add_eint"(%arg0, %arg1): (!FHE.eint<7>, !FHE.eint<7>) -> (!FHE.eint<7>)