[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