Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:19

0001 //===- UniformityAnalysis.h ---------------------*- C++ -*-----------------===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 /// \file
0010 /// \brief LLVM IR instance of the generic uniformity analysis
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 /// Analysis pass which computes \ref UniformityInfo.
0028 class UniformityInfoAnalysis
0029     : public AnalysisInfoMixin<UniformityInfoAnalysis> {
0030   friend AnalysisInfoMixin<UniformityInfoAnalysis>;
0031   static AnalysisKey Key;
0032 
0033 public:
0034   /// Provide the result typedef for this analysis pass.
0035   using Result = UniformityInfo;
0036 
0037   /// Run the analysis pass over a function and produce a dominator tree.
0038   UniformityInfo run(Function &F, FunctionAnalysisManager &);
0039 
0040   // TODO: verify analysis
0041 };
0042 
0043 /// Printer pass for the \c UniformityInfo.
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 /// Legacy analysis pass which computes a \ref CycleInfo.
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   // TODO: verify analysis
0075 };
0076 
0077 } // namespace llvm
0078 
0079 #endif // LLVM_ANALYSIS_UNIFORMITYANALYSIS_H