//===- LazyBlockFrequencyInfo.h - Lazy Block Frequency Analysis -*- 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 // //===----------------------------------------------------------------------===// // // This is an alternative analysis pass to BlockFrequencyInfoWrapperPass. The // difference is that with this pass the block frequencies are not computed when // the analysis pass is executed but rather when the BFI result is explicitly // requested by the analysis client. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_LAZYBLOCKFREQUENCYINFO_H #define LLVM_ANALYSIS_LAZYBLOCKFREQUENCYINFO_H #include "llvm/Analysis/BlockFrequencyInfo.h" #include "llvm/Analysis/LazyBranchProbabilityInfo.h" #include "llvm/Pass.h" namespace llvm { class Function; class LoopInfo; /// Wraps a BFI to allow lazy computation of the block frequencies. /// /// A pass that only conditionally uses BFI can uncondtionally require the /// analysis without paying for the overhead if BFI doesn't end up being used. template <typename FunctionT, typename BranchProbabilityInfoPassT, typename LoopInfoT, typename BlockFrequencyInfoT> class LazyBlockFrequencyInfo { … }; /// This is an alternative analysis pass to /// BlockFrequencyInfoWrapperPass. The difference is that with this pass the /// block frequencies are not computed when the analysis pass is executed but /// rather when the BFI result is explicitly requested by the analysis client. /// /// There are some additional requirements for any client pass that wants to use /// the analysis: /// /// 1. The pass needs to initialize dependent passes with: /// /// INITIALIZE_PASS_DEPENDENCY(LazyBFIPass) /// /// 2. Similarly, getAnalysisUsage should call: /// /// LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage(AU) /// /// 3. The computed BFI should be requested with /// getAnalysis<LazyBlockFrequencyInfoPass>().getBFI() before either LoopInfo /// or BPI could be invalidated for example by changing the CFG. /// /// Note that it is expected that we wouldn't need this functionality for the /// new PM since with the new PM, analyses are executed on demand. class LazyBlockFrequencyInfoPass : public FunctionPass { … }; /// Helper for client passes to initialize dependent passes for LBFI. void initializeLazyBFIPassPass(PassRegistry &Registry); } // namespace llvm #endif