MLIR 22.0.0git
LoopAnalysis.h File Reference
#include "mlir/Support/LLVM.h"
#include "llvm/ADT/ArrayRef.h"
#include <optional>

Go to the source code of this file.

Namespaces

namespace  mlir
 Include the generated interface declarations.
namespace  mlir::affine

Typedefs

using mlir::affine::VectorizableLoopFun = std::function<bool(AffineForOp)>

Functions

void mlir::affine::getTripCountMapAndOperands (AffineForOp forOp, AffineMap *map, SmallVectorImpl< Value > *operands)
 Returns the trip count of the loop as an affine map with its corresponding operands if the latter is expressible as an affine expression, and nullptr otherwise.
std::optional< uint64_t > mlir::affine::getConstantTripCount (AffineForOp forOp)
 Returns the trip count of the loop if it's a constant, std::nullopt otherwise.
uint64_t mlir::affine::getLargestDivisorOfTripCount (AffineForOp forOp)
 Returns the greatest known integral divisor of the trip count.
template<typename LoadOrStoreOp>
bool mlir::affine::isInvariantAccess (LoadOrStoreOp memOp, AffineForOp forOp)
 Checks if an affine read or write operation depends on forOp's IV, i.e., if the memory access is invariant on forOp.
DenseSet< Value, DenseMapInfo< Value > > mlir::affine::getInvariantAccesses (Value iv, ArrayRef< Value > indices)
 Given an induction variable iv of type AffineForOp and indices of type IndexType, returns the set of indices that are independent of iv.
template<typename LoadOrStoreOp>
bool mlir::affine::isContiguousAccess (Value iv, LoadOrStoreOp memoryOp, int *memRefDim)
 Given:
bool mlir::affine::isVectorizableLoopBody (AffineForOp loop, NestedPattern &vectorTransferMatcher)
 Checks whether the loop is structurally vectorizable; i.e.:
bool mlir::affine::isVectorizableLoopBody (AffineForOp loop, int *memRefDim, NestedPattern &vectorTransferMatcher)
 Checks whether the loop is structurally vectorizable and that all the LoadOp and StoreOp matched have access indexing functions that are either:
bool mlir::affine::isOpwiseShiftValid (AffineForOp forOp, ArrayRef< uint64_t > shifts)
 Checks where SSA dominance would be violated if a for op's body operations are shifted by the specified shifts.
bool mlir::affine::isTilingValid (ArrayRef< AffineForOp > loops)
 Checks whether hyper-rectangular loop tiling of the nest represented by loops is valid.
bool mlir::affine::hasCyclicDependence (AffineForOp root)
 Returns true if the affine nest rooted at root has a cyclic dependence among its affine memory accesses.