MLIR 24.0.0git
AffineAnalysis.h File Reference
#include "mlir/Analysis/Presburger/IntegerRelation.h"
#include "mlir/Dialect/Arith/IR/ArithAttributes.h"
#include "mlir/IR/Value.h"
#include "llvm/ADT/SmallVector.h"
#include <optional>

Go to the source code of this file.

Classes

struct  mlir::affine::LoopReduction
 A description of a (parallelizable) reduction in an affine loop. More...
struct  mlir::affine::MemRefAccess
 Encapsulates a memref load or store access information. More...
struct  mlir::affine::DependenceComponent
struct  mlir::affine::DependenceResult
 Checks whether two accesses to the same memref access the same element. More...

Namespaces

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

Functions

void mlir::affine::getSupportedReductions (AffineForOp forOp, SmallVectorImpl< LoopReduction > &supportedReductions)
 Populate supportedReductions with descriptors of the supported reductions.
bool mlir::affine::isLoopMemoryParallel (AffineForOp forOp)
 Returns true if ‘forOp’ is a parallel loop.
void mlir::affine::getReachableAffineApplyOps (ArrayRef< Value > operands, SmallVectorImpl< Operation * > &affineApplyOps)
 Returns in affineApplyOps, the sequence of those AffineApplyOp Operations that are reachable via a search starting from operands and ending at those operands that are not the result of an AffineApplyOp.
LogicalResult mlir::affine::getIndexSet (MutableArrayRef< Operation * > ops, FlatAffineValueConstraints *domain)
 Builds a system of constraints with dimensional variables corresponding to the loop IVs of the forOps and AffineIfOp's operands appearing in that order.
DependenceResult mlir::affine::checkMemrefAccessDependence (const MemRefAccess &srcAccess, const MemRefAccess &dstAccess, unsigned loopDepth, FlatAffineValueConstraints *dependenceConstraints=nullptr, SmallVector< DependenceComponent, 2 > *dependenceComponents=nullptr, bool allowRAR=false)
LogicalResult mlir::affine::getAccessRelation (const AffineValueMap &accessValueMap, const FlatAffineValueConstraints &domain, presburger::IntegerRelation &rel)
 Builds in rel the access relation of an access that reads or writes accessValueMap over the iteration domain, relating the iterations of the domain to the elements they touch.
DependenceResult mlir::affine::checkAccessDependence (presburger::IntegerRelation srcRel, presburger::IntegerRelation dstRel, unsigned loopDepth, FlatAffineValueConstraints *dependenceConstraints=nullptr, SmallVector< DependenceComponent, 2 > *dependenceComponents=nullptr)
 Checks whether the accesses two relations describe touch the same element, i.e.
bool mlir::affine::hasDependence (DependenceResult result)
 Utility function that returns true if the provided DependenceResult corresponds to a dependence result.
bool mlir::affine::noDependence (DependenceResult result)
 Returns true if the provided DependenceResult corresponds to the absence of a dependence.
void mlir::affine::getDependenceComponents (AffineForOp forOp, unsigned maxLoopDepth, std::vector< SmallVector< DependenceComponent, 2 > > *depCompsVec)
 Returns in 'depCompsVec', dependence components for dependences between all load and store ops in loop nest rooted at 'forOp', at loop depths in range [1, maxLoopDepth].