[Mlir-commits] [mlir] [mlir][SPIR-V] Add SPIRVToLLVM conversion for CL.ldexp and GL.Ldexp (PR #237745)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sun Nov 1 07:45:51 PST 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-spirv

Author: Arseniy Obolenskiy (aobolensk)

<details>
<summary>Changes</summary>

Vector exponents are not covered since llvm.intr.ldexp accepts only a scalar integer exponent

---
Full diff: https://github.com/llvm/llvm-project/pull/237745.diff


3 Files Affected:

- (modified) mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp (+2) 
- (modified) mlir/test/Conversion/SPIRVToLLVM/cl-ops-to-llvm.mlir (+7) 
- (modified) mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir (+11) 


``````````diff
diff --git a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
index 4b34bc722b8ee7..121be828662e0d 100644
--- a/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
+++ b/mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp
@@ -2445,6 +2445,7 @@ void mlir::populateSPIRVToLLVMConversionPatterns(
       DirectConversionPattern<spirv::GLFMinOp, LLVM::MinNumOp>,
       DirectConversionPattern<spirv::GLNMaxOp, LLVM::MaxNumOp>,
       DirectConversionPattern<spirv::GLNMinOp, LLVM::MinNumOp>,
+      DirectConversionPattern<spirv::GLLdexpOp, LLVM::LoadExpOp>,
       DirectConversionPattern<spirv::GLLogOp, LLVM::LogOp>,
       DirectConversionPattern<spirv::GLLog2Op, LLVM::Log2Op>,
       DirectConversionPattern<spirv::GLPowOp, LLVM::PowOp>,
@@ -2479,6 +2480,7 @@ void mlir::populateSPIRVToLLVMConversionPatterns(
       DirectConversionPattern<spirv::CLFmaOp, LLVM::FMAOp>,
       DirectConversionPattern<spirv::CLFMaxOp, LLVM::MaxNumOp>,
       DirectConversionPattern<spirv::CLFMinOp, LLVM::MinNumOp>,
+      DirectConversionPattern<spirv::CLLdexpOp, LLVM::LoadExpOp>,
       DirectConversionPattern<spirv::CLLogOp, LLVM::LogOp>,
       DirectConversionPattern<spirv::CLLog2Op, LLVM::Log2Op>,
       DirectConversionPattern<spirv::CLLog10Op, LLVM::Log10Op>,
diff --git a/mlir/test/Conversion/SPIRVToLLVM/cl-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/cl-ops-to-llvm.mlir
index e6fed930268d47..5206b64f05432d 100644
--- a/mlir/test/Conversion/SPIRVToLLVM/cl-ops-to-llvm.mlir
+++ b/mlir/test/Conversion/SPIRVToLLVM/cl-ops-to-llvm.mlir
@@ -76,6 +76,13 @@ spirv.func @cl_binary_float(%arg0: f32, %arg1: f32) "None" {
   spirv.Return
 }
 
+// CHECK-LABEL: @cl_ldexp
+spirv.func @cl_ldexp(%arg0: f32, %arg1: i32) "None" {
+  // CHECK: llvm.intr.ldexp(%{{.*}}, %{{.*}}) : (f32, i32) -> f32
+  %0 = spirv.CL.ldexp %arg0, %arg1 : f32, i32 -> f32
+  spirv.Return
+}
+
 //===----------------------------------------------------------------------===//
 // Ternary FP OpenCL ops
 //===----------------------------------------------------------------------===//
diff --git a/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir b/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
index e0deafd2824b91..7ed2eb91fe94a5 100644
--- a/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
+++ b/mlir/test/Conversion/SPIRVToLLVM/gl-ops-to-llvm.mlir
@@ -168,6 +168,17 @@ spirv.func @pow(%arg0: f32, %arg1: vector<3xf16>) "None" {
   spirv.Return
 }
 
+//===----------------------------------------------------------------------===//
+// spirv.GL.Ldexp
+//===----------------------------------------------------------------------===//
+
+// CHECK-LABEL: @ldexp
+spirv.func @ldexp(%arg0: f32, %arg1: i32) "None" {
+  // CHECK: llvm.intr.ldexp(%{{.*}}, %{{.*}}) : (f32, i32) -> f32
+  %0 = spirv.GL.Ldexp %arg0 : f32, %arg1 : i32 -> f32
+  spirv.Return
+}
+
 //===----------------------------------------------------------------------===//
 // spirv.GL.Fma
 //===----------------------------------------------------------------------===//

``````````

</details>


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


More information about the Mlir-commits mailing list