summaryrefslogtreecommitdiffstats
path: root/llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h')
-rw-r--r--llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h b/llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h
index 4c3b0fb949b..aae1b2c1b0c 100644
--- a/llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h
+++ b/llvm/include/llvm/Analysis/OptimizationDiagnosticInfo.h
@@ -24,7 +24,6 @@
namespace llvm {
class DebugLoc;
-class LLVMContext;
class Loop;
class Pass;
class Twine;
@@ -71,6 +70,21 @@ public:
/// optimization record file.
void emit(DiagnosticInfoOptimizationBase &OptDiag);
+ /// \brief Take a lambda that returns a remark which will be emitted. Second
+ /// argument is only used to restrict this to functions.
+ template <typename T>
+ void emit(T RemarkBuilder, decltype(RemarkBuilder()) * = nullptr) {
+ // Avoid building the remark unless we know there are at least *some*
+ // remarks enabled. We can't currently check whether remarks are requested
+ // for the calling pass since that requires actually building the remark.
+
+ if (F->getContext().getDiagnosticsOutputFile() ||
+ F->getContext().getDiagHandlerPtr()->isAnyRemarkEnabled()) {
+ auto R = RemarkBuilder();
+ emit(R);
+ }
+ }
+
/// \brief Whether we allow for extra compile-time budget to perform more
/// analysis to produce fewer false positives.
///
OpenPOWER on IntegriCloud