blob: 4c9d717671d365c7adf5d4b8ee1b8fff9ee77c1a [file] [log] [blame]
//===- BufferAliasAnalysis.h - Buffer alias analysis for 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
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_ANALYSIS_BUFFERALIASANALYSIS_H
#define MLIR_ANALYSIS_BUFFERALIASANALYSIS_H
#include "mlir/IR/Operation.h"
#include "llvm/ADT/SmallPtrSet.h"
namespace mlir {
/// A straight-forward alias analysis which ensures that all aliases of all
/// values will be determined. This is a requirement for the BufferPlacement
/// class since you need to determine safe positions to place alloc and
/// deallocs.
class BufferAliasAnalysis {
public:
using ValueSetT = SmallPtrSet<Value, 16>;
using ValueMapT = llvm::DenseMap<Value, ValueSetT>;
public:
/// Constructs a new alias analysis using the op provided.
BufferAliasAnalysis(Operation *op);
/// Find all immediate aliases this value could potentially have.
ValueMapT::const_iterator find(Value value) const {
return aliases.find(value);
}
/// Returns the begin iterator to iterate over all aliases.
ValueMapT::const_iterator begin() const { return aliases.begin(); }
/// Returns the end iterator that can be used in combination with find.
ValueMapT::const_iterator end() const { return aliases.end(); }
/// Find all immediate and indirect aliases this value could potentially
/// have. Note that the resulting set will also contain the value provided as
/// it is an alias of itself.
ValueSetT resolve(Value value) const;
/// Removes the given values from all alias sets.
void remove(const SmallPtrSetImpl<Value> &aliasValues);
private:
/// This function constructs a mapping from values to its immediate aliases.
void build(Operation *op);
/// Maps values to all immediate aliases this value can have.
ValueMapT aliases;
};
} // namespace mlir
#endif // MLIR_ANALYSIS_BUFFERALIASANALYSIS_H