https://github.com/lknknm updated 
https://github.com/llvm/llvm-project/pull/225167

>From 888c5180303853f772d911248891a7e43c033051 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Sat, 19 Sep 2026 18:27:51 +0200
Subject: [PATCH 1/7] copysign to ExprConstant

---
 clang/include/clang/Basic/Builtins.td | 1 -
 clang/lib/AST/ExprConstant.cpp        | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/include/clang/Basic/Builtins.td 
b/clang/include/clang/Basic/Builtins.td
index 90340ad7f812c..31f235c490e9a 100644
--- a/clang/include/clang/Basic/Builtins.td
+++ b/clang/include/clang/Basic/Builtins.td
@@ -4056,7 +4056,6 @@ def Copysign : FPMathTemplate, LibBuiltin<"math.h"> {
   let Attributes = [NoThrow, Const];
   let Prototype = "T(T, T)";
   let AddBuiltinPrefixedAlias = 1;
-  let OnlyBuiltinPrefixedAliasIsConstexpr = 1;
 }
 
 def Fabs : FPMathTemplate, LibBuiltin<"math.h"> {
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 9242491832841..fd61fb8d6a976 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -20605,6 +20605,7 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr 
*E) {
   // FIXME: Builtin::BI__builtin_powif
   // FIXME: Builtin::BI__builtin_powil
 
+  case Builtin::BIcopysign:
   case Builtin::BI__builtin_copysign:
   case Builtin::BI__builtin_copysignf:
   case Builtin::BI__builtin_copysignl:

>From 4374300e1c5812cfa945975790f241c5eb138105 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Sun, 20 Sep 2026 23:18:48 +0200
Subject: [PATCH 2/7] add: simple test case to understand if it is working

---
 clang/test/Sema/constant-builtins-2.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/clang/test/Sema/constant-builtins-2.c 
b/clang/test/Sema/constant-builtins-2.c
index fd3643bbdb7c8..c40a31c214fed 100644
--- a/clang/test/Sema/constant-builtins-2.c
+++ b/clang/test/Sema/constant-builtins-2.c
@@ -251,6 +251,10 @@ __extension__ _Static_assert(
   1, ""
 );
 
+__extension__ _Static_assert(
+ __builtin_copysign(1.0, 1.0) == 1.0 
+, "");
+
 //double       g19 = __builtin_powi(2.0, 4);
 //float        g20 = __builtin_powif(2.0f, 4);
 //long double  g21 = __builtin_powil(2.0L, 4);

>From c630680dc54c84fef8ac1a7ebf0a1942ae4aadda Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Mon, 21 Sep 2026 19:57:24 +0200
Subject: [PATCH 3/7] Add: Constexpr to copysign

---
 clang/include/clang/Basic/Builtins.td | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/Basic/Builtins.td 
b/clang/include/clang/Basic/Builtins.td
index 31f235c490e9a..87c28981e9a35 100644
--- a/clang/include/clang/Basic/Builtins.td
+++ b/clang/include/clang/Basic/Builtins.td
@@ -244,7 +244,7 @@ def Atan2F16F128 : Builtin, F16F128MathTemplate {
 
 def CopysignF16 : Builtin {
   let Spellings = ["__builtin_copysignf16"];
-  let Attributes = [FunctionWithBuiltinPrefix, NoThrow, Const];
+  let Attributes = [FunctionWithBuiltinPrefix, NoThrow, Const, Constexpr];
   let Prototype = "__fp16(__fp16, __fp16)";
 }
 
@@ -4053,7 +4053,7 @@ def Atan2 : FPMathTemplate, LibBuiltin<"math.h"> {
 
 def Copysign : FPMathTemplate, LibBuiltin<"math.h"> {
   let Spellings = ["copysign"];
-  let Attributes = [NoThrow, Const];
+  let Attributes = [NoThrow, Const, Constexpr];
   let Prototype = "T(T, T)";
   let AddBuiltinPrefixedAlias = 1;
 }

>From f8f973bf78c3684c8e1e8b6a662cbec90ff843c5 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Mon, 21 Sep 2026 20:20:10 +0200
Subject: [PATCH 4/7] add: copysign double tests

---
 clang/test/Sema/constant-builtins-2.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/clang/test/Sema/constant-builtins-2.c 
b/clang/test/Sema/constant-builtins-2.c
index c40a31c214fed..5a790b6d10584 100644
--- a/clang/test/Sema/constant-builtins-2.c
+++ b/clang/test/Sema/constant-builtins-2.c
@@ -252,7 +252,15 @@ __extension__ _Static_assert(
 );
 
 __extension__ _Static_assert(
- __builtin_copysign(1.0, 1.0) == 1.0 
+  // double
+  __builtin_copysign(1.0, 1.0) == 1.0 && __builtin_copysign(1.0, -1.0) == -1.0 
&&                           \
+  __builtin_copysign(-1.0, 1.0) == 1.0 && __builtin_copysign(-1.0, -1.0) == 
-1.0  &&                        \
+  !__builtin_signbit(__builtin_copysign(0.0, 1.0)) && 
__builtin_signbit(__builtin_copysign(0.0, -1.0)) &&   \
+  !__builtin_signbit(__builtin_copysign(-0.0, 1.0)) && 
__builtin_signbit(__builtin_copysign(-0.0, -1.0)) && \
+  __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 
&&                          \
+
+  // floating-point  
+  // long double
 , "");
 
 //double       g19 = __builtin_powi(2.0, 4);

>From f86844ac3f51652bfc1aeddd7b3c6220e02d1dfd Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Mon, 21 Sep 2026 20:28:35 +0200
Subject: [PATCH 5/7] add: all copysign tests

---
 clang/test/Sema/constant-builtins-2.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/clang/test/Sema/constant-builtins-2.c 
b/clang/test/Sema/constant-builtins-2.c
index 5a790b6d10584..498a7af94490b 100644
--- a/clang/test/Sema/constant-builtins-2.c
+++ b/clang/test/Sema/constant-builtins-2.c
@@ -257,11 +257,32 @@ __extension__ _Static_assert(
   __builtin_copysign(-1.0, 1.0) == 1.0 && __builtin_copysign(-1.0, -1.0) == 
-1.0  &&                        \
   !__builtin_signbit(__builtin_copysign(0.0, 1.0)) && 
__builtin_signbit(__builtin_copysign(0.0, -1.0)) &&   \
   !__builtin_signbit(__builtin_copysign(-0.0, 1.0)) && 
__builtin_signbit(__builtin_copysign(-0.0, -1.0)) && \
-  __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 
&&                          \
+  __builtin_copysign(1.0, 0.0) == 1.0 && __builtin_copysign(1.0, -0.0) == -1.0 
&&                           \
 
   // floating-point  
+  __builtin_copysignf(1.0f, 1.0f) == 1.0f && __builtin_copysignf(1.0f, -1.0f) 
== -1.0f &&                         \
+  __builtin_copysignf(-1.0f, 1.0f) == 1.0f && __builtin_copysignf(-1.0f, 
-1.0f) == -1.0f  &&                      \
+  !__builtin_signbit(__builtin_copysignf(0.0f, 1.0f)) && 
__builtin_signbit(__builtin_copysignf(0.0f, -1.0f)) &&   \
+  !__builtin_signbit(__builtin_copysignf(-0.0f, 1.0f)) && 
__builtin_signbit(__builtin_copysignf(-0.0f, -1.0f)) && \
+  __builtin_copysignf(1.0f, 0.0f) == 1.0f && __builtin_copysignf(1.0f, -0.0f) 
== -1.0f &&                         \
+
   // long double
-, "");
+  __builtin_copysignl(1.0L, 1.0L) == 1.0L && __builtin_copysignl(1.0L, -1.0L) 
== -1.0L &&                           \
+  __builtin_copysignl(-1.0L, 1.0L) == 1.0L && __builtin_copysignl(-1.0L, 
-1.0L) == -1.0L &&                         \
+  !__builtin_signbitl(__builtin_copysignl(0.0L, 1.0L)) && 
__builtin_signbitl(__builtin_copysignl(0.0L, -1.0L)) &&   \
+  !__builtin_signbitl(__builtin_copysignl(-0.0L, 1.0L)) && 
__builtin_signbitl(__builtin_copysignl(-0.0L, -1.0L)) && \
+  __builtin_copysignl(1.0L, 0.0L) == 1.0L && __builtin_copysignl(1.0L, -0.0L) 
== -1.0L &&                           \
+
+#if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
+  // __float128 
+  __builtin_copysignf128(1.0q, 1.0q) == 1.0q && __builtin_copysignf128(1.0q, 
-1.0q) == -1.0q &&                         \
+  __builtin_copysignf128(-1.0q, 1.0q) == 1.0q && __builtin_copysignf128(-1.0q, 
-1.0q) == -1.0q &&                       \
+  !__builtin_signbit(__builtin_copysignf128(0.0q, 1.0q)) && 
__builtin_signbit(__builtin_copysignf128(0.0q, -1.0q)) &&   \
+  !__builtin_signbit(__builtin_copysignf128(-0.0q, 1.0q)) && 
__builtin_signbit(__builtin_copysignf128(-0.0q, -1.0q)) && \
+  __builtin_copysignf128(1.0q, 0.0q) == 1.0q && __builtin_copysignf128(1.0q, 
-0.0q) == -1.0q  &&
+#endif
+  1, ""
+);
 
 //double       g19 = __builtin_powi(2.0, 4);
 //float        g20 = __builtin_powif(2.0f, 4);

>From d7d04e99651578bc400e3e2c990b4ceabea4de77 Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Tue, 22 Sep 2026 09:35:25 +0200
Subject: [PATCH 6/7] add: BIcopysign to InterpBuiltin.cpp

---
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index 843850af334a2..d52e9f397b7d1 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -4666,6 +4666,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const 
CallExpr *Call,
   case Builtin::BI__builtin_inff128:
     return interp__builtin_inf(S, OpPC, Frame, Call);
 
+  case Builtin::BIcopysign:
   case Builtin::BI__builtin_copysign:
   case Builtin::BI__builtin_copysignf:
   case Builtin::BI__builtin_copysignl:

>From 8dbc23c2a7342a33e7c4fa0184a61872fd176afb Mon Sep 17 00:00:00 2001
From: Lucas Mellone <[email protected]>
Date: Tue, 22 Sep 2026 10:41:36 +0200
Subject: [PATCH 7/7] add BIcopysignf and BIcopysignl

---
 clang/lib/AST/ByteCode/InterpBuiltin.cpp | 2 ++
 clang/lib/AST/ExprConstant.cpp           | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp 
b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
index d52e9f397b7d1..fc67359a5e5ac 100644
--- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp
+++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp
@@ -4667,6 +4667,8 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const 
CallExpr *Call,
     return interp__builtin_inf(S, OpPC, Frame, Call);
 
   case Builtin::BIcopysign:
+  case Builtin::BIcopysignf:
+  case Builtin::BIcopysignl:
   case Builtin::BI__builtin_copysign:
   case Builtin::BI__builtin_copysignf:
   case Builtin::BI__builtin_copysignl:
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index fd61fb8d6a976..f5ccbdc0f5b04 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -20606,6 +20606,8 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr 
*E) {
   // FIXME: Builtin::BI__builtin_powil
 
   case Builtin::BIcopysign:
+  case Builtin::BIcopysignf:
+  case Builtin::BIcopysignl:
   case Builtin::BI__builtin_copysign:
   case Builtin::BI__builtin_copysignf:
   case Builtin::BI__builtin_copysignl:

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

Reply via email to