MLIR 22.0.0git
LoopAnalysis.cpp File Reference
#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h"
#include "mlir/Analysis/SliceAnalysis.h"
#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h"
#include "mlir/Dialect/Affine/Analysis/AffineStructures.h"
#include "mlir/Dialect/Affine/Analysis/NestedMatcher.h"
#include "mlir/Dialect/Affine/Analysis/Utils.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/DebugLog.h"
#include <numeric>
#include <optional>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "affine-loop-analysis"

Typedefs

using VectorizableOpFun = std::function<bool(AffineForOp, Operation &)>

Functions

static bool isAccessIndexInvariant (Value iv, Value index)
 Given an affine.for iv and an access index of type index, returns true if index is independent of iv and false otherwise.
template<typename LoadOrStoreOp>
static bool isVectorElement (LoadOrStoreOp memoryOp)
static bool isVectorizableLoopBodyWithOpCond (AffineForOp loop, const VectorizableOpFun &isVectorizableOp, NestedPattern &vectorTransferMatcher)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "affine-loop-analysis"

Definition at line 28 of file LoopAnalysis.cpp.

Typedef Documentation

◆ VectorizableOpFun

using VectorizableOpFun = std::function<bool(AffineForOp, Operation &)>

Definition at line 377 of file LoopAnalysis.cpp.

Function Documentation

◆ isAccessIndexInvariant()

bool isAccessIndexInvariant ( Value iv,
Value index )
static

Given an affine.for iv and an access index of type index, returns true if index is independent of iv and false otherwise.

Prerequisites: iv and index of the proper type;

Definition at line 282 of file LoopAnalysis.cpp.

References mlir::affine::AffineValueMap::composeSimplifyAndCanonicalize(), mlir::Value::getContext(), mlir::AffineMap::getMultiDimIdentityMap(), mlir::affine::isAffineForInductionVar(), and mlir::affine::AffineValueMap::isFunctionOf().

Referenced by mlir::affine::getInvariantAccesses(), and mlir::affine::isContiguousAccess().

◆ isVectorElement()

template<typename LoadOrStoreOp>
bool isVectorElement ( LoadOrStoreOp memoryOp)
static

Definition at line 372 of file LoopAnalysis.cpp.

Referenced by isVectorizableLoopBodyWithOpCond().

◆ isVectorizableLoopBodyWithOpCond()