https://github.com/frasercrmck created 
https://github.com/llvm/llvm-project/pull/124097

There were two implementations of this - one that implemented nextafter in 
software, and another that called a clang builtin. No in-tree targets called 
the builtin, so all targets build the software version. The builtin version has 
been removed, and the software version has been renamed to be the "default".

This commit also optimizes nextafter, to avoid scalarization as much as 
possible. Note however that the (CLC) relational builtins still scalarize; 
those will be optimized in a separate commit.

Since nextafter is used by some convert_type builtins, the diff to IR codegen 
is not limited to the builtin itself.

>From cf3dc3c2a3cb2f463988a599ee2c2f2902971d5e Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fra...@codeplay.com>
Date: Mon, 4 Nov 2024 14:35:59 +0000
Subject: [PATCH] [libclc] Move nextafter to the CLC library

There were two implementations of this - one that implemented nextafter
in software, and another that called a clang builtin. No in-tree targets
called the builtin, so all targets build the software version. The
builtin version has been removed, and the software version has been
renamed to be the "default".

This commit also optimizes nextafter, to avoid scalarization as much as
possible. Note however that the (CLC) relational builtins still
scalarize; those will be optimized in a separate commit.

Since nextafter is used by some convert_type builtins, the diff to IR
codegen is not limited to the builtin itself.
---
 libclc/amdgpu/lib/SOURCES                     |  1 -
 libclc/amdgpu/lib/math/nextafter.cl           | 15 -----
 libclc/clc/include/clc/clcmacro.h             | 28 +++++++++
 .../binary_decl_with_scalar_second_arg.inc    |  4 ++
 libclc/clc/include/clc/math/clc_nextafter.h   | 12 ++++
 libclc/clc/include/clc/relational/clc_isnan.h |  7 ---
 libclc/clc/include/clc/shared/binary_decl.inc |  2 +
 libclc/clc/lib/clspv/SOURCES                  |  1 +
 libclc/clc/lib/generic/SOURCES                |  1 +
 libclc/clc/lib/generic/math/clc_nextafter.cl  | 62 +++++++++++++++++++
 libclc/clc/lib/spirv/SOURCES                  |  1 +
 libclc/clc/lib/spirv64/SOURCES                |  1 +
 libclc/clspv/lib/SOURCES                      |  3 +-
 libclc/clspv/lib/math/nextafter.cl            |  5 --
 libclc/clspv/lib/math/nextafter.inc           |  3 -
 .../generic/include/clc/math/binary_decl.inc  |  2 -
 libclc/generic/include/clc/math/fmax.h        |  2 +-
 libclc/generic/include/clc/math/fmin.h        |  2 +-
 libclc/generic/include/math/clc_nextafter.h   |  7 ---
 libclc/generic/lib/SOURCES                    |  1 -
 libclc/generic/lib/math/clc_nextafter.cl      | 49 ---------------
 libclc/generic/lib/math/nextafter.cl          | 18 +++++-
 libclc/ptx/lib/SOURCES                        |  1 -
 libclc/ptx/lib/math/nextafter.cl              | 10 ---
 24 files changed, 130 insertions(+), 108 deletions(-)
 delete mode 100644 libclc/amdgpu/lib/math/nextafter.cl
 create mode 100644 
libclc/clc/include/clc/math/binary_decl_with_scalar_second_arg.inc
 create mode 100644 libclc/clc/include/clc/math/clc_nextafter.h
 create mode 100644 libclc/clc/include/clc/shared/binary_decl.inc
 create mode 100644 libclc/clc/lib/generic/math/clc_nextafter.cl
 delete mode 100644 libclc/clspv/lib/math/nextafter.cl
 delete mode 100644 libclc/clspv/lib/math/nextafter.inc
 delete mode 100644 libclc/generic/include/clc/math/binary_decl.inc
 delete mode 100644 libclc/generic/include/math/clc_nextafter.h
 delete mode 100644 libclc/generic/lib/math/clc_nextafter.cl
 delete mode 100644 libclc/ptx/lib/SOURCES
 delete mode 100644 libclc/ptx/lib/math/nextafter.cl

diff --git a/libclc/amdgpu/lib/SOURCES b/libclc/amdgpu/lib/SOURCES
index b11cbdecf27b9d..24f099d049cd34 100644
--- a/libclc/amdgpu/lib/SOURCES
+++ b/libclc/amdgpu/lib/SOURCES
@@ -10,5 +10,4 @@ math/half_log2.cl
 math/half_recip.cl
 math/half_rsqrt.cl
 math/half_sqrt.cl
-math/nextafter.cl
 math/sqrt.cl
diff --git a/libclc/amdgpu/lib/math/nextafter.cl 
b/libclc/amdgpu/lib/math/nextafter.cl
deleted file mode 100644
index 6dc117b8cdd64c..00000000000000
--- a/libclc/amdgpu/lib/math/nextafter.cl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <clc/clc.h>
-#include <clc/clcmacro.h>
-#include <math/clc_nextafter.h>
-
-_CLC_DEFINE_BINARY_BUILTIN(float, nextafter, __clc_nextafter, float, float)
-
-#ifdef cl_khr_fp64
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-_CLC_DEFINE_BINARY_BUILTIN(double, nextafter, __clc_nextafter, double, double)
-#endif
-
-#ifdef cl_khr_fp16
-#pragma OPENCL EXTENSION cl_khr_fp16 : enable
-_CLC_DEFINE_BINARY_BUILTIN(half, nextafter, __clc_nextafter, half, half)
-#endif
diff --git a/libclc/clc/include/clc/clcmacro.h 
b/libclc/clc/include/clc/clcmacro.h
index 676560e9efcb44..14399811bad938 100644
--- a/libclc/clc/include/clc/clcmacro.h
+++ b/libclc/clc/include/clc/clcmacro.h
@@ -159,6 +159,34 @@
   _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE, 
\
                         ARG2_TYPE)
 
+// FIXME: Make _CLC_DEFINE_BINARY_BUILTIN avoid scalarization by default, and
+// introduce an explicit scalarizing version.
+#define _CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(RET_TYPE, FUNCTION, BUILTIN,   
\
+                                                ARG1_TYPE, ARG2_TYPE)          
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x, ARG2_TYPE y) {         
\
+    return BUILTIN(x, y);                                                      
\
+  }                                                                            
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x,                  
\
+                                              ARG2_TYPE##2 y) {                
\
+    return BUILTIN(x, y);                                                      
\
+  }                                                                            
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x,                  
\
+                                              ARG2_TYPE##3 y) {                
\
+    return BUILTIN(x, y);                                                      
\
+  }                                                                            
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x,                  
\
+                                              ARG2_TYPE##4 y) {                
\
+    return BUILTIN(x, y);                                                      
\
+  }                                                                            
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x,                  
\
+                                              ARG2_TYPE##8 y) {                
\
+    return BUILTIN(x, y);                                                      
\
+  }                                                                            
\
+  _CLC_DEF _CLC_OVERLOAD RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x,                
\
+                                               ARG2_TYPE##16 y) {              
\
+    return BUILTIN(x, y);                                                      
\
+  }
+
 #define _CLC_DEFINE_BINARY_BUILTIN_WITH_SCALAR_SECOND_ARG(                     
\
     RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, ARG2_TYPE)                         
\
   _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE,           
\
diff --git a/libclc/clc/include/clc/math/binary_decl_with_scalar_second_arg.inc 
b/libclc/clc/include/clc/math/binary_decl_with_scalar_second_arg.inc
new file mode 100644
index 00000000000000..92b7b287f64bb7
--- /dev/null
+++ b/libclc/clc/include/clc/math/binary_decl_with_scalar_second_arg.inc
@@ -0,0 +1,4 @@
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE a,
+                                                     __CLC_GENTYPE b);
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE a,
+                                                     __CLC_SCALAR_GENTYPE b);
diff --git a/libclc/clc/include/clc/math/clc_nextafter.h 
b/libclc/clc/include/clc/math/clc_nextafter.h
new file mode 100644
index 00000000000000..599c022c6682b0
--- /dev/null
+++ b/libclc/clc/include/clc/math/clc_nextafter.h
@@ -0,0 +1,12 @@
+#ifndef __CLC_MATH_CLC_NEXTAFTER_H__
+#define __CLC_MATH_CLC_NEXTAFTER_H__
+
+#define __CLC_BODY <clc/shared/binary_decl.inc>
+#define __CLC_FUNCTION __clc_nextafter
+
+#include <clc/math/gentype.inc>
+
+#undef __CLC_BODY
+#undef __CLC_FUNCTION
+
+#endif // __CLC_MATH_CLC_NEXTAFTER_H__
diff --git a/libclc/clc/include/clc/relational/clc_isnan.h 
b/libclc/clc/include/clc/relational/clc_isnan.h
index 3200e593c5cff4..2483a1ab255787 100644
--- a/libclc/clc/include/clc/relational/clc_isnan.h
+++ b/libclc/clc/include/clc/relational/clc_isnan.h
@@ -1,11 +1,6 @@
 #ifndef __CLC_RELATIONAL_CLC_ISNAN_H__
 #define __CLC_RELATIONAL_CLC_ISNAN_H__
 
-#if defined(CLC_CLSPV) || defined(CLC_SPIRV)
-// clspv and spir-v targets provide their own OpenCL-compatible isnan
-#define __clc_isnan isnan
-#else
-
 #include <clc/clcfunc.h>
 #include <clc/clctypes.h>
 
@@ -37,6 +32,4 @@ _CLC_VECTOR_ISNAN_DECL(short, half)
 #undef _CLC_ISNAN_DECL
 #undef _CLC_VECTOR_ISNAN_DECL
 
-#endif
-
 #endif // __CLC_RELATIONAL_CLC_ISNAN_H__
diff --git a/libclc/clc/include/clc/shared/binary_decl.inc 
b/libclc/clc/include/clc/shared/binary_decl.inc
new file mode 100644
index 00000000000000..50fd1df34fd245
--- /dev/null
+++ b/libclc/clc/include/clc/shared/binary_decl.inc
@@ -0,0 +1,2 @@
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x,
+                                                     __CLC_GENTYPE y);
diff --git a/libclc/clc/lib/clspv/SOURCES b/libclc/clc/lib/clspv/SOURCES
index c3fc03c0b3dd5e..81f90a24d00d60 100644
--- a/libclc/clc/lib/clspv/SOURCES
+++ b/libclc/clc/lib/clspv/SOURCES
@@ -2,6 +2,7 @@
 ../generic/math/clc_fabs.cl
 ../generic/math/clc_floor.cl
 ../generic/math/clc_mad.cl
+../generic/math/clc_nextafter.cl
 ../generic/math/clc_rint.cl
 ../generic/math/clc_trunc.cl
 ../generic/relational/clc_select.cl
diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES
index 877a0a390a7452..59dad8e8606891 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -8,6 +8,7 @@ math/clc_ceil.cl
 math/clc_fabs.cl
 math/clc_floor.cl
 math/clc_mad.cl
+math/clc_nextafter.cl
 math/clc_rint.cl
 math/clc_trunc.cl
 relational/clc_all.cl
diff --git a/libclc/clc/lib/generic/math/clc_nextafter.cl 
b/libclc/clc/lib/generic/math/clc_nextafter.cl
new file mode 100644
index 00000000000000..58125485bf6845
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_nextafter.cl
@@ -0,0 +1,62 @@
+#include <clc/clcmacro.h>
+#include <clc/internal/clc.h>
+#include <clc/relational/clc_isnan.h>
+
+// This file provides OpenCL C implementations of __clc_nextafter for
+// targets that don't support the clang builtin.
+
+#define CLC_AS_TYPE(x) __clc_as_##x
+
+#define NEXTAFTER(FLOAT_TYPE, UINT_TYPE, INT_TYPE, INT_TYPE_SCALAR)            
\
+  _CLC_OVERLOAD _CLC_DEF FLOAT_TYPE __clc_nextafter(FLOAT_TYPE x,              
\
+                                                    FLOAT_TYPE y) {            
\
+    const UINT_TYPE sign_bit = (UINT_TYPE)1                                    
\
+                               << (sizeof(INT_TYPE_SCALAR) * 8 - 1);           
\
+    const UINT_TYPE sign_bit_mask = sign_bit - (UINT_TYPE)1;                   
\
+    INT_TYPE ix = CLC_AS_TYPE(INT_TYPE)(x);                                    
\
+    UINT_TYPE ax = CLC_AS_TYPE(UINT_TYPE)(ix) & sign_bit_mask;                 
\
+    INT_TYPE mx = CLC_AS_TYPE(INT_TYPE)(sign_bit) - ix;                        
\
+    mx = CLC_AS_TYPE(INT_TYPE)(ix) < (INT_TYPE)0 ? mx : ix;                    
\
+    INT_TYPE iy = CLC_AS_TYPE(INT_TYPE)(y);                                    
\
+    UINT_TYPE ay = CLC_AS_TYPE(UINT_TYPE)(iy) & sign_bit_mask;                 
\
+    INT_TYPE my = CLC_AS_TYPE(INT_TYPE)(sign_bit) - iy;                        
\
+    my = iy < (INT_TYPE)0 ? my : iy;                                           
\
+    INT_TYPE t = mx + (mx < my ? (INT_TYPE)1 : (INT_TYPE)-1);                  
\
+    INT_TYPE r = CLC_AS_TYPE(INT_TYPE)(sign_bit) - t;                          
\
+    r = t < (INT_TYPE)0 ? r : t;                                               
\
+    r = __clc_isnan(x) ? ix : r;                                               
\
+    r = __clc_isnan(y) ? CLC_AS_TYPE(INT_TYPE)(iy) : r;                        
\
+    r = ((ax | ay) == (UINT_TYPE)0 || ix == iy) ? iy : r;                      
\
+    return CLC_AS_TYPE(FLOAT_TYPE)(r);                                         
\
+  }
+
+NEXTAFTER(float, uint, int, int)
+NEXTAFTER(float2, uint2, int2, int)
+NEXTAFTER(float3, uint3, int3, int)
+NEXTAFTER(float4, uint4, int4, int)
+NEXTAFTER(float8, uint8, int8, int)
+NEXTAFTER(float16, uint16, int16, int)
+
+#ifdef cl_khr_fp64
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+
+NEXTAFTER(double, ulong, long, long)
+NEXTAFTER(double2, ulong2, long2, long)
+NEXTAFTER(double3, ulong3, long3, long)
+NEXTAFTER(double4, ulong4, long4, long)
+NEXTAFTER(double8, ulong8, long8, long)
+NEXTAFTER(double16, ulong16, long16, long)
+
+#endif
+
+#ifdef cl_khr_fp16
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+
+NEXTAFTER(half, ushort, short, short)
+NEXTAFTER(half2, ushort2, short2, short)
+NEXTAFTER(half3, ushort3, short3, short)
+NEXTAFTER(half4, ushort4, short4, short)
+NEXTAFTER(half8, ushort8, short8, short)
+NEXTAFTER(half16, ushort16, short16, short)
+
+#endif
diff --git a/libclc/clc/lib/spirv/SOURCES b/libclc/clc/lib/spirv/SOURCES
index 55d109478faac5..813b1e3d699378 100644
--- a/libclc/clc/lib/spirv/SOURCES
+++ b/libclc/clc/lib/spirv/SOURCES
@@ -6,6 +6,7 @@
 ../generic/math/clc_fabs.cl
 ../generic/math/clc_floor.cl
 ../generic/math/clc_mad.cl
+../generic/math/clc_nextafter.cl
 ../generic/math/clc_rint.cl
 ../generic/math/clc_trunc.cl
 ../generic/relational/clc_select.cl
diff --git a/libclc/clc/lib/spirv64/SOURCES b/libclc/clc/lib/spirv64/SOURCES
index 55d109478faac5..813b1e3d699378 100644
--- a/libclc/clc/lib/spirv64/SOURCES
+++ b/libclc/clc/lib/spirv64/SOURCES
@@ -6,6 +6,7 @@
 ../generic/math/clc_fabs.cl
 ../generic/math/clc_floor.cl
 ../generic/math/clc_mad.cl
+../generic/math/clc_nextafter.cl
 ../generic/math/clc_rint.cl
 ../generic/math/clc_trunc.cl
 ../generic/relational/clc_select.cl
diff --git a/libclc/clspv/lib/SOURCES b/libclc/clspv/lib/SOURCES
index 7c369aa379e985..0d6091ce20e449 100644
--- a/libclc/clspv/lib/SOURCES
+++ b/libclc/clspv/lib/SOURCES
@@ -1,5 +1,4 @@
 math/fma.cl
-math/nextafter.cl
 shared/vstore_half.cl
 subnormal_config.cl
 ../../generic/lib/geometric/distance.cl
@@ -21,7 +20,6 @@ subnormal_config.cl
 ../../generic/lib/math/clc_fmod.cl
 ../../generic/lib/math/clc_hypot.cl
 ../../generic/lib/math/clc_ldexp.cl
-../../generic/lib/math/clc_nextafter.cl
 ../../generic/lib/math/clc_pow.cl
 ../../generic/lib/math/clc_pown.cl
 ../../generic/lib/math/clc_powr.cl
@@ -71,6 +69,7 @@ subnormal_config.cl
 ../../generic/lib/math/minmag.cl
 ../../generic/lib/math/modf.cl
 ../../generic/lib/math/nan.cl
+../../generic/lib/math/nextafter.cl
 ../../generic/lib/math/pow.cl
 ../../generic/lib/math/pown.cl
 ../../generic/lib/math/powr.cl
diff --git a/libclc/clspv/lib/math/nextafter.cl 
b/libclc/clspv/lib/math/nextafter.cl
deleted file mode 100644
index f05e7482136203..00000000000000
--- a/libclc/clspv/lib/math/nextafter.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <clc/clc.h>
-#include <math/clc_nextafter.h>
-
-#define __CLC_BODY <nextafter.inc>
-#include <clc/math/gentype.inc>
diff --git a/libclc/clspv/lib/math/nextafter.inc 
b/libclc/clspv/lib/math/nextafter.inc
deleted file mode 100644
index ee39be53b1e17c..00000000000000
--- a/libclc/clspv/lib/math/nextafter.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-_CLC_DEF _CLC_OVERLOAD __CLC_GENTYPE nextafter(__CLC_GENTYPE x, __CLC_GENTYPE 
y) {
-  return __clc_nextafter(x, y);
-}
diff --git a/libclc/generic/include/clc/math/binary_decl.inc 
b/libclc/generic/include/clc/math/binary_decl.inc
deleted file mode 100644
index 41f07c3b014b7e..00000000000000
--- a/libclc/generic/include/clc/math/binary_decl.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE a, 
__CLC_GENTYPE b);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE a, 
__CLC_SCALAR_GENTYPE b);
diff --git a/libclc/generic/include/clc/math/fmax.h 
b/libclc/generic/include/clc/math/fmax.h
index 71ee859be4f944..2bb475851bae97 100644
--- a/libclc/generic/include/clc/math/fmax.h
+++ b/libclc/generic/include/clc/math/fmax.h
@@ -1,4 +1,4 @@
-#define __CLC_BODY <clc/math/binary_decl.inc>
+#define __CLC_BODY <clc/math/binary_decl_with_scalar_second_arg.inc>
 #define __CLC_FUNCTION fmax
 
 #include <clc/math/gentype.inc>
diff --git a/libclc/generic/include/clc/math/fmin.h 
b/libclc/generic/include/clc/math/fmin.h
index d45f572e08b026..71154cc67b99b0 100644
--- a/libclc/generic/include/clc/math/fmin.h
+++ b/libclc/generic/include/clc/math/fmin.h
@@ -1,4 +1,4 @@
-#define __CLC_BODY <clc/math/binary_decl.inc>
+#define __CLC_BODY <clc/math/binary_decl_with_scalar_second_arg.inc>
 #define __CLC_FUNCTION fmin
 
 #include <clc/math/gentype.inc>
diff --git a/libclc/generic/include/math/clc_nextafter.h 
b/libclc/generic/include/math/clc_nextafter.h
deleted file mode 100644
index 2b674b7079568f..00000000000000
--- a/libclc/generic/include/math/clc_nextafter.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#define __CLC_BODY <clc/math/binary_decl.inc>
-#define __CLC_FUNCTION __clc_nextafter
-
-#include <clc/math/gentype.inc>
-
-#undef __CLC_BODY
-#undef __CLC_FUNCTION
diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES
index 579e909e53d462..217e3bca48b7ac 100644
--- a/libclc/generic/lib/SOURCES
+++ b/libclc/generic/lib/SOURCES
@@ -159,7 +159,6 @@ math/native_sin.cl
 math/native_sqrt.cl
 math/native_tan.cl
 math/tables.cl
-math/clc_nextafter.cl
 math/nextafter.cl
 math/clc_pow.cl
 math/pow.cl
diff --git a/libclc/generic/lib/math/clc_nextafter.cl 
b/libclc/generic/lib/math/clc_nextafter.cl
deleted file mode 100644
index 623eb11c18c3b1..00000000000000
--- a/libclc/generic/lib/math/clc_nextafter.cl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <clc/clc.h>
-#include <clc/clcmacro.h>
-#include <clc/relational/clc_isnan.h>
-
-// This file provides OpenCL C implementations of nextafter for
-// targets that don't support the clang builtin.
-
-#define AS_TYPE(x) as_##x
-
-#define NEXTAFTER(FLOAT_TYPE, UINT_TYPE, INT_TYPE)                             
\
-  _CLC_OVERLOAD _CLC_DEF FLOAT_TYPE __clc_nextafter(FLOAT_TYPE x,              
\
-                                                    FLOAT_TYPE y) {            
\
-    const UINT_TYPE sign_bit = (UINT_TYPE)1 << (sizeof(INT_TYPE) * 8 - 1);     
\
-    const UINT_TYPE sign_bit_mask = sign_bit - 1;                              
\
-    INT_TYPE ix = AS_TYPE(INT_TYPE)(x);                                        
\
-    INT_TYPE ax = ix & sign_bit_mask;                                          
\
-    INT_TYPE mx = sign_bit - ix;                                               
\
-    mx = ix < 0 ? mx : ix;                                                     
\
-    INT_TYPE iy = AS_TYPE(INT_TYPE)(y);                                        
\
-    INT_TYPE ay = iy & sign_bit_mask;                                          
\
-    INT_TYPE my = sign_bit - iy;                                               
\
-    my = iy < 0 ? my : iy;                                                     
\
-    INT_TYPE t = mx + (mx < my ? 1 : -1);                                      
\
-    INT_TYPE r = sign_bit - t;                                                 
\
-    r = t < 0 ? r : t;                                                         
\
-    r = __clc_isnan(x) ? ix : r;                                               
\
-    r = __clc_isnan(y) ? iy : r;                                               
\
-    r = ((ax | ay) == 0 | ix == iy) ? iy : r;                                  
\
-    return AS_TYPE(FLOAT_TYPE)(r);                                             
\
-  }
-
-NEXTAFTER(float, uint, int)
-_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, __clc_nextafter, float,
-                      float)
-
-#ifdef cl_khr_fp64
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-
-NEXTAFTER(double, ulong, long)
-_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __clc_nextafter, double,
-                      double)
-#endif
-
-#ifdef cl_khr_fp16
-#pragma OPENCL EXTENSION cl_khr_fp16 : enable
-
-NEXTAFTER(half, ushort, short)
-_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, __clc_nextafter, half, 
half)
-#endif
diff --git a/libclc/generic/lib/math/nextafter.cl 
b/libclc/generic/lib/math/nextafter.cl
index cbe54cd4e2662a..e0a7b4e457dc06 100644
--- a/libclc/generic/lib/math/nextafter.cl
+++ b/libclc/generic/lib/math/nextafter.cl
@@ -1,12 +1,24 @@
 #include <clc/clc.h>
-#include "../clcmacro.h"
+#include <clc/clcmacro.h>
+#include <clc/math/clc_nextafter.h>
 
-_CLC_DEFINE_BINARY_BUILTIN(float, nextafter, __builtin_nextafterf, float, 
float)
+_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(float, nextafter, __clc_nextafter,
+                                        float, float)
 
 #ifdef cl_khr_fp64
 
 #pragma OPENCL EXTENSION cl_khr_fp64 : enable
 
-_CLC_DEFINE_BINARY_BUILTIN(double, nextafter, __builtin_nextafter, double, 
double)
+_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(double, nextafter, __clc_nextafter,
+                                        double, double)
+
+#endif
+
+#ifdef cl_khr_fp16
+
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+
+_CLC_DEFINE_BINARY_BUILTIN_NO_SCALARIZE(half, nextafter, __clc_nextafter, half,
+                                        half)
 
 #endif
diff --git a/libclc/ptx/lib/SOURCES b/libclc/ptx/lib/SOURCES
deleted file mode 100644
index ff5bff2cea5445..00000000000000
--- a/libclc/ptx/lib/SOURCES
+++ /dev/null
@@ -1 +0,0 @@
-math/nextafter.cl
diff --git a/libclc/ptx/lib/math/nextafter.cl b/libclc/ptx/lib/math/nextafter.cl
deleted file mode 100644
index 809eecac53d8c4..00000000000000
--- a/libclc/ptx/lib/math/nextafter.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <clc/clc.h>
-#include <clc/clcmacro.h>
-#include <math/clc_nextafter.h>
-
-_CLC_DEFINE_BINARY_BUILTIN(float, nextafter, __clc_nextafter, float, float)
-
-#ifdef cl_khr_fp64
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-_CLC_DEFINE_BINARY_BUILTIN(double, nextafter, __clc_nextafter, double, double)
-#endif

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

Reply via email to