https://github.com/pow2clk updated 
https://github.com/llvm/llvm-project/pull/222746

>From d0dceb09f4a76d6af74e107eb4978d2c6d648234 Mon Sep 17 00:00:00 2001
From: Gregory Roth <[email protected]>
Date: Tue, 8 Sep 2026 09:53:32 -0700
Subject: [PATCH 1/2] [HLSL] Compatibility overloads for scalar min/max

A lot of shaders fail with ambiguous overloads using int and float together in 
min or max calls. This just adds the usual compatibility overload with the 
usual warning for those including testing
---
 clang/lib/Headers/hlsl/hlsl_compat_overloads.h   | 16 ++++++++++++++++
 .../test/CodeGenHLSL/builtins/max-overloads.hlsl | 12 ++++++++++++
 .../test/CodeGenHLSL/builtins/min-overloads.hlsl | 12 ++++++++++++
 3 files changed, 40 insertions(+)

diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h 
b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
index 2c0c7677be36fc..cd6b302ea2a654 100644
--- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
+++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
@@ -28,6 +28,10 @@ namespace hlsl {
   [[deprecated("In 202x mismatched vector/scalar lowering for " #fn " is "     
\
                "deprecated. Explicitly cast parameters.")]]
 
+#define _DXC_DEPRECATED_SCALAR_FN(ty1, ty2, fn)                                
\
+  [[deprecated("In 202x mismatched " #ty1 "/" #ty2 " lowering for " #fn " is " 
\
+               "deprecated. Explicitly cast parameters.")]]
+
 #define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn)                                 
\
   _DXC_DEPRECATED_64BIT_FN(fn)                                                 
\
   constexpr float fn(double V) { return fn((float)V); }                        
\
@@ -517,6 +521,12 @@ constexpr __detail::enable_if_t<(N > 1 && N <= 4), 
vector<T, N>> max(
   return max((vector<T, N>)p0, p1);
 }
 
+_DXC_DEPRECATED_SCALAR_FN(float, int, max)
+constexpr float max(float p0, int p1) { return max(p0, (float)p1); }
+
+_DXC_DEPRECATED_SCALAR_FN(int, float, max)
+constexpr float max(int p0, float p1) { return max((float)p0, p1); }
+
 
//===----------------------------------------------------------------------===//
 // min builtins overloads
 
//===----------------------------------------------------------------------===//
@@ -535,6 +545,12 @@ constexpr __detail::enable_if_t<(N > 1 && N <= 4), 
vector<T, N>> min(
   return min((vector<T, N>)p0, p1);
 }
 
+_DXC_DEPRECATED_SCALAR_FN(float, int, max)
+constexpr float min(float p0, int p1) { return min(p0, (float)p1); }
+
+_DXC_DEPRECATED_SCALAR_FN(int, float, max)
+constexpr float min(int p0, float p1) { return min((float)p0, p1); }
+
 
//===----------------------------------------------------------------------===//
 // normalize builtins overloads
 
//===----------------------------------------------------------------------===//
diff --git a/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl 
b/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
index da5cd8ff375100..9e2a90df4a8b13 100644
--- a/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
+++ b/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
@@ -79,3 +79,15 @@ double4 test_max_double4_mismatch(double4 p0, double p1) { 
return max(p0, p1); }
 // CHECK: [[MAX:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) <4 x double> @llvm.maxnum.v4f64(<4 x double> [[CONV1]], <4 x 
double> %{{.*}})
 // CHECK: ret <4 x double> [[MAX]]
 double4 test_max_double4_mismatch2(double4 p0, double p1) { return max(p1, 
p0); }
+
+// CHECK-LABEL: define hidden noundef nofpclass(nan inf) float 
{{.*}}test_max_float_int_mismatch
+// CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float
+// CHECK: [[MAX:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) float @llvm.maxnum.f32(float {{%.*}}, float [[CONV]])
+// CHECK: ret float [[MAX]]
+float test_max_float_int_mismatch(float p0, int p1) { return max(p0, 1); }
+
+// CHECK-LABEL: define hidden noundef nofpclass(nan inf) float 
{{.*}}test_max_float_int_mismatch2
+// CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float
+// CHECK: [[MAX:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) float @llvm.maxnum.f32(float [[CONV]], float %{{.*}})
+// CHECK: ret float [[MAX]]
+float test_max_float_int_mismatch2(float p0, int p1) { return max(p1, p0); }
diff --git a/clang/test/CodeGenHLSL/builtins/min-overloads.hlsl 
b/clang/test/CodeGenHLSL/builtins/min-overloads.hlsl
index ee3455a07c8e12..be8b45d8b8dfba 100644
--- a/clang/test/CodeGenHLSL/builtins/min-overloads.hlsl
+++ b/clang/test/CodeGenHLSL/builtins/min-overloads.hlsl
@@ -79,3 +79,15 @@ double4 test_min_double4_mismatch(double4 p0, double p1) { 
return min(p0, p1); }
 // CHECK: [[MIN:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) <4 x double> @llvm.minnum.v4f64(<4 x double> [[CONV1]], <4 x 
double> %{{.*}})
 // CHECK: ret <4 x double> [[MIN]]
 double4 test_min_double4_mismatch2(double4 p0, double p1) { return min(p1, 
p0); }
+
+// CHECK-LABEL: define hidden noundef nofpclass(nan inf) float 
{{.*}}test_min_float_int_mismatch
+// CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float
+// CHECK: [[MIN:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) float @llvm.minnum.f32(float {{%.*}}, float [[CONV]])
+// CHECK: ret float [[MIN]]
+float test_min_float_int_mismatch(float p0, int p1) { return min(p0, p1); }
+
+// CHECK-LABEL: define hidden noundef nofpclass(nan inf) float 
{{.*}}test_min_float_int_mismatch2
+// CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float
+// CHECK: [[MIN:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) float @llvm.minnum.f32(float [[CONV]], float %{{.*}})
+// CHECK: ret float [[MIN]]
+float test_min_float_int_mismatch2(float p0, int p1) { return min(p1, p0); }

>From ccc019865d78a965cae301e6f6530680a973ab95 Mon Sep 17 00:00:00 2001
From: Gregory Roth <[email protected]>
Date: Tue, 22 Sep 2026 00:11:16 -0700
Subject: [PATCH 2/2] respond to feedback

correct warning messages for mins

correct parameters for max
---
 clang/lib/Headers/hlsl/hlsl_compat_overloads.h     | 4 ++--
 clang/test/CodeGenHLSL/builtins/max-overloads.hlsl | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h 
b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
index cd6b302ea2a654..53ea7e28ef41da 100644
--- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
+++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h
@@ -545,10 +545,10 @@ constexpr __detail::enable_if_t<(N > 1 && N <= 4), 
vector<T, N>> min(
   return min((vector<T, N>)p0, p1);
 }
 
-_DXC_DEPRECATED_SCALAR_FN(float, int, max)
+_DXC_DEPRECATED_SCALAR_FN(float, int, min)
 constexpr float min(float p0, int p1) { return min(p0, (float)p1); }
 
-_DXC_DEPRECATED_SCALAR_FN(int, float, max)
+_DXC_DEPRECATED_SCALAR_FN(int, float, min)
 constexpr float min(int p0, float p1) { return min((float)p0, p1); }
 
 
//===----------------------------------------------------------------------===//
diff --git a/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl 
b/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
index 9e2a90df4a8b13..0f437eecd0af0f 100644
--- a/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
+++ b/clang/test/CodeGenHLSL/builtins/max-overloads.hlsl
@@ -84,7 +84,7 @@ double4 test_max_double4_mismatch2(double4 p0, double p1) { 
return max(p1, p0);
 // CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float
 // CHECK: [[MAX:%.*]] = call reassoc nnan ninf nsz arcp afn noundef 
nofpclass(nan inf) float @llvm.maxnum.f32(float {{%.*}}, float [[CONV]])
 // CHECK: ret float [[MAX]]
-float test_max_float_int_mismatch(float p0, int p1) { return max(p0, 1); }
+float test_max_float_int_mismatch(float p0, int p1) { return max(p0, p1); }
 
 // CHECK-LABEL: define hidden noundef nofpclass(nan inf) float 
{{.*}}test_max_float_int_mismatch2
 // CHECK: [[CONV:%.*]] = sitofp reassoc nnan ninf nsz arcp afn i32 %{{.*}} to 
float

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to