Skip to content

Commit ac87e54

Browse files
Eliminating unnecessary loops.
1 parent 1632e3a commit ac87e54

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

mlir/lib/Dialect/MemRef/Transforms/ComposeSubView.cpp

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -102,30 +102,30 @@ struct ComposeSubViewOpPattern : public OpRewritePattern<memref::SubViewOp> {
102102
AffineExpr expr0 = rewriter.getAffineConstantExpr(0);
103103
AffineExpr expr1 = rewriter.getAffineConstantExpr(0);
104104
SmallVector<Value> affineApplyOperands;
105-
SmallVector<OpFoldResult> opOffsets{sourceOffset, opOffset};
106-
for (auto &&[idx, offset] : llvm::enumerate(opOffsets)) {
107-
if (auto attr = llvm::dyn_cast_if_present<Attribute>(offset)) {
108-
if (idx == 0) {
109-
expr0 = expr0 + cast<IntegerAttr>(attr).getInt();
110-
} else if (idx == 1) {
111-
expr1 = expr1 + cast<IntegerAttr>(attr).getInt() *
112-
cast<IntegerAttr>(sourceStrideAttr).getInt();
113-
expr0 = expr0 + expr1;
114-
}
115-
} else {
116-
if (idx == 0) {
117-
expr0 = expr0 +
118-
rewriter.getAffineSymbolExpr(affineApplyOperands.size());
119-
affineApplyOperands.push_back(offset.get<Value>());
120-
} else if (idx == 1) {
121-
expr1 = expr1 +
122-
rewriter.getAffineSymbolExpr(affineApplyOperands.size());
123-
affineApplyOperands.push_back(offset.get<Value>());
124-
expr1 = expr1 * cast<IntegerAttr>(sourceStrideAttr).getInt();
125-
expr0 = expr0 + expr1;
126-
}
127-
}
105+
106+
// Make 'expr0' add 'sourceOffset'.
107+
if (auto attr = llvm::dyn_cast_if_present<Attribute>(sourceOffset)) {
108+
expr0 = expr0 + cast<IntegerAttr>(attr).getInt();
109+
} else {
110+
expr0 =
111+
expr0 + rewriter.getAffineSymbolExpr(affineApplyOperands.size());
112+
affineApplyOperands.push_back(sourceOffset.get<Value>());
113+
}
114+
115+
// Multiply 'opOffset' by 'sourceStride' and make the 'expr0' add the
116+
// result.
117+
if (auto attr = llvm::dyn_cast_if_present<Attribute>(opOffset)) {
118+
expr1 = expr1 + cast<IntegerAttr>(attr).getInt() *
119+
cast<IntegerAttr>(sourceStrideAttr).getInt();
120+
expr0 = expr0 + expr1;
121+
} else {
122+
expr1 =
123+
expr1 + rewriter.getAffineSymbolExpr(affineApplyOperands.size());
124+
affineApplyOperands.push_back(opOffset.get<Value>());
125+
expr1 = expr1 * cast<IntegerAttr>(sourceStrideAttr).getInt();
126+
expr0 = expr0 + expr1;
128127
}
128+
129129
AffineMap map = AffineMap::get(0, affineApplyOperands.size(), expr0);
130130
Value result = rewriter.create<affine::AffineApplyOp>(
131131
op.getLoc(), map, affineApplyOperands);

0 commit comments

Comments
 (0)