@@ -98,13 +98,17 @@ class OpWithOffsetSizesAndStridesConstantArgumentFolder final
98
98
// /
99
99
// / If `valueTypes` is provided, the corresponding type of each dynamic value is
100
100
// / printed. Otherwise, the type is not printed. Each type must match the type
101
- // / of the corresponding value in `values`. The type for integer elements is
102
- // / `i64` by default and never printed.
103
- // /
104
- // / Integer indices can also be scalable, denoted with square brackets (e.g.,
105
- // / "[2, [4], 8]"). For each value in `integers`, the corresponding `bool` in
106
- // / `scalables` encodes whether it's a scalable index. If `scalables` is empty
107
- // / then assume that all indices are non-scalable.
101
+ // / of the corresponding value in `values`. `valueTypes` is redundant for
102
+ // / printing as we can retrieve the types from the actual `values`. However,
103
+ // / `valueTypes` is needed for parsing and we must keep the API symmetric for
104
+ // / parsing and printing. The type for integer elements is `i64` by default and
105
+ // / never printed.
106
+ // /
107
+ // / Integer indices can also be scalable in the context of scalable vectors,
108
+ // / denoted by square brackets (e.g., "[2, [4], 8]"). For each value in
109
+ // / `integers`, the corresponding `bool` in `scalableFlags` encodes whether it's
110
+ // / a scalable index. If `scalableFlags` is empty then assume that all indices
111
+ // / are non-scalable.
108
112
// /
109
113
// / Examples:
110
114
// /
@@ -122,21 +126,21 @@ class OpWithOffsetSizesAndStridesConstantArgumentFolder final
122
126
// /
123
127
// / * Input: `integers = [2, 4, 8]`,
124
128
// / `values = []` and
125
- // / `scalables = [false, true, false]`
129
+ // / `scalableFlags = [false, true, false]`
126
130
// / prints:
127
131
// / `[2, [4], 8]`
128
132
// /
129
133
void printDynamicIndexList (
130
134
OpAsmPrinter &printer, Operation *op, OperandRange values,
131
- ArrayRef<int64_t > integers, ArrayRef<bool > scalables ,
135
+ ArrayRef<int64_t > integers, ArrayRef<bool > scalableFlags ,
132
136
TypeRange valueTypes = TypeRange(),
133
137
AsmParser::Delimiter delimiter = AsmParser::Delimiter::Square);
134
138
inline void printDynamicIndexList (
135
139
OpAsmPrinter &printer, Operation *op, OperandRange values,
136
140
ArrayRef<int64_t > integers, TypeRange valueTypes = TypeRange(),
137
141
AsmParser::Delimiter delimiter = AsmParser::Delimiter::Square) {
138
- return printDynamicIndexList (printer, op, values, integers, /* scalables= */ {},
139
- valueTypes, delimiter);
142
+ return printDynamicIndexList (printer, op, values, integers,
143
+ /* scalableFlags= */ {}, valueTypes, delimiter);
140
144
}
141
145
142
146
// / Parser hooks for custom directive in assemblyFormat.
@@ -151,38 +155,41 @@ inline void printDynamicIndexList(
151
155
// / values to `values` in-order.
152
156
// /
153
157
// / If `valueTypes` is provided, fill it with the types corresponding to each
154
- // / value in `values`. Otherwise, the caller must handle the types.
158
+ // / value in `values`. Otherwise, the caller must handle the types and parsing
159
+ // / will fail if the type of the value is found (e.g., `[%arg0 : index, 3, %arg1
160
+ // / : index]`).
155
161
// /
156
- // / Integer indices can also be scalable, denoted by the square bracket (e.g.,
157
- // / "[2, [4], 8]"). For each value in `integers`, the corresponding `bool` in
158
- // / `scalables` encodes whether it's a scalable index.
162
+ // / Integer indices can also be scalable in the context of scalable vectors,
163
+ // / denoted by square brackets (e.g., "[2, [4], 8]"). For each value in
164
+ // / `integers`, the corresponding `bool` in `scalableFlags` encodes whether it's
165
+ // / a scalable index.
159
166
// /
160
167
// / Examples:
161
168
// /
162
169
// / * After parsing "[%arg0 : index, 7, 42, %arg42 : i32]":
163
170
// / 1. `result` is filled with `[kDynamic, 7, 42, kDynamic]`
164
171
// / 2. `values` is filled with "[%arg0, %arg1]".
165
- // / 3. `scalables ` is filled with `[false, true, false]`.
172
+ // / 3. `scalableFlags ` is filled with `[false, true, false]`.
166
173
// /
167
174
// / * After parsing `[2, [4], 8]`:
168
175
// / 1. `result` is filled with `[2, 4, 8]`
169
176
// / 2. `values` is empty.
170
- // / 3. `scalables ` is filled with `[false, true, false]`.
177
+ // / 3. `scalableFlags ` is filled with `[false, true, false]`.
171
178
// /
172
179
ParseResult parseDynamicIndexList (
173
180
OpAsmParser &parser,
174
181
SmallVectorImpl<OpAsmParser::UnresolvedOperand> &values,
175
- DenseI64ArrayAttr &integers, DenseBoolArrayAttr &scalables ,
182
+ DenseI64ArrayAttr &integers, DenseBoolArrayAttr &scalableFlags ,
176
183
SmallVectorImpl<Type> *valueTypes = nullptr ,
177
184
AsmParser::Delimiter delimiter = AsmParser::Delimiter::Square);
178
185
inline ParseResult parseDynamicIndexList (
179
186
OpAsmParser &parser,
180
187
SmallVectorImpl<OpAsmParser::UnresolvedOperand> &values,
181
188
DenseI64ArrayAttr &integers, SmallVectorImpl<Type> *valueTypes = nullptr ,
182
189
AsmParser::Delimiter delimiter = AsmParser::Delimiter::Square) {
183
- DenseBoolArrayAttr scalables ;
184
- return parseDynamicIndexList (parser, values, integers, scalables, valueTypes ,
185
- delimiter);
190
+ DenseBoolArrayAttr scalableFlags ;
191
+ return parseDynamicIndexList (parser, values, integers, scalableFlags ,
192
+ valueTypes, delimiter);
186
193
}
187
194
188
195
// / Verify that a the `values` has as many elements as the number of entries in
0 commit comments