MLIR  22.0.0git
Macros | Typedefs | Functions | Variables
Utils.cpp File Reference
#include "mlir/Dialect/Affine/Analysis/Utils.h"
#include "mlir/Analysis/Presburger/PresburgerRelation.h"
#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h"
#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h"
#include "mlir/Dialect/Affine/IR/AffineOps.h"
#include "mlir/Dialect/Affine/IR/AffineValueMap.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/Utils/StaticValueUtils.h"
#include "mlir/IR/IntegerSet.h"
#include "llvm/ADT/SetVector.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   "analysis-utils"
 

Typedefs

using Node = MemRefDependenceGraph::Node
 

Functions

template<typename... EffectTys>
static void getEffectedValues (Operation *op, SmallVectorImpl< Value > &values)
 Returns the values that this op has a memref effect of type EffectTys on, not considering recursive effects. More...
 
static NodeaddNodeToMDG (Operation *nodeOp, MemRefDependenceGraph &mdg, DenseMap< Value, SetVector< unsigned >> &memrefAccesses)
 Add op to MDG creating a new node and adding its memory accesses (affine or non-affine to memrefAccesses (memref -> list of nodes with accesses) map. More...
 
static Value getMemRef (Operation *memOp)
 Returns the memref being read/written by a memref/affine load/store op. More...
 
static bool mayDependence (const Node &srcNode, const Node &dstNode, Value memref)
 Returns true if there may be a dependence on memref from srcNode's memory ops to dstNode's memory ops, while using the affine memory dependence analysis checks. More...
 
static void findInstPosition (Operation *op, Block *limitBlock, SmallVectorImpl< unsigned > *positions)
 
static OperationgetInstAtPosition (ArrayRef< unsigned > positions, unsigned level, Block *block)
 
static LogicalResult addMissingLoopIVBounds (SmallPtrSet< Value, 8 > &ivs, FlatAffineValueConstraints *cst)
 
static std::optional< uint64_t > getConstDifference (AffineMap lbMap, AffineMap ubMap)
 
static std::optional< int64_t > getMemoryFootprintBytes (Block &block, Block::iterator start, Block::iterator end, int memorySpace)
 
static void unpackOptionalValues (ArrayRef< std::optional< Value >> source, SmallVector< Value > &target)
 
static LogicalResult alignAndAddBound (FlatAffineValueConstraints &constraints, BoundType type, unsigned pos, AffineMap map, ValueRange operands)
 Bound an identifier pos in a given FlatAffineValueConstraints with constraints drawn from an affine map. More...
 
static AffineMap addConstToResults (AffineMap map, int64_t val)
 Add val to each result of map. More...
 

Variables

const char *const kSliceFusionBarrierAttrName = "slice_fusion_barrier"
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "analysis-utils"

Definition at line 30 of file Utils.cpp.

Typedef Documentation

◆ Node

Definition at line 38 of file Utils.cpp.

Function Documentation

◆ addConstToResults()

static AffineMap addConstToResults ( AffineMap  map,
int64_t  val 
)
static

◆ addMissingLoopIVBounds()

static LogicalResult addMissingLoopIVBounds ( SmallPtrSet< Value, 8 > &  ivs,
FlatAffineValueConstraints cst 
)
static

◆ addNodeToMDG()

static Node* addNodeToMDG ( Operation nodeOp,
MemRefDependenceGraph mdg,
DenseMap< Value, SetVector< unsigned >> &  memrefAccesses 
)
static

◆ alignAndAddBound()

static LogicalResult alignAndAddBound ( FlatAffineValueConstraints constraints,
BoundType  type,
unsigned  pos,
AffineMap  map,
ValueRange  operands 
)
static

Bound an identifier pos in a given FlatAffineValueConstraints with constraints drawn from an affine map.

Before adding the constraint, the dimensions/symbols of the affine map are aligned with constraints. operands are the SSA Value operands used with the affine map. Note: This function adds a new symbol column to the constraints for each dimension/symbol that exists in the affine map but not in constraints.

Definition at line 2226 of file Utils.cpp.

References mlir::affine::FlatAffineValueConstraints::addBound(), mlir::alignAffineMapWithValues(), mlir::FlatLinearValueConstraints::appendSymbolVar(), mlir::FlatLinearValueConstraints::getMaybeValues(), and unpackOptionalValues().

Referenced by mlir::affine::simplifyConstrainedMinMaxOp().

◆ findInstPosition()

static void findInstPosition ( Operation op,
Block limitBlock,
SmallVectorImpl< unsigned > *  positions 
)
static

◆ getConstDifference()

static std::optional<uint64_t> getConstDifference ( AffineMap  lbMap,
AffineMap  ubMap 
)
static

◆ getEffectedValues()

template<typename... EffectTys>
static void getEffectedValues ( Operation op,
SmallVectorImpl< Value > &  values 
)
static

Returns the values that this op has a memref effect of type EffectTys on, not considering recursive effects.

Definition at line 165 of file Utils.cpp.

References mlir::Operation::getOperands(), mlir::Value::getType(), and mlir::Operation::hasTrait().

◆ getInstAtPosition()

static Operation* getInstAtPosition ( ArrayRef< unsigned >  positions,
unsigned  level,
Block block 
)
static

Definition at line 1560 of file Utils.cpp.

References mlir::Operation::getRegions().

Referenced by mlir::affine::insertBackwardComputationSlice().

◆ getMemoryFootprintBytes()

static std::optional<int64_t> getMemoryFootprintBytes ( Block block,
Block::iterator  start,
Block::iterator  end,
int  memorySpace 
)
static

◆ getMemRef()

static Value getMemRef ( Operation memOp)
static

◆ mayDependence()

static bool mayDependence ( const Node srcNode,
const Node dstNode,
Value  memref 
)
static

Returns true if there may be a dependence on memref from srcNode's memory ops to dstNode's memory ops, while using the affine memory dependence analysis checks.

The method assumes that there is at least one memory op in srcNode's loads and stores on memref, and similarly for dstNode. srcNode.op and destNode.op are expected to be nested in the same block and so the dependences are tested at the depth of that block.

Definition at line 264 of file Utils.cpp.

References mlir::affine::checkMemrefAccessDependence(), getMemRef(), mlir::affine::getNestingDepth(), mlir::affine::MemRefAccess::memref, and mlir::affine::noDependence().

Referenced by mlir::affine::MemRefDependenceGraph::init().

◆ unpackOptionalValues()

static void unpackOptionalValues ( ArrayRef< std::optional< Value >>  source,
SmallVector< Value > &  target 
)
static

Definition at line 2212 of file Utils.cpp.

Referenced by alignAndAddBound(), and mlir::affine::simplifyConstrainedMinMaxOp().

Variable Documentation

◆ kSliceFusionBarrierAttrName

const char* const kSliceFusionBarrierAttrName = "slice_fusion_barrier"

Definition at line 1865 of file Utils.cpp.

Referenced by mlir::affine::getComputationSliceState().