@@ -102,30 +102,30 @@ struct ComposeSubViewOpPattern : public OpRewritePattern<memref::SubViewOp> {
102
102
AffineExpr expr0 = rewriter.getAffineConstantExpr (0 );
103
103
AffineExpr expr1 = rewriter.getAffineConstantExpr (0 );
104
104
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;
128
127
}
128
+
129
129
AffineMap map = AffineMap::get (0 , affineApplyOperands.size (), expr0);
130
130
Value result = rewriter.create <affine::AffineApplyOp>(
131
131
op.getLoc (), map, affineApplyOperands);
0 commit comments