File indexing completed on 2026-05-10 08:43:12
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef LLVM_ANALYSIS_CYCLEANALYSIS_H
0016 #define LLVM_ANALYSIS_CYCLEANALYSIS_H
0017
0018 #include "llvm/IR/CycleInfo.h"
0019 #include "llvm/IR/PassManager.h"
0020 #include "llvm/Pass.h"
0021
0022 namespace llvm {
0023
0024
0025 class CycleInfoWrapperPass : public FunctionPass {
0026 Function *F = nullptr;
0027 CycleInfo CI;
0028
0029 public:
0030 static char ID;
0031
0032 CycleInfoWrapperPass();
0033
0034 CycleInfo &getResult() { return CI; }
0035 const CycleInfo &getResult() const { return CI; }
0036
0037 bool runOnFunction(Function &F) override;
0038 void getAnalysisUsage(AnalysisUsage &AU) const override;
0039 void releaseMemory() override;
0040 void print(raw_ostream &OS, const Module *M = nullptr) const override;
0041
0042
0043 };
0044
0045
0046 class CycleAnalysis : public AnalysisInfoMixin<CycleAnalysis> {
0047 friend AnalysisInfoMixin<CycleAnalysis>;
0048 static AnalysisKey Key;
0049
0050 public:
0051
0052 using Result = CycleInfo;
0053
0054 using LegacyWrapper = CycleInfoWrapperPass;
0055
0056
0057 CycleInfo run(Function &F, FunctionAnalysisManager &);
0058
0059
0060 };
0061
0062 class CycleInfoPrinterPass : public PassInfoMixin<CycleInfoPrinterPass> {
0063 raw_ostream &OS;
0064
0065 public:
0066 explicit CycleInfoPrinterPass(raw_ostream &OS);
0067 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
0068 static bool isRequired() { return true; }
0069 };
0070
0071 struct CycleInfoVerifierPass : public PassInfoMixin<CycleInfoVerifierPass> {
0072 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
0073 static bool isRequired() { return true; }
0074 };
0075
0076 }
0077
0078 #endif