[Mlir-commits] [llvm] [mlir] [MLIR][NVVM] Add NVVMRequiresSM op trait (PR #126886)
Mehdi Amini
llvmlistbot at llvm.org
Fri Mar 14 03:00:16 PDT 2025
================
@@ -1558,6 +1559,25 @@ NVVMTargetAttr::verify(function_ref<InFlightDiagnostic()> emitError,
return success();
}
+LogicalResult NVVMTargetAttr::verifyTarget(Operation *gpuModule) {
+ auto gpuModuleOp = llvm::dyn_cast<gpu::GPUModuleOp>(gpuModule);
+ if (!gpuModuleOp)
+ return emitError(gpuModule->getLoc(),
+ "NVVM target attribute must be attached to a GPU module");
+ gpuModuleOp->walk([&](Operation *op) {
+ if (auto reqOp = llvm::dyn_cast<NVVM::RequiresSMInterface>(op)) {
+ auto requirement = reqOp.getRequiredMinSMVersion();
+ if (!requirement.isCompatible(NVVMCheckSMVersion(getChip()))) {
+ op->emitOpError() << "is not supported on " << getChip();
+ return WalkResult::interrupt();
+ }
+ }
+ return WalkResult::advance();
----------------
joker-eph wrote:
```suggestion
NVVMCheckSMVersion targetVersion(getChip());
gpuModuleOp->walk([&](Operation *op) {
if (auto reqOp = llvm::dyn_cast<NVVM::RequiresSMInterface>(op)) {
NVVMCheckSMVersion requirement = reqOp.getRequiredMinSMVersion();
if (!requirement.isCompatible(smVersion)) {
op->emitOpError() << "is not supported on " << getChip();
return WalkResult::interrupt();
}
}
return WalkResult::advance();
```
There is string parsing involved here, let's do it once instead of for every op in the module.
https://github.com/llvm/llvm-project/pull/126886
More information about the Mlir-commits
mailing list