|
MLIR 22.0.0git
|
#include "mlir/Dialect/Affine/LoopFusionUtils.h"#include "mlir/Analysis/SliceAnalysis.h"#include "mlir/Analysis/TopologicalSortUtils.h"#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.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/LoopUtils.h"#include "mlir/IR/IRMapping.h"#include "mlir/IR/Operation.h"#include "mlir/IR/PatternMatch.h"#include "llvm/Support/Debug.h"#include "llvm/Support/DebugLog.h"#include "llvm/Support/raw_ostream.h"#include <optional>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "affine-fusion-utils" |
Functions | |
| static void | getLoadAndStoreMemRefAccesses (Operation *opA, DenseMap< Value, bool > &values) |
| static bool | isDependentLoadOrStoreOp (Operation *op, DenseMap< Value, bool > &values) |
| Returns true if 'op' is a load or store operation which access a memref accessed 'values' and at least one of the access is a store operation. | |
| static Operation * | getFirstDependentOpInRange (Operation *opA, Operation *opB) |
| static Operation * | getLastDependentOpInRange (Operation *opA, Operation *opB) |
| static Operation * | getFusedLoopNestInsertionPoint (AffineForOp srcForOp, AffineForOp dstForOp) |
| static bool | gatherLoadsAndStores (AffineForOp forOp, SmallVectorImpl< Operation * > &loadAndStoreOps) |
| static unsigned | getMaxLoopDepth (ArrayRef< Operation * > srcOps, ArrayRef< Operation * > dstOps) |
| Returns the maximum loop depth at which we could fuse producer loop 'srcForOp' into consumer loop 'dstForOp' without violating data dependences. | |
| static LogicalResult | promoteSingleIterReductionLoop (AffineForOp forOp, bool siblingFusionUser) |
| Patch the loop body of a forOp that is a single iteration reduction loop into its containing block. | |
| static int64_t | getComputeCostHelper (Operation *forOp, LoopNestStats &stats, llvm::SmallDenseMap< Operation *, uint64_t, 8 > *tripCountOverrideMap, DenseMap< Operation *, int64_t > *computeCostMap) |
| #define DEBUG_TYPE "affine-fusion-utils" |
Definition at line 29 of file LoopFusionUtils.cpp.
|
static |
Definition at line 171 of file LoopFusionUtils.cpp.
Referenced by mlir::affine::canFuseLoops().
|
static |
Definition at line 527 of file LoopFusionUtils.cpp.
References getComputeCostHelper(), mlir::affine::LoopNestStats::loopMap, mlir::affine::LoopNestStats::opCountMap, and mlir::affine::LoopNestStats::tripCountMap.
Referenced by mlir::affine::getComputeCost(), getComputeCostHelper(), and mlir::affine::getFusionComputeCost().
Definition at line 62 of file LoopFusionUtils.cpp.
References getLoadAndStoreMemRefAccesses(), isDependentLoadOrStoreOp(), and mlir::Operation::walk().
Referenced by getFusedLoopNestInsertionPoint().
|
static |
Definition at line 133 of file LoopFusionUtils.cpp.
References getFirstDependentOpInRange(), getLastDependentOpInRange(), and mlir::Operation::isBeforeInBlock().
Referenced by mlir::affine::canFuseLoops().
Definition at line 88 of file LoopFusionUtils.cpp.
References mlir::WalkResult::advance(), mlir::affine::getAffineForIVs(), getLoadAndStoreMemRefAccesses(), mlir::Operation::getResults(), mlir::Operation::getUsers(), mlir::WalkResult::interrupt(), isDependentLoadOrStoreOp(), and mlir::Operation::walk().
Referenced by getFusedLoopNestInsertionPoint().
Definition at line 36 of file LoopFusionUtils.cpp.
References mlir::Operation::walk().
Referenced by getFirstDependentOpInRange(), and getLastDependentOpInRange().
Returns the maximum loop depth at which we could fuse producer loop 'srcForOp' into consumer loop 'dstForOp' without violating data dependences.
Definition at line 187 of file LoopFusionUtils.cpp.
References mlir::affine::checkMemrefAccessDependence(), mlir::affine::gatherProducerConsumerMemrefs(), mlir::affine::getInnermostCommonLoopDepth(), mlir::affine::getNumCommonSurroundingLoops(), mlir::affine::hasDependence(), and result.
Referenced by mlir::affine::canFuseLoops().
Returns true if 'op' is a load or store operation which access a memref accessed 'values' and at least one of the access is a store operation.
Returns false otherwise.
Definition at line 51 of file LoopFusionUtils.cpp.
Referenced by getFirstDependentOpInRange(), and getLastDependentOpInRange().
|
static |
Patch the loop body of a forOp that is a single iteration reduction loop into its containing block.
Definition at line 357 of file LoopFusionUtils.cpp.
References b, mlir::affine::getConstantTripCount(), mlir::getForwardSlice(), success(), and mlir::topologicalSort().
Referenced by mlir::affine::fuseLoops().