================
@@ -82,20 +83,81 @@ struct LLVMRemarkSetupFormatError
LLVMRemarkSetupFormatError>::LLVMRemarkSetupErrorInfo;
};
-/// Setup optimization remarks that output to a file.
-LLVM_ABI Expected<std::unique_ptr<ToolOutputFile>>
setupLLVMOptimizationRemarks(
+/// RAII handle that manages the lifetime of the ToolOutputFile used to output
+/// remarks. On destruction (or when calling releaseFile()), this handle
ensures
+/// that the optimization remarks are finalized and the RemarkStreamer is
+/// correctly deregistered from the LLVMContext.
+class LLVMRemarkFileHandle final {
+ struct Finalizer {
+ LLVMContext *Context;
+
+ Finalizer(LLVMContext *Ctx) : Context(Ctx) {}
+
+ Finalizer(const Finalizer &) = delete;
+ Finalizer &operator=(const Finalizer &) = delete;
+
+ Finalizer(Finalizer &&Other) : Context(Other.Context) {
+ Other.Context = nullptr;
+ }
+
+ Finalizer &operator=(Finalizer &&Other) {
+ std::swap(Context, Other.Context);
+ return *this;
+ }
+
+ ~Finalizer() { finalize(); }
+
+ LLVM_ABI void finalize();
+ };
+
+ std::unique_ptr<ToolOutputFile> OutputFile;
+ Finalizer Finalize;
+
+public:
+ LLVMRemarkFileHandle() : OutputFile(nullptr), Finalize(nullptr) {}
+
+ LLVMRemarkFileHandle(std::unique_ptr<ToolOutputFile> OutputFile,
+ LLVMContext &Ctx)
+ : OutputFile(std::move(OutputFile)), Finalize(&Ctx) {}
+
+ ToolOutputFile *get() { return OutputFile.get(); }
+ explicit operator bool() { return bool(OutputFile); }
+
+ /// Finalize remark emission and release the underlying ToolOutputFile.
+ std::unique_ptr<ToolOutputFile> releaseFile() {
+ finalize();
+ return std::move(OutputFile);
+ }
+
+ void finalize() { Finalize.finalize(); }
+
+ ToolOutputFile &operator*() { return *OutputFile; }
+ ToolOutputFile *operator->() { return &*OutputFile; }
+};
+
+/// Setup optimization remarks that output to a file. The LLVMRemarkFileHandle
----------------
fhahn wrote:
nit
```suggestion
/// Set up optimization remarks that output to a file. The LLVMRemarkFileHandle
```
https://github.com/llvm/llvm-project/pull/156715
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits