Author: Fraser Cormack
Date: 2025-04-29T13:58:13+01:00
New Revision: 78d95cc54455755eaac43d956baed6a3612bc72c

URL: 
https://github.com/llvm/llvm-project/commit/78d95cc54455755eaac43d956baed6a3612bc72c
DIFF: 
https://github.com/llvm/llvm-project/commit/78d95cc54455755eaac43d956baed6a3612bc72c.diff

LOG: [libclc] Move fract to the CLC library (#137785)

The builtin was already vectorized so there's no difference to codegen
for non-SPIR-V targets.

Added: 
    libclc/clc/include/clc/math/clc_fract.h
    libclc/clc/lib/generic/math/clc_fract.cl
    libclc/clc/lib/generic/math/clc_fract.inc

Modified: 
    libclc/clc/lib/generic/SOURCES
    libclc/generic/include/clc/math/fract.h
    libclc/generic/lib/math/fract.cl

Removed: 
    libclc/generic/include/clc/math/fract.inc
    libclc/generic/lib/math/fract.inc


################################################################################
diff  --git a/libclc/generic/include/clc/math/fract.inc 
b/libclc/clc/include/clc/math/clc_fract.h
similarity index 57%
rename from libclc/generic/include/clc/math/fract.inc
rename to libclc/clc/include/clc/math/clc_fract.h
index 72e65d4409041..8ea47d47d914f 100644
--- a/libclc/generic/include/clc/math/fract.inc
+++ b/libclc/clc/include/clc/math/clc_fract.h
@@ -6,6 +6,15 @@
 //
 
//===----------------------------------------------------------------------===//
 
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, global 
__CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, local 
__CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, private 
__CLC_GENTYPE *iptr);
+#ifndef __CLC_MATH_CLC_FRACT_H__
+#define __CLC_MATH_CLC_FRACT_H__
+
+#define __CLC_FUNCTION __clc_fract
+#define __CLC_BODY <clc/math/unary_decl_with_ptr.inc>
+
+#include <clc/math/gentype.inc>
+
+#undef __CLC_BODY
+#undef __CLC_FUNCTION
+
+#endif // __CLC_MATH_CLC_FRACT_H__

diff  --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES
index 4c81a152290a9..dafc69e1d83a4 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -46,6 +46,7 @@ math/clc_fmax.cl
 math/clc_fmin.cl
 math/clc_floor.cl
 math/clc_fmod.cl
+math/clc_fract.cl
 math/clc_frexp.cl
 math/clc_hypot.cl
 math/clc_ldexp.cl

diff  --git a/libclc/clc/lib/generic/math/clc_fract.cl 
b/libclc/clc/lib/generic/math/clc_fract.cl
new file mode 100644
index 0000000000000..7db43ef878710
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_fract.cl
@@ -0,0 +1,17 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <clc/clcmacro.h>
+#include <clc/internal/clc.h>
+#include <clc/math/clc_floor.h>
+#include <clc/math/clc_fmin.h>
+#include <clc/relational/clc_isinf.h>
+#include <clc/relational/clc_isnan.h>
+
+#define __CLC_BODY <clc_fract.inc>
+#include <clc/math/gentype.inc>

diff  --git a/libclc/clc/lib/generic/math/clc_fract.inc 
b/libclc/clc/lib/generic/math/clc_fract.inc
new file mode 100644
index 0000000000000..31d32399e3f03
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_fract.inc
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#if __CLC_FPSIZE == 64
+#define MIN_CONSTANT 0x1.fffffffffffffp-1
+#elif __CLC_FPSIZE == 32
+#define MIN_CONSTANT 0x1.fffffep-1f
+#elif __CLC_FPSIZE == 16
+#define MIN_CONSTANT 0x1.ffcp-1h
+#endif
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract(__CLC_GENTYPE x,
+                                                 private __CLC_GENTYPE *iptr) {
+  *iptr = __clc_floor(x);
+  __CLC_GENTYPE r = __clc_fmin(x - *iptr, MIN_CONSTANT);
+  r = __clc_isinf(x) ? __CLC_FP_LIT(0.0) : r;
+  r = __clc_isnan(x) ? x : r;
+  return r;
+}
+
+#define FRACT_DEF(addrspace)                                                   
\
+  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract(                            
\
+      __CLC_GENTYPE x, addrspace __CLC_GENTYPE *iptr) {                        
\
+    __CLC_GENTYPE private_iptr;                                                
\
+    __CLC_GENTYPE ret = __clc_fract(x, &private_iptr);                         
\
+    *iptr = private_iptr;                                                      
\
+    return ret;                                                                
\
+  }
+
+FRACT_DEF(local);
+FRACT_DEF(global);
+
+#undef MIN_CONSTANT

diff  --git a/libclc/generic/include/clc/math/fract.h 
b/libclc/generic/include/clc/math/fract.h
index 75bce83575b02..8443d4968c985 100644
--- a/libclc/generic/include/clc/math/fract.h
+++ b/libclc/generic/include/clc/math/fract.h
@@ -6,5 +6,7 @@
 //
 
//===----------------------------------------------------------------------===//
 
-#define __CLC_BODY <clc/math/fract.inc>
+#define __CLC_FUNCTION fract
+#define __CLC_BODY <clc/math/unary_decl_with_ptr.inc>
 #include <clc/math/gentype.inc>
+#undef __CLC_FUNCTION

diff  --git a/libclc/generic/lib/math/fract.cl 
b/libclc/generic/lib/math/fract.cl
index 35eb7daa10da9..54a2cf8411665 100644
--- a/libclc/generic/lib/math/fract.cl
+++ b/libclc/generic/lib/math/fract.cl
@@ -7,6 +7,8 @@
 
//===----------------------------------------------------------------------===//
 
 #include <clc/clc.h>
+#include <clc/math/clc_fract.h>
 
-#define __CLC_BODY <fract.inc>
+#define FUNCTION fract
+#define __CLC_BODY <clc/math/unary_def_with_ptr.inc>
 #include <clc/math/gentype.inc>

diff  --git a/libclc/generic/lib/math/fract.inc 
b/libclc/generic/lib/math/fract.inc
deleted file mode 100644
index e6f43b8334a58..0000000000000
--- a/libclc/generic/lib/math/fract.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#if __CLC_FPSIZE == 64
-#define MIN_CONSTANT 0x1.fffffffffffffp-1
-#define ZERO 0.0
-#elif __CLC_FPSIZE == 32
-#define MIN_CONSTANT 0x1.fffffep-1f
-#define ZERO 0.0f
-#elif __CLC_FPSIZE == 16
-#define MIN_CONSTANT 0x1.ffcp-1h
-#define ZERO 0.0h
-#endif
-
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fract(__CLC_GENTYPE x, private 
__CLC_GENTYPE *iptr) {
-  *iptr = floor(x);
-  __CLC_GENTYPE r = fmin(x - *iptr, MIN_CONSTANT);
-  r = isinf(x) ? ZERO : r;
-  r = isnan(x) ? x : r;
-  return r;
-}
-
-
-#define FRACT_DEF(addrspace) \
-  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fract(__CLC_GENTYPE x, addrspace 
__CLC_GENTYPE *iptr) { \
-    __CLC_GENTYPE private_iptr; \
-    __CLC_GENTYPE ret = fract(x, &private_iptr); \
-    *iptr = private_iptr; \
-    return ret; \
- }
-
-FRACT_DEF(local);
-FRACT_DEF(global);
-
-#undef MIN_CONSTANT
-#undef ZERO


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to