diff --git a/mlir/include/mlir/Dialect/GPU/GPUOps.td b/mlir/include/mlir/Dialect/GPU/GPUOps.td --- a/mlir/include/mlir/Dialect/GPU/GPUOps.td +++ b/mlir/include/mlir/Dialect/GPU/GPUOps.td @@ -200,7 +200,7 @@ /// Returns the number of buffers located in the private memory. unsigned getNumPrivateAttributions() { - return getOperation()->getNumOperands() - getType().getNumInputs() - + return getBody().front().getNumArguments() - getType().getNumInputs() - getNumWorkgroupAttributions(); } diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp --- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp +++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp @@ -693,6 +693,12 @@ << blockArgType; } + if (getWorkgroupAttributions().size() != getNumWorkgroupAttributions()) + return emitOpError() << "number of workgroup attributions do not match"; + + if (getPrivateAttributions().size() != getNumPrivateAttributions()) + return emitOpError() << "number of private attributions do not match"; + if (failed(verifyAttributions(getOperation(), getWorkgroupAttributions(), GPUDialect::getWorkgroupAddressSpace())) || failed(verifyAttributions(getOperation(), getPrivateAttributions(),