Author: Wenju He
Date: 2025-10-27T12:58:14+08:00
New Revision: a61e016565409b6a6620422dd915e591ea75f998

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

LOG: [libclc] Implement integer __clc_abs using __builtin_elementwise_abs 
(#164957)

Previous implementation was cmp, select and @llvm.smax sequence in LLVM IR.
__CLC_GEN_U/__CLC_GEN_S is upstreamed from intel/llvm repo.

Added: 
    

Modified: 
    libclc/clc/include/clc/integer/gentype.inc
    libclc/clc/lib/generic/integer/clc_abs.inc

Removed: 
    


################################################################################
diff  --git a/libclc/clc/include/clc/integer/gentype.inc 
b/libclc/clc/include/clc/integer/gentype.inc
index b2b603e272573..acca8632de32a 100644
--- a/libclc/clc/include/clc/integer/gentype.inc
+++ b/libclc/clc/include/clc/integer/gentype.inc
@@ -23,6 +23,7 @@
 // to keep this file manageable.
 #define __CLC_GENSIZE 8
 #define __CLC_SCALAR_GENTYPE char
+#define __CLC_GEN_S
 
 #define __CLC_GENTYPE char
 #define __CLC_U_GENTYPE uchar
@@ -93,6 +94,8 @@
 
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE uchar
+#undef __CLC_GEN_S
+#define __CLC_GEN_U
 
 #define __CLC_GENTYPE uchar
 #define __CLC_U_GENTYPE uchar
@@ -165,6 +168,8 @@
 #define __CLC_GENSIZE 16
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE short
+#undef __CLC_GEN_U
+#define __CLC_GEN_S
 
 #define __CLC_GENTYPE short
 #define __CLC_U_GENTYPE ushort
@@ -235,6 +240,8 @@
 
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE ushort
+#undef __CLC_GEN_S
+#define __CLC_GEN_U
 
 #define __CLC_GENTYPE ushort
 #define __CLC_U_GENTYPE ushort
@@ -307,6 +314,8 @@
 #define __CLC_GENSIZE 32
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE int
+#undef __CLC_GEN_U
+#define __CLC_GEN_S
 
 #define __CLC_GENTYPE int
 #define __CLC_U_GENTYPE uint
@@ -377,6 +386,8 @@
 
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE uint
+#undef __CLC_GEN_S
+#define __CLC_GEN_U
 
 #define __CLC_GENTYPE uint
 #define __CLC_U_GENTYPE uint
@@ -449,6 +460,8 @@
 #define __CLC_GENSIZE 64
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE long
+#undef __CLC_GEN_U
+#define __CLC_GEN_S
 
 #define __CLC_GENTYPE long
 #define __CLC_U_GENTYPE ulong
@@ -519,6 +532,8 @@
 
 #undef __CLC_SCALAR_GENTYPE
 #define __CLC_SCALAR_GENTYPE ulong
+#undef __CLC_GEN_S
+#define __CLC_GEN_U
 
 #define __CLC_GENTYPE ulong
 #define __CLC_U_GENTYPE ulong
@@ -588,6 +603,8 @@
 #undef __CLC_S_GENTYPE
 #undef __CLC_VECSIZE_OR_1
 
+#undef __CLC_GEN_U
+
 #undef __CLC_GENSIZE
 #undef __CLC_SCALAR_GENTYPE
 #undef __CLC_BODY

diff  --git a/libclc/clc/lib/generic/integer/clc_abs.inc 
b/libclc/clc/lib/generic/integer/clc_abs.inc
index 26ec0b24ffb96..81e92461bab9e 100644
--- a/libclc/clc/lib/generic/integer/clc_abs.inc
+++ b/libclc/clc/lib/generic/integer/clc_abs.inc
@@ -6,7 +6,14 @@
 //
 
//===----------------------------------------------------------------------===//
 
+#ifdef __CLC_GEN_S
+
 _CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE __clc_abs(__CLC_GENTYPE x) {
-  return __builtin_astype((__CLC_GENTYPE)(x > (__CLC_GENTYPE)(0) ? x : -x),
-                          __CLC_U_GENTYPE);
+  return __builtin_astype(__builtin_elementwise_abs(x), __CLC_U_GENTYPE);
 }
+
+#else
+
+_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE __clc_abs(__CLC_GENTYPE x) { return x; }
+
+#endif


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

Reply via email to