mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-09 03:55:04 -05:00
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:
@@ -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){};
|
||||
|
||||
|
||||
@@ -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>)
|
||||
|
||||
Reference in New Issue
Block a user