Skip to content

Commit 6b265f9

Browse files
author
Tobias Gysi
committed
[mlir][linalg] Cleanup LinalgOp usage in loop lowering.
Replace the uses of deprecated Structured Op Interface methods in Loops.cpp. This patch is based on https://reviews.llvm.org/D103394. Differential Revision: https://reviews.llvm.org/D103453
1 parent 0804a88 commit 6b265f9

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

mlir/lib/Dialect/Linalg/Transforms/Loops.cpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -119,39 +119,37 @@ static void emitScalarImplementation(OpBuilder &b, Location loc,
119119
LinalgOp linalgOp) {
120120
assert(linalgOp.hasBufferSemantics() &&
121121
"expected linalg op with buffer semantics");
122-
unsigned nInputs = linalgOp.getNumInputs();
123-
unsigned nOutputs = linalgOp.getNumOutputs();
124122
SmallVector<Value> indexedValues;
125-
indexedValues.reserve(nInputs + nOutputs);
123+
indexedValues.reserve(linalgOp.getNumInputsAndOutputs());
126124

127125
auto allIvsPlusDims = SmallVector<Value>(allIvs.begin(), allIvs.end());
128126

129127
// TODO: Avoid the loads if the corresponding argument of the
130128
// region has no uses.
131129
// 1.a. Emit load from input views.
132-
for (unsigned i = 0; i < nInputs; ++i) {
130+
for (OpOperand *inputOperand : linalgOp.getInputOperands()) {
133131
auto indexing = makeCanonicalAffineApplies(
134-
b, loc, linalgOp.getInputIndexingMap(i), allIvsPlusDims);
132+
b, loc, linalgOp.getTiedIndexingMap(inputOperand), allIvsPlusDims);
135133
indexedValues.push_back(
136-
b.create<LoadOpTy>(loc, linalgOp.getInput(i), indexing));
134+
b.create<LoadOpTy>(loc, inputOperand->get(), indexing));
137135
}
138136
// 1.b. Emit load from output views.
139-
for (unsigned i = 0; i < nOutputs; ++i) {
140-
auto indexing = makeCanonicalAffineApplies(
141-
b, loc, linalgOp.getOutputIndexingMap(i), allIvsPlusDims);
137+
for (OpOperand *outputOperand : linalgOp.getOutputOperands()) {
138+
SmallVector<Value> indexing = makeCanonicalAffineApplies(
139+
b, loc, linalgOp.getTiedIndexingMap(outputOperand), allIvsPlusDims);
142140
indexedValues.push_back(
143-
b.create<LoadOpTy>(loc, linalgOp.getOutputBuffer(i), indexing));
141+
b.create<LoadOpTy>(loc, outputOperand->get(), indexing));
144142
}
145143

146144
// TODO: When a region inliner exists, use it.
147145
// 2. Inline region, currently only works for a single basic block.
148146
// 3. Emit store.
149147
SmallVector<SmallVector<Value>, 8> indexing;
150148
SmallVector<Value> outputBuffers;
151-
for (unsigned i = 0; i < nOutputs; ++i) {
149+
for (OpOperand *outputOperand : linalgOp.getOutputBufferOperands()) {
152150
indexing.push_back(makeCanonicalAffineApplies(
153-
b, loc, linalgOp.getOutputIndexingMap(i), allIvsPlusDims));
154-
outputBuffers.push_back(linalgOp.getOutputBuffer(i));
151+
b, loc, linalgOp.getTiedIndexingMap(outputOperand), allIvsPlusDims));
152+
outputBuffers.push_back(outputOperand->get());
155153
}
156154
inlineRegionAndEmitStore<LoadOpTy, StoreOpTy>(b, loc, linalgOp, indexedValues,
157155
indexing, outputBuffers);

0 commit comments

Comments
 (0)