[Mlir-commits] [mlir] [mlir][SPIR-V] Add MathToSPIRV conversion for copysign on OpenCL targets (PR #205994)
Arseniy Obolenskiy
llvmlistbot at llvm.org
Fri Jun 26 00:03:00 PDT 2026
https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/205994
None
>From 48873b52ea10e37f65377c9af693f43e5f1bc8cc Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Fri, 26 Jun 2026 09:02:26 +0200
Subject: [PATCH] [mlir][SPIR-V] Add MathToSPIRV conversion for copysign on
OpenCL targets
---
mlir/lib/Conversion/MathToSPIRV/MathToSPIRV.cpp | 7 +++++++
mlir/test/Conversion/MathToSPIRV/math-to-opencl-spirv.mlir | 4 ++++
2 files changed, 11 insertions(+)
diff --git a/mlir/lib/Conversion/MathToSPIRV/MathToSPIRV.cpp b/mlir/lib/Conversion/MathToSPIRV/MathToSPIRV.cpp
index 61dddaf5155d3..e451f4316d4e3 100644
--- a/mlir/lib/Conversion/MathToSPIRV/MathToSPIRV.cpp
+++ b/mlir/lib/Conversion/MathToSPIRV/MathToSPIRV.cpp
@@ -128,6 +128,12 @@ struct CopySignPattern final : public OpConversionPattern<math::CopySignOp> {
failed(res))
return res;
+ // Defer to the CL copysign op on Kernel targets.
+ auto &typeConverter = *getTypeConverter<SPIRVTypeConverter>();
+ if (typeConverter.getTargetEnv().allows(spirv::Capability::Kernel))
+ return rewriter.notifyMatchFailure(copySignOp,
+ "Kernel target has native CL op");
+
Type type = getTypeConverter()->convertType(copySignOp.getType());
if (!type)
return failure();
@@ -684,6 +690,7 @@ void populateMathToSPIRVPatterns(const SPIRVTypeConverter &typeConverter,
CheckedElementwiseOpPattern<math::Atan2Op, spirv::CLAtan2Op>,
CheckedElementwiseOpPattern<math::CbrtOp, spirv::CLCbrtOp>,
CheckedElementwiseOpPattern<math::CeilOp, spirv::CLCeilOp>,
+ CheckedElementwiseOpPattern<math::CopySignOp, spirv::CLCopysignOp>,
CheckedElementwiseOpPattern<math::CosOp, spirv::CLCosOp>,
CheckedElementwiseOpPattern<math::ErfOp, spirv::CLErfOp>,
CheckedElementwiseOpPattern<math::ErfcOp, spirv::CLErfcOp>,
diff --git a/mlir/test/Conversion/MathToSPIRV/math-to-opencl-spirv.mlir b/mlir/test/Conversion/MathToSPIRV/math-to-opencl-spirv.mlir
index 9830f3a5d055e..faa509851a2e2 100644
--- a/mlir/test/Conversion/MathToSPIRV/math-to-opencl-spirv.mlir
+++ b/mlir/test/Conversion/MathToSPIRV/math-to-opencl-spirv.mlir
@@ -132,6 +132,8 @@ func.func @float32_binary_scalar(%lhs: f32, %rhs: f32) {
%0 = math.atan2 %lhs, %rhs : f32
// CHECK: spirv.CL.pow %{{.*}}: f32
%1 = math.powf %lhs, %rhs : f32
+ // CHECK: spirv.CL.copysign %{{.*}}, %{{.*}}: f32
+ %copysign = math.copysign %lhs, %rhs : f32
return
}
@@ -141,6 +143,8 @@ func.func @float32_binary_vector(%lhs: vector<4xf32>, %rhs: vector<4xf32>) {
%0 = math.atan2 %lhs, %rhs : vector<4xf32>
// CHECK: spirv.CL.pow %{{.*}}: vector<4xf32>
%1 = math.powf %lhs, %rhs : vector<4xf32>
+ // CHECK: spirv.CL.copysign %{{.*}}, %{{.*}}: vector<4xf32>
+ %copysign = math.copysign %lhs, %rhs : vector<4xf32>
return
}
More information about the Mlir-commits
mailing list