feat(dfr): add memory management for futures and associated data.

This commit is contained in:
Antoniu Pop
2022-06-08 21:58:33 +01:00
committed by Antoniu Pop
parent b405a2daf2
commit fbca52f4a0
14 changed files with 1047 additions and 348 deletions

View File

@@ -125,8 +125,9 @@ struct MakeReadyFutureOpInterfaceLowering
results[0]);
rewriter.create<LLVM::StoreOp>(mrfOp.getLoc(),
adaptor.getOperands().front(), allocatedPtr);
rewriter.replaceOpWithNewOp<LLVM::CallOp>(mrfOp, mrfFuncOp, allocatedPtr);
SmallVector<Value, 4> mrfOperands = {adaptor.getOperands()};
mrfOperands[0] = allocatedPtr;
rewriter.replaceOpWithNewOp<LLVM::CallOp>(mrfOp, mrfFuncOp, mrfOperands);
return mlir::success();
}
};
@@ -178,16 +179,14 @@ struct RegisterTaskWorkFunctionOpInterfaceLowering
mlir::LogicalResult
matchAndRewrite(RT::RegisterTaskWorkFunctionOp rtwfOp,
ArrayRef<Value> operands,
RT::RegisterTaskWorkFunctionOp::Adaptor adaptor,
ConversionPatternRewriter &rewriter) const override {
RT::RegisterTaskWorkFunctionOp::Adaptor transformed(operands);
auto rtwfFuncType =
LLVM::LLVMFunctionType::get(getVoidType(), {}, /*isVariadic=*/true);
auto rtwfFuncOp = getOrInsertFuncOpDecl(
rtwfOp, "_dfr_register_work_function", rtwfFuncType, rewriter);
rewriter.replaceOpWithNewOp<LLVM::CallOp>(rtwfOp, rtwfFuncOp,
transformed.getOperands());
adaptor.getOperands());
return success();
}
};