[Mlir-commits] [mlir] 0463e00 - [mlir][ROCDL] Fix file leak in SeralizeToHsaco and its newer form (#67711)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Sep 29 15:24:46 PDT 2023
Author: Krzysztof Drewniak
Date: 2023-09-29T17:24:40-05:00
New Revision: 0463e00ac618654a6ea9d690cb0830530ad319a1
URL: https://github.com/llvm/llvm-project/commit/0463e00ac618654a6ea9d690cb0830530ad319a1
DIFF: https://github.com/llvm/llvm-project/commit/0463e00ac618654a6ea9d690cb0830530ad319a1.diff
LOG: [mlir][ROCDL] Fix file leak in SeralizeToHsaco and its newer form (#67711)
SerializetToHsaco, as currently implemented, leaks the file descriptor
of the .hsaco temporary file, which causes issues in long-running
parallel compilation setups.
See also https://github.com/ROCmSoftwarePlatform/rocMLIR/pull/1257
Added:
Modified:
mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
mlir/lib/Target/LLVM/ROCDL/Target.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
index 9db0a942f7c38fd..5c288e977ad0f23 100644
--- a/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
+++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToHsaco.cpp
@@ -12,7 +12,6 @@
//===----------------------------------------------------------------------===//
#include "mlir/Dialect/GPU/Transforms/Passes.h"
-#include "mlir/Dialect/LLVMIR/ROCDLDialect.h"
#include "mlir/IR/Location.h"
#include "mlir/IR/MLIRContext.h"
@@ -43,6 +42,7 @@
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FileUtilities.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Program.h"
@@ -402,9 +402,8 @@ SerializeToHsacoPass::createHsaco(const SmallVectorImpl<char> &isaBinary) {
tempIsaBinaryOs.close();
// Create a temp file for HSA code object.
- int tempHsacoFD = -1;
SmallString<128> tempHsacoFilename;
- if (llvm::sys::fs::createTemporaryFile("kernel", "hsaco", tempHsacoFD,
+ if (llvm::sys::fs::createTemporaryFile("kernel", "hsaco",
tempHsacoFilename)) {
emitError(loc, "temporary file for HSA code object creation error");
return {};
@@ -423,13 +422,14 @@ SerializeToHsacoPass::createHsaco(const SmallVectorImpl<char> &isaBinary) {
}
// Load the HSA code object.
- auto hsacoFile = openInputFile(tempHsacoFilename);
+ auto hsacoFile =
+ llvm::MemoryBuffer::getFile(tempHsacoFilename, /*IsText=*/false);
if (!hsacoFile) {
emitError(loc, "read HSA code object from temp file error");
return {};
}
- StringRef buffer = hsacoFile->getBuffer();
+ StringRef buffer = (*hsacoFile)->getBuffer();
return std::make_unique<std::vector<char>>(buffer.begin(), buffer.end());
}
diff --git a/mlir/lib/Target/LLVM/ROCDL/Target.cpp b/mlir/lib/Target/LLVM/ROCDL/Target.cpp
index 611d08fe3e79e56..23e9a4a52b43530 100644
--- a/mlir/lib/Target/LLVM/ROCDL/Target.cpp
+++ b/mlir/lib/Target/LLVM/ROCDL/Target.cpp
@@ -377,9 +377,8 @@ AMDGPUSerializer::compileToBinary(const std::string &serializedISA) {
}
// Create a temp file for HSA code object.
- int tempHsacoFD = -1;
SmallString<128> tempHsacoFilename;
- if (llvm::sys::fs::createTemporaryFile("kernel", "hsaco", tempHsacoFD,
+ if (llvm::sys::fs::createTemporaryFile("kernel", "hsaco",
tempHsacoFilename)) {
getOperation().emitError()
<< "Failed to create a temporary file for the HSA code object.";
@@ -398,14 +397,15 @@ AMDGPUSerializer::compileToBinary(const std::string &serializedISA) {
}
// Load the HSA code object.
- auto hsacoFile = openInputFile(tempHsacoFilename);
+ auto hsacoFile =
+ llvm::MemoryBuffer::getFile(tempHsacoFilename, /*IsText=*/false);
if (!hsacoFile) {
getOperation().emitError()
<< "Failed to read the HSA code object from the temp file.";
return std::nullopt;
}
- StringRef buffer = hsacoFile->getBuffer();
+ StringRef buffer = (*hsacoFile)->getBuffer();
return SmallVector<char, 0>(buffer.begin(), buffer.end());
}
More information about the Mlir-commits
mailing list