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