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