"mgpuModuleLoad",
llvmPointerType /* void *module */,
{llvmPointerType /* void *cubin */}};
+ FunctionCallBuilder moduleUnloadCallBuilder = {
+ "mgpuModuleUnload", llvmVoidType, {llvmPointerType /* void *module */}};
FunctionCallBuilder moduleGetFunctionCallBuilder = {
"mgpuModuleGetFunction",
llvmPointerType /* void *function */,
kernelParams, /* kernel params */
nullpointer /* extra */});
streamSynchronizeCallBuilder.create(loc, rewriter, stream.getResult(0));
+ streamDestroyCallBuilder.create(loc, rewriter, stream.getResult(0));
+ moduleUnloadCallBuilder.create(loc, rewriter, module.getResult(0));
rewriter.eraseOp(op);
return success();
// CHECK-SAME: [[C8]], [[C8]], [[C8]], [[C0_I32]], [[STREAM]],
// CHECK-SAME: [[PARAMS]], [[EXTRA_PARAMS]])
// CHECK: llvm.call @mgpuStreamSynchronize
+ // CHECK: llvm.call @mgpuStreamDestroy
+ // CHECK: llvm.call @mgpuModuleUnload
}
return module;
}
+extern "C" void mgpuModuleUnload(CUmodule module) {
+ CUDA_REPORT_IF_ERROR(cuModuleUnload(module));
+}
+
extern "C" CUfunction mgpuModuleGetFunction(CUmodule module, const char *name) {
CUfunction function = nullptr;
CUDA_REPORT_IF_ERROR(cuModuleGetFunction(&function, module, name));
return module;
}
+extern "C" void mgpuModuleUnload(hipModule_t module) {
+ HIP_REPORT_IF_ERROR(hipModuleUnload(module));
+}
+
extern "C" hipFunction_t mgpuModuleGetFunction(hipModule_t module,
const char *name) {
hipFunction_t function = nullptr;