9 #ifndef MLIR_DIALECT_LINALG_UTILS_H_ 10 #define MLIR_DIALECT_LINALG_UTILS_H_ 17 #include "llvm/ADT/SetVector.h" 22 class OperationFolder;
74 void operator()(std::function<
void(
void)> fun =
nullptr) { (*builder)(fun); }
77 typedef typename std::conditional<std::is_same<LoopTy, AffineForOp>::value,
80 std::unique_ptr<BuilderType> builder;
86 class LinalgDependenceGraph;
97 LinalgOp consumer,
Value consumedView,
104 Value consumedView, LinalgOp producer);
112 unsigned consumerIdx,
119 template <
typename ConcreteOp>
122 for (
auto v : linalgOp.getInputsAndOutputs()) {
123 MemRefType t = v->getType().template cast<MemRefType>();
124 for (
unsigned i = 0; i < t.getRank(); ++i)
183 template <
typename... Args>
219 template <
typename T,
unsigned N>
223 for (
unsigned i = 0; i < permutation.size(); ++i)
224 auxVec[i] = inVec[permutation[i]];
234 llvm::SetVector<Value> subViews,
235 bool dynamicBuffers =
false,
241 #endif // MLIR_DIALECT_LINALG_UTILS_H_ Definition: InferTypeOpInterface.cpp:20
Definition: Builders.h:201
Definition: Operation.h:27
bool isProducerLastWriteOfView(const LinalgDependenceGraph &graph, LinalgOp consumer, Value consumedView, LinalgOp producer)
Definition: Fusion.cpp:217
void operator()(std::function< void(void)> fun=nullptr)
Definition: Utils.h:74
Definition: Attributes.h:129
Definition: Builders.h:290
Definition: Intrinsics.h:125
Definition: Location.h:52
ValueHandle operator()(std::function< void(void)> fun=nullptr)
Definition: Utils.cpp:60
LinalgOp op
Definition: Utils.h:139
bool isFusableInto(const LinalgDependenceGraph &graph, LinalgOp consumer, Value consumedView, LinalgOp producer)
Definition: Fusion.cpp:237
auto map(Fn fun, IterType begin, IterType end) -> SmallVector< typename std::result_of< Fn(decltype(*begin))>::type, 8 >
Map with iterators.
Definition: Functional.h:28
Definition: Builders.h:94
Definition: DependenceAnalysis.h:44
Optional< FusionInfo > fuseProducerOf(OpBuilder &b, LinalgOp consumer, unsigned consumerIdx, const LinalgDependenceGraph &graph, OperationFolder *folder=nullptr)
Definition: Fusion.cpp:253
Optional< TiledLinalgOp > tileLinalgOperation(OpBuilder &b, Operation *op, Args... args)
Definition: Utils.h:184
Optional< TiledLinalgOp > tileLinalgOp(OpBuilder &b, LinalgOp op, ArrayRef< int64_t > tileSizes, ArrayRef< unsigned > permutation={}, OperationFolder *folder=nullptr)
Definition: Tiling.cpp:383
Definition: StandardTypes.h:390
Definition: AffineMap.h:37
LoopRangeBuilder & operator=(const LoopRangeBuilder &)=delete
LinalgOp fusedProducer
Definition: Utils.h:90
SmallVector< loop::ForOp, 8 > loops
Definition: Utils.h:140
Definition: FoldUtils.h:50
LinalgOp originalProducer
Definition: Utils.h:89
LoopRangeBuilder(ValueHandle *iv, ValueHandle range)
Definition: Utils.cpp:35
SmallVector< Value, 4 > applyMapToValues(OpBuilder &b, Location loc, AffineMap map, ArrayRef< Value > values, OperationFolder *folder=nullptr)
Definition: Utils.cpp:142
void applyPermutationToVector(SmallVector< T, N > &inVec, ArrayRef< unsigned > permutation)
Definition: Utils.h:220
SmallVector< Value, 4 > getAssumedNonViewOperands(LinalgOp linalgOp)
Definition: Utils.cpp:163
mlir::edsc::intrinsics::ValueBuilder< RangeOp > range
Definition: Intrinsics.h:23
LinalgOp promoteSubViewOperands(OpBuilder &b, LinalgOp op, llvm::SetVector< Value > subViews, bool dynamicBuffers=false, OperationFolder *folder=nullptr)
SmallVector< PromotionInfo, 8 > promoteSubViews(OpBuilder &b, Location loc, ArrayRef< Value > subViews, bool dynamicBuffers=false, OperationFolder *folder=nullptr)
Definition: Promotion.cpp:108
Definition: LinalgTypes.h:20
Definition: Builders.h:158
SmallVector< Value, 8 > getViewSizes(ConcreteOp linalgOp)
Definition: Utils.h:120