//===- OptimizationRemarkEmitter.h - Optimization Diagnostic ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Optimization diagnostic interfaces. It's packaged as an analysis pass so // that by using this service passes become dependent on BFI as well. BFI is // used to compute the "hotness" of the diagnostic message. //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_OPTIMIZATIONREMARKEMITTER_H #define LLVM_ANALYSIS_OPTIMIZATIONREMARKEMITTER_H #include "llvm/Analysis/BlockFrequencyInfo.h" #include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/Function.h" #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" #include <optional> namespace llvm { /// The optimization diagnostic interface. /// /// It allows reporting when optimizations are performed and when they are not /// along with the reasons for it. Hotness information of the corresponding /// code region can be included in the remark if DiagnosticsHotnessRequested is /// enabled in the LLVM context. class OptimizationRemarkEmitter { … }; /// Add a small namespace to avoid name clashes with the classes used in /// the streaming interface. We want these to be short for better /// write/readability. namespace ore { NV; setIsVerbose; setExtraArgs; } /// OptimizationRemarkEmitter legacy analysis pass /// /// Note that this pass shouldn't generally be marked as preserved by other /// passes. It's holding onto BFI, so if the pass does not preserve BFI, BFI /// could be freed. class OptimizationRemarkEmitterWrapperPass : public FunctionPass { … }; class OptimizationRemarkEmitterAnalysis : public AnalysisInfoMixin<OptimizationRemarkEmitterAnalysis> { … }; } // namespace llvm #endif // LLVM_ANALYSIS_OPTIMIZATIONREMARKEMITTER_H