Skip to content

Commit 202d784

Browse files
authored
[MLIR][IRDL] Support camelCase segment size attributes in IRDL verifier (#168836)
Two years ago, `operand_segment_sizes` and `result_segment_sizes` were renamed to `operandSegmentSizes` and `resultSegmentSizes` (check related commits, e.g. 363b655). However, the op verifiers in IRDL loading phase is still using old attributes like `operand_segment_sizes` and `result_segment_sizes`, which causes some conflict, e.g. it is not compatible with the OpView builder in MLIR python bindings (which generates camelCase segment attributes). This PR is to support to use camelCase segment size attributes in IRDL verifier. Note that support of `operand_segment_sizes` and `result_segment_sizes` is dropped. I found this issue since I'm working on a new IRDL wrapper in the MLIR python bindings.
1 parent 7851b8a commit 202d784

File tree

2 files changed

+36
-36
lines changed

2 files changed

+36
-36
lines changed

mlir/lib/Dialect/IRDL/IRDLLoading.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ LogicalResult getSegmentSizes(Operation *op, StringRef elemName,
169169
LogicalResult getOperandSegmentSizes(Operation *op,
170170
ArrayRef<Variadicity> variadicities,
171171
SmallVectorImpl<int> &segmentSizes) {
172-
return getSegmentSizes(op, "operand", "operand_segment_sizes",
172+
return getSegmentSizes(op, "operand", "operandSegmentSizes",
173173
op->getNumOperands(), variadicities, segmentSizes);
174174
}
175175

@@ -180,7 +180,7 @@ LogicalResult getOperandSegmentSizes(Operation *op,
180180
LogicalResult getResultSegmentSizes(Operation *op,
181181
ArrayRef<Variadicity> variadicities,
182182
SmallVectorImpl<int> &segmentSizes) {
183-
return getSegmentSizes(op, "result", "result_segment_sizes",
183+
return getSegmentSizes(op, "result", "resultSegmentSizes",
184184
op->getNumResults(), variadicities, segmentSizes);
185185
}
186186

mlir/test/Dialect/IRDL/variadics.mlir

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func.func @testOptOperandFail(%x: i16) {
133133
// Check that an operation with multiple variadics expects the segment size
134134
// attribute
135135
func.func @testMultOperandsMissingSegment(%x: i16, %z: i64) {
136-
// expected-error@+1 {{'operand_segment_sizes' attribute is expected but not provided}}
136+
// expected-error@+1 {{'operandSegmentSizes' attribute is expected but not provided}}
137137
"testvar.var_and_opt_operand"(%x, %x, %z) : (i16, i16, i64) -> ()
138138
return
139139
}
@@ -143,8 +143,8 @@ func.func @testMultOperandsMissingSegment(%x: i16, %z: i64) {
143143
// Check that an operation with multiple variadics expects the segment size
144144
// attribute of the right type
145145
func.func @testMultOperandsWrongSegmentType(%x: i16, %z: i64) {
146-
// expected-error@+1 {{'operand_segment_sizes' attribute is expected to be a dense i32 array}}
147-
"testvar.var_and_opt_operand"(%x, %x, %z) {operand_segment_sizes = i32} : (i16, i16, i64) -> ()
146+
// expected-error@+1 {{'operandSegmentSizes' attribute is expected to be a dense i32 array}}
147+
"testvar.var_and_opt_operand"(%x, %x, %z) {operandSegmentSizes = i32} : (i16, i16, i64) -> ()
148148
return
149149
}
150150

@@ -153,48 +153,48 @@ func.func @testMultOperandsWrongSegmentType(%x: i16, %z: i64) {
153153
// Check that an operation with multiple variadics with the right segment size
154154
// verifies.
155155
func.func @testMultOperands(%x: i16, %y: i32, %z: i64) {
156-
"testvar.var_and_opt_operand"(%x, %x, %z) {operand_segment_sizes = array<i32: 2, 0, 1>} : (i16, i16, i64) -> ()
157-
// CHECK: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}, %{{.*}}) {operand_segment_sizes = array<i32: 2, 0, 1>} : (i16, i16, i64) -> ()
158-
"testvar.var_and_opt_operand"(%x, %x, %y, %z) {operand_segment_sizes = array<i32: 2, 1, 1>} : (i16, i16, i32, i64) -> ()
159-
// CHECK-NEXT: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {operand_segment_sizes = array<i32: 2, 1, 1>} : (i16, i16, i32, i64) -> ()
160-
"testvar.var_and_opt_operand"(%y, %z) {operand_segment_sizes = array<i32: 0, 1, 1>} : (i32, i64) -> ()
161-
// CHECK-NEXT: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}) {operand_segment_sizes = array<i32: 0, 1, 1>} : (i32, i64) -> ()
156+
"testvar.var_and_opt_operand"(%x, %x, %z) {operandSegmentSizes = array<i32: 2, 0, 1>} : (i16, i16, i64) -> ()
157+
// CHECK: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}, %{{.*}}) {operandSegmentSizes = array<i32: 2, 0, 1>} : (i16, i16, i64) -> ()
158+
"testvar.var_and_opt_operand"(%x, %x, %y, %z) {operandSegmentSizes = array<i32: 2, 1, 1>} : (i16, i16, i32, i64) -> ()
159+
// CHECK-NEXT: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {operandSegmentSizes = array<i32: 2, 1, 1>} : (i16, i16, i32, i64) -> ()
160+
"testvar.var_and_opt_operand"(%y, %z) {operandSegmentSizes = array<i32: 0, 1, 1>} : (i32, i64) -> ()
161+
// CHECK-NEXT: "testvar.var_and_opt_operand"(%{{.*}}, %{{.*}}) {operandSegmentSizes = array<i32: 0, 1, 1>} : (i32, i64) -> ()
162162
return
163163
}
164164

165165
// -----
166166

167167
// Check that the segment sizes expects non-negative values
168168
func.func @testMultOperandsSegmentNegative() {
169-
// expected-error@+1 {{'operand_segment_sizes' attribute for specifying operand segments must have non-negative values}}
170-
"testvar.var_and_opt_operand"() {operand_segment_sizes = array<i32: 2, -1, 1>} : () -> ()
169+
// expected-error@+1 {{'operandSegmentSizes' attribute for specifying operand segments must have non-negative values}}
170+
"testvar.var_and_opt_operand"() {operandSegmentSizes = array<i32: 2, -1, 1>} : () -> ()
171171
return
172172
}
173173

174174
// -----
175175

176176
// Check that the segment sizes expects 1 for single values
177177
func.func @testMultOperandsSegmentWrongSingle() {
178-
// expected-error@+1 {{element 2 in 'operand_segment_sizes' attribute must be equal to 1}}
179-
"testvar.var_and_opt_operand"() {operand_segment_sizes = array<i32: 0, 0, 0>} : () -> ()
178+
// expected-error@+1 {{element 2 in 'operandSegmentSizes' attribute must be equal to 1}}
179+
"testvar.var_and_opt_operand"() {operandSegmentSizes = array<i32: 0, 0, 0>} : () -> ()
180180
return
181181
}
182182

183183
// -----
184184

185185
// Check that the segment sizes expects not more than 1 for optional values
186186
func.func @testMultOperandsSegmentWrongOptional() {
187-
// expected-error@+1 {{element 1 in 'operand_segment_sizes' attribute must be equal to 0 or 1}}
188-
"testvar.var_and_opt_operand"() {operand_segment_sizes = array<i32: 0, 2, 0>} : () -> ()
187+
// expected-error@+1 {{element 1 in 'operandSegmentSizes' attribute must be equal to 0 or 1}}
188+
"testvar.var_and_opt_operand"() {operandSegmentSizes = array<i32: 0, 2, 0>} : () -> ()
189189
return
190190
}
191191

192192
// -----
193193

194194
// Check that the sum of the segment sizes should be equal to the number of operands
195195
func.func @testMultOperandsSegmentWrongOptional(%y: i32, %z: i64) {
196-
// expected-error@+1 {{sum of elements in 'operand_segment_sizes' attribute must be equal to the number of operands}}
197-
"testvar.var_and_opt_operand"(%y, %z) {operand_segment_sizes = array<i32: 0, 0, 1>} : (i32, i64) -> ()
196+
// expected-error@+1 {{sum of elements in 'operandSegmentSizes' attribute must be equal to the number of operands}}
197+
"testvar.var_and_opt_operand"(%y, %z) {operandSegmentSizes = array<i32: 0, 0, 1>} : (i32, i64) -> ()
198198
return
199199
}
200200

@@ -334,7 +334,7 @@ func.func @testOptResultFail() {
334334
// Check that an operation with multiple variadics expects the segment size
335335
// attribute
336336
func.func @testMultResultsMissingSegment() {
337-
// expected-error@+1 {{'result_segment_sizes' attribute is expected but not provided}}
337+
// expected-error@+1 {{'resultSegmentSizes' attribute is expected but not provided}}
338338
"testvar.var_and_opt_result"() : () -> (i16, i16, i64)
339339
return
340340
}
@@ -344,8 +344,8 @@ func.func @testMultResultsMissingSegment() {
344344
// Check that an operation with multiple variadics expects the segment size
345345
// attribute of the right type
346346
func.func @testMultResultsWrongSegmentType() {
347-
// expected-error@+1 {{'result_segment_sizes' attribute is expected to be a dense i32 array}}
348-
"testvar.var_and_opt_result"() {result_segment_sizes = i32} : () -> (i16, i16, i64)
347+
// expected-error@+1 {{'resultSegmentSizes' attribute is expected to be a dense i32 array}}
348+
"testvar.var_and_opt_result"() {resultSegmentSizes = i32} : () -> (i16, i16, i64)
349349
return
350350
}
351351

@@ -354,47 +354,47 @@ func.func @testMultResultsWrongSegmentType() {
354354
// Check that an operation with multiple variadics with the right segment size
355355
// verifies.
356356
func.func @testMultResults() {
357-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 2, 0, 1>} : () -> (i16, i16, i64)
358-
// CHECK: "testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 2, 0, 1>} : () -> (i16, i16, i64)
359-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 2, 1, 1>} : () -> (i16, i16, i32, i64)
360-
// CHECK-NEXT: "testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 2, 1, 1>} : () -> (i16, i16, i32, i64)
361-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 0, 1, 1>} : () -> (i32, i64)
362-
// CHECK-NEXT: "testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 0, 1, 1>} : () -> (i32, i64)
357+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 2, 0, 1>} : () -> (i16, i16, i64)
358+
// CHECK: "testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 2, 0, 1>} : () -> (i16, i16, i64)
359+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 2, 1, 1>} : () -> (i16, i16, i32, i64)
360+
// CHECK-NEXT: "testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 2, 1, 1>} : () -> (i16, i16, i32, i64)
361+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 0, 1, 1>} : () -> (i32, i64)
362+
// CHECK-NEXT: "testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 0, 1, 1>} : () -> (i32, i64)
363363
return
364364
}
365365

366366
// -----
367367

368368
// Check that the segment sizes expects non-negative values
369369
func.func @testMultResultsSegmentNegative() {
370-
// expected-error@+1 {{'result_segment_sizes' attribute for specifying result segments must have non-negative values}}
371-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 2, -1, 1>} : () -> ()
370+
// expected-error@+1 {{'resultSegmentSizes' attribute for specifying result segments must have non-negative values}}
371+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 2, -1, 1>} : () -> ()
372372
return
373373
}
374374

375375
// -----
376376

377377
// Check that the segment sizes expects 1 for single values
378378
func.func @testMultResultsSegmentWrongSingle() {
379-
// expected-error@+1 {{element 2 in 'result_segment_sizes' attribute must be equal to 1}}
380-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 0, 0, 0>} : () -> ()
379+
// expected-error@+1 {{element 2 in 'resultSegmentSizes' attribute must be equal to 1}}
380+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 0, 0, 0>} : () -> ()
381381
return
382382
}
383383

384384
// -----
385385

386386
// Check that the segment sizes expects not more than 1 for optional values
387387
func.func @testMultResultsSegmentWrongOptional() {
388-
// expected-error@+1 {{element 1 in 'result_segment_sizes' attribute must be equal to 0 or 1}}
389-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 0, 2, 0>} : () -> ()
388+
// expected-error@+1 {{element 1 in 'resultSegmentSizes' attribute must be equal to 0 or 1}}
389+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 0, 2, 0>} : () -> ()
390390
return
391391
}
392392

393393
// -----
394394

395395
// Check that the sum of the segment sizes should be equal to the number of results
396396
func.func @testMultResultsSegmentWrongOptional() {
397-
// expected-error@+1 {{sum of elements in 'result_segment_sizes' attribute must be equal to the number of results}}
398-
"testvar.var_and_opt_result"() {result_segment_sizes = array<i32: 0, 0, 1>} : () -> (i32, i64)
397+
// expected-error@+1 {{sum of elements in 'resultSegmentSizes' attribute must be equal to the number of results}}
398+
"testvar.var_and_opt_result"() {resultSegmentSizes = array<i32: 0, 0, 1>} : () -> (i32, i64)
399399
return
400400
}

0 commit comments

Comments
 (0)