[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.
This commit is contained in:
Wenju He
2025-10-27 12:58:14 +08:00
committed by GitHub
parent 81de86123f
commit a61e016565
2 changed files with 26 additions and 2 deletions

View File

@@ -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

View File

@@ -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