1//===- UniformityAnalysis.h ---------------------*- 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//
9/// \file
10/// \brief LLVM IR instance of the generic uniformity analysis
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_ANALYSIS_UNIFORMITYANALYSIS_H
15#define LLVM_ANALYSIS_UNIFORMITYANALYSIS_H
16
17#include "llvm/ADT/GenericUniformityInfo.h"
18#include "llvm/Analysis/CycleAnalysis.h"
19
20namespace llvm {
21
22extern template class GenericUniformityInfo<SSAContext>;
23using UniformityInfo = GenericUniformityInfo<SSAContext>;
24
25/// Analysis pass which computes \ref UniformityInfo.
26class UniformityInfoAnalysis
27 : public AnalysisInfoMixin<UniformityInfoAnalysis> {
28 friend AnalysisInfoMixin<UniformityInfoAnalysis>;
29 static AnalysisKey Key;
30
31public:
32 /// Provide the result typedef for this analysis pass.
33 using Result = UniformityInfo;
34
35 /// Run the analysis pass over a function and produce a dominator tree.
36 UniformityInfo run(Function &F, FunctionAnalysisManager &);
37
38 // TODO: verify analysis
39};
40
41/// Printer pass for the \c UniformityInfo.
42class UniformityInfoPrinterPass
43 : public PassInfoMixin<UniformityInfoPrinterPass> {
44 raw_ostream &OS;
45
46public:
47 explicit UniformityInfoPrinterPass(raw_ostream &OS);
48
49 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
50
51 static bool isRequired() { return true; }
52};
53
54/// Legacy analysis pass which computes a \ref CycleInfo.
55class UniformityInfoWrapperPass : public FunctionPass {
56 Function *m_function = nullptr;
57 UniformityInfo m_uniformityInfo;
58
59public:
60 static char ID;
61
62 UniformityInfoWrapperPass();
63
64 UniformityInfo &getUniformityInfo() { return m_uniformityInfo; }
65 const UniformityInfo &getUniformityInfo() const { return m_uniformityInfo; }
66
67 bool runOnFunction(Function &F) override;
68 void getAnalysisUsage(AnalysisUsage &AU) const override;
69 void releaseMemory() override;
70 void print(raw_ostream &OS, const Module *M = nullptr) const override;
71
72 // TODO: verify analysis
73};
74
75} // namespace llvm
76
77#endif // LLVM_ANALYSIS_UNIFORMITYANALYSIS_H
78

source code of llvm/include/llvm/Analysis/UniformityAnalysis.h