MLIR  19.0.0git
Namespaces | Macros | Functions
LoopTiling.cpp File Reference
#include "mlir/Dialect/Affine/Passes.h"
#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h"
#include "mlir/Dialect/Affine/Analysis/AffineStructures.h"
#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h"
#include "mlir/Dialect/Affine/Analysis/Utils.h"
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
#include "mlir/Dialect/Affine/LoopUtils.h"
#include "mlir/Dialect/Affine/Utils.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/IRMapping.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include <optional>
#include "mlir/Dialect/Affine/Passes.h.inc"

Go to the source code of this file.

Namespaces

 mlir
 Include the generated interface declarations.
 
 mlir::affine
 

Macros

#define GEN_PASS_DEF_AFFINELOOPTILING
 
#define DEBUG_TYPE   "affine-loop-tile"
 

Functions

static void adjustToDivisorsOfTripCounts (ArrayRef< AffineForOp > band, SmallVectorImpl< unsigned > *tileSizes)
 Reduces each tile size to the largest divisor of the corresponding trip count (if the trip count is known). More...
 
static bool checkTilingLegality (MutableArrayRef< AffineForOp > origLoops)
 Checks whether hyper-rectangular loop tiling of the nest represented by origLoops is valid. More...
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "affine-loop-tile"

Definition at line 40 of file LoopTiling.cpp.

◆ GEN_PASS_DEF_AFFINELOOPTILING

#define GEN_PASS_DEF_AFFINELOOPTILING

Definition at line 32 of file LoopTiling.cpp.

Function Documentation

◆ adjustToDivisorsOfTripCounts()

static void adjustToDivisorsOfTripCounts ( ArrayRef< AffineForOp >  band,
SmallVectorImpl< unsigned > *  tileSizes 
)
static

Reduces each tile size to the largest divisor of the corresponding trip count (if the trip count is known).

Definition at line 78 of file LoopTiling.cpp.

References mlir::affine::getConstantTripCount().

◆ checkTilingLegality()

static bool checkTilingLegality ( MutableArrayRef< AffineForOp >  origLoops)
static

Checks whether hyper-rectangular loop tiling of the nest represented by origLoops is valid.

The validity condition is from Irigoin and Triolet, which states that two tiles cannot depend on each other. We simplify such condition to just checking whether there is any negative dependence direction, since we have the prior knowledge that the tiling results will be hyper-rectangles, which are scheduled in the lexicographically increasing order on the vector of loop indices. This function will return failure when any dependence component is negative along any of origLoops.

Definition at line 104 of file LoopTiling.cpp.