mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 03:50:33 +08:00
[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:
@@ -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";
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user