79 mlir::AffineExpr base;
82 llvm::DenseMap<mlir::Operation *, std::pair<int32_t, int32_t>> extentMap;
85 llvm::SmallVector<std::pair<int32_t, int32_t>, 8> intervals;
88 llvm::SmallVector<bool, 8> vecIsLHSOperand;
91 bool sameMemRef(mlir::Value m) {
return memref == m; }
94 bool sameInvariantIndices(mlir::AffineExpr b) {
return base == b; }
97 bool sameEnclosingLoops(
99 llvm::DenseMap<mlir::Block *, llvm::SmallVector<mlir::Operation *, 8>>
100 &blockToEnclosingLoops);
103 size_t getIntervalIndex(mlir::Operation *op);
109 mlir::vector::TransferReadOp readOp, mlir::AffineExpr invariantBase,
110 llvm::DenseMap<mlir::Block *, llvm::SmallVector<mlir::Operation *, 8>>
111 &blockToEnclosingLoops);
114 llvm::DenseMap<mlir::Operation *, IntervalReuse *>
115 &dataAccessToIntervalMap,
116 int32_t offset, int32_t forLoopStepSize,
117 bool isSplat =
false,
118 unsigned minVecSize = 128 );
128 std::pair<int32_t, int32_t> &extent);
130 std::pair<int32_t, int32_t>
getInterval(mlir::Operation *op);
140 : memref(readOp.getSource()), base(b) {}
void insertInterval(mlir::vector::TransferReadOp readOp, llvm::DenseMap< mlir::Operation *, IntervalReuse * > &dataAccessToIntervalMap, int32_t offset, int32_t forLoopStepSize, bool isSplat=false, unsigned minVecSize=128)