Back to home page

EIC code displayed by LXR

 
 

    


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

0001 //===- MachineUniformityAnalysis.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 Machine IR instance of the generic uniformity analysis
0011 //
0012 //===----------------------------------------------------------------------===//
0013 
0014 #ifndef LLVM_CODEGEN_MACHINEUNIFORMITYANALYSIS_H
0015 #define LLVM_CODEGEN_MACHINEUNIFORMITYANALYSIS_H
0016 
0017 #include "llvm/ADT/GenericUniformityInfo.h"
0018 #include "llvm/CodeGen/MachineCycleAnalysis.h"
0019 #include "llvm/CodeGen/MachineDominators.h"
0020 #include "llvm/CodeGen/MachineSSAContext.h"
0021 
0022 namespace llvm {
0023 
0024 extern template class GenericUniformityInfo<MachineSSAContext>;
0025 using MachineUniformityInfo = GenericUniformityInfo<MachineSSAContext>;
0026 
0027 /// \brief Compute uniformity information for a Machine IR function.
0028 ///
0029 /// If \p HasBranchDivergence is false, produces a dummy result which assumes
0030 /// everything is uniform.
0031 MachineUniformityInfo computeMachineUniformityInfo(
0032     MachineFunction &F, const MachineCycleInfo &cycleInfo,
0033     const MachineDominatorTree &domTree, bool HasBranchDivergence);
0034 
0035 /// Legacy analysis pass which computes a \ref MachineUniformityInfo.
0036 class MachineUniformityAnalysisPass : public MachineFunctionPass {
0037   MachineUniformityInfo UI;
0038 
0039 public:
0040   static char ID;
0041 
0042   MachineUniformityAnalysisPass();
0043 
0044   MachineUniformityInfo &getUniformityInfo() { return UI; }
0045   const MachineUniformityInfo &getUniformityInfo() const { return UI; }
0046 
0047   bool runOnMachineFunction(MachineFunction &F) override;
0048   void getAnalysisUsage(AnalysisUsage &AU) const override;
0049   void print(raw_ostream &OS, const Module *M = nullptr) const override;
0050 
0051   // TODO: verify analysis
0052 };
0053 
0054 } // namespace llvm
0055 
0056 #endif // LLVM_CODEGEN_MACHINEUNIFORMITYANALYSIS_H