[Mlir-commits] [mlir] [mlir][tosa][spirv] Add TOSA to SPIR-V TOSA pass plumbing (PR #196539)

Igor Wodiany llvmlistbot at llvm.org
Wed May 20 02:47:19 PDT 2026


================
@@ -0,0 +1,211 @@
+//===- TosaToSPIRVTosaPass.cpp - Lower TOSA to SPIR-V Graph/TOSA ----------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This pass lowers TOSA IR to the SPIR-V Graph/TOSA representation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Conversion/TosaToSPIRVTosa/TosaToSPIRVTosa.h"
+
+#include "mlir/Dialect/Func/IR/FuncOps.h"
+#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
+#include "mlir/Dialect/SPIRV/IR/TargetAndABI.h"
+#include "mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h"
+#include "mlir/Dialect/Tosa/IR/TosaOps.h"
+#include "mlir/IR/TypeUtilities.h"
+#include "mlir/Transforms/DialectConversion.h"
+
+#include <algorithm>
+
+namespace mlir {
+#define GEN_PASS_DEF_TOSATOSPIRVTOSA
+#include "mlir/Conversion/Passes.h.inc"
+
+namespace tosa {
+
+spirv::VerCapExtAttr getDefaultVerCapExtAttr(MLIRContext *context) {
+  return spirv::VerCapExtAttr::get(
+      spirv::Version::V_1_5,
+      {
+          spirv::Capability::VulkanMemoryModel,
+          spirv::Capability::Shader,
+          spirv::Capability::Int8,
+          spirv::Capability::Int16,
+          spirv::Capability::Int64,
+          spirv::Capability::Float16,
+          spirv::Capability::BFloat16TypeKHR,
+          spirv::Capability::Float8EXT,
+          spirv::Capability::TensorsARM,
+          spirv::Capability::GraphARM,
+          spirv::Capability::ReplicatedCompositesEXT,
+      },
+      {
+          spirv::Extension::SPV_ARM_tensors,
+          spirv::Extension::SPV_ARM_graph,
+          spirv::Extension::SPV_KHR_vulkan_memory_model,
+          spirv::Extension::SPV_EXT_replicated_composites,
+          spirv::Extension::SPV_KHR_bfloat16,
+          spirv::Extension::SPV_EXT_float8,
+      },
+      context);
+}
+
+spirv::TargetEnvAttr constructTargetEnvAttrWithCapExtDefaults(
+    MLIRContext *context, spirv::ResourceLimitsAttr limits,
+    spirv::ClientAPI clientAPI, spirv::Vendor vendorID,
+    spirv::DeviceType deviceType, uint32_t deviceID) {
+  if (!limits)
+    limits = spirv::getDefaultResourceLimits(context);
+
+  return spirv::TargetEnvAttr::get(getDefaultVerCapExtAttr(context), limits,
+                                   clientAPI, vendorID, deviceType, deviceID);
+}
+
+namespace {
+
+LogicalResult verifyGraphTargetEnv(Operation *op,
+                                   spirv::TargetEnvAttr targetAttr) {
+  spirv::TargetEnv targetEnv(targetAttr);
+  if (targetEnv.allows(spirv::Capability::GraphARM) &&
+      targetEnv.allows(spirv::Extension::SPV_ARM_graph) &&
+      targetEnv.allows(spirv::Extension::SPV_ARM_tensors)) {
+    return success();
+  }
+
+  return op->emitOpError()
+         << "requires GraphARM capability and SPV_ARM_graph/SPV_ARM_tensors "
+            "extensions in spirv.target_env";
+}
+
+LogicalResult verifyNoFuncCalls(Operation *op) {
+  auto result =
+      op->walk([](Operation *op) -> WalkResult {
+        if (isa<func::CallOp, func::CallIndirectOp>(op)) {
+          op->emitOpError()
+              << "is not supported in TOSA to SPIR-V Graph conversion; inline "
+                 "calls before running this pass";
+          return WalkResult::interrupt();
+        }
+        return WalkResult::advance();
+      });
+
+  return failure(result.wasInterrupted());
+}
+
+struct TosaToSPIRVTosa final : impl::TosaToSPIRVTosaBase<TosaToSPIRVTosa> {
+  void runOnOperation() override {
+    MLIRContext *context = &getContext();
+    RewritePatternSet patterns(context);
+    Operation *op = getOperation();
+
+    auto targetAttr = spirv::lookupTargetEnv(op);
----------------
IgWod wrote:

nit: please spell out the type

https://github.com/llvm/llvm-project/pull/196539


More information about the Mlir-commits mailing list