[MLIR][Affine] Fix affine.parallel op verifier (#127611)

Fix affine.parallel op verifier for missing check on zero result lower
or upper bound maps. lb/ub maps should have at least one result.

Fixes: https://github.com/llvm/llvm-project/issues/120186
This commit is contained in:
Uday Bondhugula
2025-02-19 15:56:23 +05:30
committed by GitHub
parent 1509b46ea5
commit 3c938d0d53
2 changed files with 32 additions and 4 deletions

View File

@@ -3918,14 +3918,24 @@ LogicalResult AffineParallelOp::verify() {
}
unsigned expectedNumLBResults = 0;
for (APInt v : getLowerBoundsGroups())
expectedNumLBResults += v.getZExtValue();
for (APInt v : getLowerBoundsGroups()) {
unsigned results = v.getZExtValue();
if (results == 0)
return emitOpError()
<< "expected lower bound map to have at least one result";
expectedNumLBResults += results;
}
if (expectedNumLBResults != getLowerBoundsMap().getNumResults())
return emitOpError() << "expected lower bounds map to have "
<< expectedNumLBResults << " results";
unsigned expectedNumUBResults = 0;
for (APInt v : getUpperBoundsGroups())
expectedNumUBResults += v.getZExtValue();
for (APInt v : getUpperBoundsGroups()) {
unsigned results = v.getZExtValue();
if (results == 0)
return emitOpError()
<< "expected upper bound map to have at least one result";
expectedNumUBResults += results;
}
if (expectedNumUBResults != getUpperBoundsMap().getNumResults())
return emitOpError() << "expected upper bounds map to have "
<< expectedNumUBResults << " results";

View File

@@ -297,6 +297,24 @@ func.func @affine_parallel(%arg0 : index, %arg1 : index, %arg2 : index) {
// -----
func.func @no_upper_bound_affine_parallel() {
// expected-error@+1 {{expected lower bound map to have at least one result}}
affine.parallel (%arg2) = (max()) to (1) {
}
return
}
// -----
func.func @no_upper_bound_affine_parallel() {
// expected-error@+1 {{expected upper bound map to have at least one result}}
affine.parallel (%arg3) = (0) to (min()) {
}
return
}
// -----
func.func @vector_load_invalid_vector_type() {
%0 = memref.alloc() : memref<100xf32>
affine.for %i0 = 0 to 16 step 8 {