xref: /freebsd/contrib/llvm-project/llvm/include/llvm/Analysis/CycleAnalysis.h (revision 1db9f3b21e39176dd5b67cf8ac378633b172463e)
1 //===- CycleAnalysis.h - Cycle Info for LLVM IR -----------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 /// \file
9 ///
10 /// This file declares an analysis pass that computes CycleInfo for
11 /// LLVM IR, specialized from GenericCycleInfo.
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_ANALYSIS_CYCLEANALYSIS_H
16 #define LLVM_ANALYSIS_CYCLEANALYSIS_H
17 
18 #include "llvm/IR/CycleInfo.h"
19 #include "llvm/IR/PassManager.h"
20 #include "llvm/IR/SSAContext.h"
21 #include "llvm/Pass.h"
22 
23 namespace llvm {
24 
25 /// Legacy analysis pass which computes a \ref CycleInfo.
26 class CycleInfoWrapperPass : public FunctionPass {
27   Function *F = nullptr;
28   CycleInfo CI;
29 
30 public:
31   static char ID;
32 
33   CycleInfoWrapperPass();
34 
35   CycleInfo &getResult() { return CI; }
36   const CycleInfo &getResult() const { return CI; }
37 
38   bool runOnFunction(Function &F) override;
39   void getAnalysisUsage(AnalysisUsage &AU) const override;
40   void releaseMemory() override;
41   void print(raw_ostream &OS, const Module *M = nullptr) const override;
42 
43   // TODO: verify analysis?
44 };
45 
46 /// Analysis pass which computes a \ref CycleInfo.
47 class CycleAnalysis : public AnalysisInfoMixin<CycleAnalysis> {
48   friend AnalysisInfoMixin<CycleAnalysis>;
49   static AnalysisKey Key;
50 
51 public:
52   /// Provide the result typedef for this analysis pass.
53   using Result = CycleInfo;
54 
55   using LegacyWrapper = CycleInfoWrapperPass;
56 
57   /// Run the analysis pass over a function and produce a dominator tree.
58   CycleInfo run(Function &F, FunctionAnalysisManager &);
59 
60   // TODO: verify analysis?
61 };
62 
63 /// Printer pass for the \c DominatorTree.
64 class CycleInfoPrinterPass : public PassInfoMixin<CycleInfoPrinterPass> {
65   raw_ostream &OS;
66 
67 public:
68   explicit CycleInfoPrinterPass(raw_ostream &OS);
69 
70   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
71 
72   static bool isRequired() { return true; }
73 };
74 
75 } // end namespace llvm
76 
77 #endif // LLVM_ANALYSIS_CYCLEANALYSIS_H
78