//===- AliasAnalysis.h - Alias Analysis in MLIR -----------------*- 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 // //===----------------------------------------------------------------------===// // // This header file defines utilities and analyses for performing alias queries // and related memory queries in MLIR. // //===----------------------------------------------------------------------===// #ifndef MLIR_ANALYSIS_ALIASANALYSIS_H_ #define MLIR_ANALYSIS_ALIASANALYSIS_H_ #include "mlir/IR/Operation.h" namespace mlir { //===----------------------------------------------------------------------===// // AliasResult //===----------------------------------------------------------------------===// /// The possible results of an alias query. class AliasResult { … }; inline raw_ostream &operator<<(raw_ostream &os, const AliasResult &result) { … } //===----------------------------------------------------------------------===// // ModRefResult //===----------------------------------------------------------------------===// /// The possible results of whether a memory access modifies or references /// a memory location. The possible results are: no access at all, a /// modification, a reference, or both a modification and a reference. class [[nodiscard]] ModRefResult { … }; inline raw_ostream &operator<<(raw_ostream &os, const ModRefResult &result) { … } //===----------------------------------------------------------------------===// // AliasAnalysisTraits //===----------------------------------------------------------------------===// namespace detail { /// This class contains various internal trait classes used by the main /// AliasAnalysis class below. struct AliasAnalysisTraits { … }; } // namespace detail //===----------------------------------------------------------------------===// // AliasAnalysis //===----------------------------------------------------------------------===// /// This class represents the main alias analysis interface in MLIR. It /// functions as an aggregate of various different alias analysis /// implementations. This aggregation allows for utilizing the strengths of /// different alias analysis implementations that either target or have access /// to different aliasing information. This is especially important for MLIR /// given the scope of different types of memory models and aliasing behaviors. /// For users of this analysis that want to perform aliasing queries, see the /// `Alias Queries` section below for the available methods. For users of this /// analysis that want to add a new alias analysis implementation to the /// aggregate, see the `Alias Implementations` section below. class AliasAnalysis { … }; } // namespace mlir #endif // MLIR_ANALYSIS_ALIASANALYSIS_H_