[Mlir-commits] [mlir] [mlir][SPIRVToLLVM] Add conversions for more GL ops (PR #200115)

Arseniy Obolenskiy llvmlistbot at llvm.org
Wed May 27 22:51:17 PDT 2026


https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/200115

None

>From 98cd1b894f84759c85d2d8c22a2d1d95f9aee9e8 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Thu, 28 May 2026 07:50:48 +0200
Subject: [PATCH] [mlir][SPIRVToLLVM] Add conversions for more GL ops

---
 .../Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp    |  6 ++
 .../SPIRVToLLVM/gl-ops-to-llvm.mlir           | 78 +++++++++++++++++++
 2 files changed, 84 insertions(+)

diff --git a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
index 64446fd8146f3..daa4d020ff063 100644
--- a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
+++ b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
@@ -1885,14 +1885,20 @@ void mlir::populateSPIRVToLLVMConversionPatterns(
       DirectConversionPattern<spirv::GLCeilOp, LLVM::FCeilOp>,
       DirectConversionPattern<spirv::GLCosOp, LLVM::CosOp>,
       DirectConversionPattern<spirv::GLExpOp, LLVM::ExpOp>,
+      DirectConversionPattern<spirv::GLExp2Op, LLVM::Exp2Op>,
       DirectConversionPattern<spirv::GLFAbsOp, LLVM::FAbsOp>,
       DirectConversionPattern<spirv::GLFloorOp, LLVM::FFloorOp>,
       DirectConversionPattern<spirv::GLFmaOp, LLVM::FMAOp>,
       DirectConversionPattern<spirv::GLFMaxOp, LLVM::MaxNumOp>,
       DirectConversionPattern<spirv::GLFMinOp, LLVM::MinNumOp>,
       DirectConversionPattern<spirv::GLLogOp, LLVM::LogOp>,
+      DirectConversionPattern<spirv::GLLog2Op, LLVM::Log2Op>,
       DirectConversionPattern<spirv::GLPowOp, LLVM::PowOp>,
+      DirectConversionPattern<spirv::GLRoundOp, LLVM::RoundOp>,
+      DirectConversionPattern<spirv::GLRoundEvenOp, LLVM::RoundEvenOp>,
       DirectConversionPattern<spirv::GLSinOp, LLVM::SinOp>,
+      DirectConversionPattern<spirv::GLSinhOp, LLVM::SinhOp>,
+      DirectConversionPattern<spirv::GLCoshOp, LLVM::CoshOp>,
       DirectConversionPattern<spirv::GLSMaxOp, LLVM::SMaxOp>,
       DirectConversionPattern<spirv::GLSMinOp, LLVM::SMinOp>,
       DirectConversionPattern<spirv::GLSqrtOp, LLVM::SqrtOp>,
diff --git a/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
index 048519e391cb7..d0079de0688ba 100644
--- a/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
+++ b/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
@@ -243,6 +243,84 @@ spirv.func @tanh(%arg0: f32) "None" {
   spirv.Return
 }
 
+//===----------------------------------------------------------------------===//
+// spirv.GL.Exp2
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @exp2
+spirv.func @exp2(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.exp2(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.Exp2 %arg0 : f32
+  // CHECK: llvm.intr.exp2(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.Exp2 %arg1 : vector<3xf16>
+  spirv.Return
+}
+
+//===----------------------------------------------------------------------===//
+// spirv.GL.Log2
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @log2
+spirv.func @log2(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.log2(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.Log2 %arg0 : f32
+  // CHECK: llvm.intr.log2(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.Log2 %arg1 : vector<3xf16>
+  spirv.Return
+}
+
+//===----------------------------------------------------------------------===//
+// spirv.GL.Round
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @round
+spirv.func @round(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.round(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.Round %arg0 : f32
+  // CHECK: llvm.intr.round(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.Round %arg1 : vector<3xf16>
+  spirv.Return
+}
+
+//===----------------------------------------------------------------------===//
+// spirv.GL.RoundEven
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @round_even
+spirv.func @round_even(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.roundeven(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.RoundEven %arg0 : f32
+  // CHECK: llvm.intr.roundeven(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.RoundEven %arg1 : vector<3xf16>
+  spirv.Return
+}
+
+//===----------------------------------------------------------------------===//
+// spirv.GL.Sinh
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @sinh
+spirv.func @sinh(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.sinh(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.Sinh %arg0 : f32
+  // CHECK: llvm.intr.sinh(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.Sinh %arg1 : vector<3xf16>
+  spirv.Return
+}
+
+//===----------------------------------------------------------------------===//
+// spirv.GL.Cosh
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @cosh
+spirv.func @cosh(%arg0: f32, %arg1: vector<3xf16>) "None" {
+  // CHECK: llvm.intr.cosh(%{{.*}}) : (f32) -> f32
+  %0 = spirv.GL.Cosh %arg0 : f32
+  // CHECK: llvm.intr.cosh(%{{.*}}) : (vector<3xf16>) -> vector<3xf16>
+  %1 = spirv.GL.Cosh %arg1 : vector<3xf16>
+  spirv.Return
+}
+
 //===----------------------------------------------------------------------===//
 // spirv.GL.InverseSqrt
 //===----------------------------------------------------------------------===//



More information about the Mlir-commits mailing list