From 7265688e0922a197a4be9095f6a727aa4b5cb2c1 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Tue, 18 Jan 2022 06:23:31 +0000 Subject: [PATCH] Use more references in MLIR Diagnostic handling (NFC) This saves some copies of non-trivial objects, flagged by Coverity. Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D117525 --- mlir/include/mlir/IR/Diagnostics.h | 5 +++-- mlir/lib/IR/Diagnostics.cpp | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mlir/include/mlir/IR/Diagnostics.h b/mlir/include/mlir/IR/Diagnostics.h index 8ccfe49..b259e51 100644 --- a/mlir/include/mlir/IR/Diagnostics.h +++ b/mlir/include/mlir/IR/Diagnostics.h @@ -431,8 +431,9 @@ public: } /// Emit a diagnostic using the registered issue handler if present, or with - /// the default behavior if not. - void emit(Diagnostic diag); + /// the default behavior if not. The diagnostic instance is consumed in the + /// process. + void emit(Diagnostic &&diag); private: friend class MLIRContextImpl; diff --git a/mlir/lib/IR/Diagnostics.cpp b/mlir/lib/IR/Diagnostics.cpp index d29feac..e4d58c6 100644 --- a/mlir/lib/IR/Diagnostics.cpp +++ b/mlir/lib/IR/Diagnostics.cpp @@ -209,7 +209,7 @@ namespace detail { struct DiagnosticEngineImpl { /// Emit a diagnostic using the registered issue handle if present, or with /// the default behavior if not. - void emit(Diagnostic diag); + void emit(Diagnostic &&diag); /// A mutex to ensure that diagnostics emission is thread-safe. llvm::sys::SmartMutex mutex; @@ -228,7 +228,7 @@ struct DiagnosticEngineImpl { /// Emit a diagnostic using the registered issue handle if present, or with /// the default behavior if not. -void DiagnosticEngineImpl::emit(Diagnostic diag) { +void DiagnosticEngineImpl::emit(Diagnostic &&diag) { llvm::sys::SmartScopedLock lock(mutex); // Try to process the given diagnostic on one of the registered handlers. @@ -277,7 +277,7 @@ void DiagnosticEngine::eraseHandler(HandlerID handlerID) { /// Emit a diagnostic using the registered issue handler if present, or with /// the default behavior if not. -void DiagnosticEngine::emit(Diagnostic diag) { +void DiagnosticEngine::emit(Diagnostic &&diag) { assert(diag.getSeverity() != DiagnosticSeverity::Note && "notes should not be emitted directly"); impl->emit(std::move(diag)); @@ -869,13 +869,13 @@ struct ParallelDiagnosticHandlerImpl : public llvm::PrettyStackTraceEntry { return; // Emit the diagnostics back to the context. - emitDiagnostics([&](Diagnostic diag) { + emitDiagnostics([&](Diagnostic &diag) { return context->getDiagEngine().emit(std::move(diag)); }); } /// Utility method to emit any held diagnostics. - void emitDiagnostics(llvm::function_ref emitFn) const { + void emitDiagnostics(llvm::function_ref emitFn) const { // Stable sort all of the diagnostics that were emitted. This creates a // deterministic ordering for the diagnostics based upon which order id they // were emitted for. @@ -883,7 +883,7 @@ struct ParallelDiagnosticHandlerImpl : public llvm::PrettyStackTraceEntry { // Emit each diagnostic to the context again. for (ThreadDiagnostic &diag : diagnostics) - emitFn(std::move(diag.diag)); + emitFn(diag.diag); } /// Set the order id for the current thread. -- 2.7.4