Skip to content

Commit af4dcbb

Browse files
authored
[mlir][affine] Verify map of affineMaxMinOp has at least one result (#108699)
This PR fixes a bug in `verifyAffineMinMaxOp` that allowed `map` of `affine.max` and `affine.min` to have an empty result. Fixes #108368.
1 parent a861ed4 commit af4dcbb

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

mlir/lib/Dialect/Affine/IR/AffineOps.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3214,6 +3214,9 @@ static LogicalResult verifyAffineMinMaxOp(T op) {
32143214
op.getMap().getNumDims() + op.getMap().getNumSymbols())
32153215
return op.emitOpError(
32163216
"operand count and affine map dimension and symbol count must match");
3217+
3218+
if (op.getMap().getNumResults() == 0)
3219+
return op.emitOpError("affine map expect at least one result");
32173220
return success();
32183221
}
32193222

mlir/test/Dialect/Affine/invalid.mlir

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,22 @@ func.func @affine_min(%arg0 : index, %arg1 : index, %arg2 : index) {
178178

179179
// -----
180180

181+
func.func @affine_min() {
182+
// expected-error@+1 {{'affine.min' op affine map expect at least one result}}
183+
%0 = affine.min affine_map<() -> ()> ()
184+
return
185+
}
186+
187+
// -----
188+
189+
func.func @affine_min(%arg0 : index) {
190+
// expected-error@+1 {{'affine.min' op affine map expect at least one result}}
191+
%0 = affine.min affine_map<(d0) -> ()> (%arg0)
192+
return
193+
}
194+
195+
// -----
196+
181197
func.func @affine_max(%arg0 : index, %arg1 : index, %arg2 : index) {
182198
// expected-error@+1 {{operand count and affine map dimension and symbol count must match}}
183199
%0 = affine.max affine_map<(d0) -> (d0)> (%arg0, %arg1)
@@ -205,6 +221,22 @@ func.func @affine_max(%arg0 : index, %arg1 : index, %arg2 : index) {
205221

206222
// -----
207223

224+
func.func @affine_max() {
225+
// expected-error@+1 {{'affine.max' op affine map expect at least one result}}
226+
%0 = affine.max affine_map<() -> ()> ()
227+
return
228+
}
229+
230+
// -----
231+
232+
func.func @affine_max(%arg0 : index) {
233+
// expected-error@+1 {{'affine.max' op affine map expect at least one result}}
234+
%0 = affine.max affine_map<(d0) -> ()> (%arg0)
235+
return
236+
}
237+
238+
// -----
239+
208240
func.func @affine_parallel(%arg0 : index, %arg1 : index, %arg2 : index) {
209241
// expected-error@+1 {{the number of region arguments (1) and the number of map groups for lower (2) and upper bound (2), and the number of steps (2) must all match}}
210242
affine.parallel (%i) = (0, 0) to (100, 100) step (10, 10) {

0 commit comments

Comments
 (0)