//===--- polly/DependenceInfo.h - Polyhedral dependency analysis *- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Calculate the data dependency relations for a Scop using ISL. // // The integer set library (ISL) from Sven has an integrated dependency analysis // to calculate data dependences. This pass takes advantage of this and // calculates those dependences of a Scop. // // The dependences in this pass are exact in terms that for a specific read // statement instance only the last write statement instance is returned. In // case of may-writes, a set of possible write instances is returned. This // analysis will never produce redundant dependences. // //===----------------------------------------------------------------------===// #ifndef POLLY_DEPENDENCE_INFO_H #define POLLY_DEPENDENCE_INFO_H #include "polly/ScopPass.h" #include "isl/ctx.h" #include "isl/isl-noexceptions.h" namespace polly { /// The accumulated dependence information for a SCoP. /// /// The Dependences struct holds all dependence information we collect and /// compute for one SCoP. It also offers an interface that allows users to /// query only specific parts. class Dependences final { … }; struct DependenceAnalysis final : public AnalysisInfoMixin<DependenceAnalysis> { … }; struct DependenceInfoPrinterPass final : PassInfoMixin<DependenceInfoPrinterPass> { … }; class DependenceInfo final : public ScopPass { … }; llvm::Pass *createDependenceInfoPass(); llvm::Pass *createDependenceInfoPrinterLegacyPass(llvm::raw_ostream &OS); /// Construct a new DependenceInfoWrapper pass. class DependenceInfoWrapperPass final : public FunctionPass { … }; llvm::Pass *createDependenceInfoWrapperPassPass(); llvm::Pass * createDependenceInfoPrinterLegacyFunctionPass(llvm::raw_ostream &OS); } // namespace polly namespace llvm { void initializeDependenceInfoPass(llvm::PassRegistry &); void initializeDependenceInfoPrinterLegacyPassPass(llvm::PassRegistry &); void initializeDependenceInfoWrapperPassPass(llvm::PassRegistry &); void initializeDependenceInfoPrinterLegacyFunctionPassPass( llvm::PassRegistry &); } // namespace llvm #endif