[libclc] [NFC][libclc] Refine clz to use __builtin_clzg (PR #135301)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 10 20:26:56 PDT 2025
https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/135301
>From 5992cc83e904ce047598a1987e2f8ce1926b9292 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Thu, 10 Apr 2025 19:34:50 -0700
Subject: [PATCH 1/2] [NFC][libclc] Refine clz to use __builtin_clzg
It looks simpler to use __builtin_clzg for all unsigned types.
---
libclc/clc/lib/generic/integer/clc_clz.cl | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/libclc/clc/lib/generic/integer/clc_clz.cl b/libclc/clc/lib/generic/integer/clc_clz.cl
index 74f662375af6b..a38c1d7ea0685 100644
--- a/libclc/clc/lib/generic/integer/clc_clz.cl
+++ b/libclc/clc/lib/generic/integer/clc_clz.cl
@@ -11,35 +11,35 @@
#include <clc/internal/clc.h>
_CLC_OVERLOAD _CLC_DEF char __clc_clz(char x) {
- return __clc_clz((ushort)(uchar)x) - 8;
+ return __clc_clz(__clc_as_uchar(x));
}
_CLC_OVERLOAD _CLC_DEF uchar __clc_clz(uchar x) {
- return __clc_clz((ushort)x) - 8;
+ return __builtin_clzg(x, 8);
}
_CLC_OVERLOAD _CLC_DEF short __clc_clz(short x) {
- return x ? __builtin_clzs(x) : 16;
+ return __clc_clz(__clc_as_ushort(x));
}
_CLC_OVERLOAD _CLC_DEF ushort __clc_clz(ushort x) {
- return x ? __builtin_clzs(x) : 16;
+ return __builtin_clzg(x, 16);
}
_CLC_OVERLOAD _CLC_DEF int __clc_clz(int x) {
- return x ? __builtin_clz(x) : 32;
+ return __clc_clz(__clc_as_uint(x));
}
_CLC_OVERLOAD _CLC_DEF uint __clc_clz(uint x) {
- return x ? __builtin_clz(x) : 32;
+ return __builtin_clzg(x, 32);
}
_CLC_OVERLOAD _CLC_DEF long __clc_clz(long x) {
- return x ? __builtin_clzl(x) : 64;
+ return __clc_clz(__clc_as_ulong(x));
}
_CLC_OVERLOAD _CLC_DEF ulong __clc_clz(ulong x) {
- return x ? __builtin_clzl(x) : 64;
+ return __builtin_clzg(x, 64);
}
_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, char, __clc_clz, char)
>From 2be72b2db81865f777cd45c3bd5b9fc15399eeb8 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Thu, 10 Apr 2025 20:26:44 -0700
Subject: [PATCH 2/2] clang-format
---
libclc/clc/lib/generic/integer/clc_clz.cl | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/libclc/clc/lib/generic/integer/clc_clz.cl b/libclc/clc/lib/generic/integer/clc_clz.cl
index a38c1d7ea0685..71582fca94172 100644
--- a/libclc/clc/lib/generic/integer/clc_clz.cl
+++ b/libclc/clc/lib/generic/integer/clc_clz.cl
@@ -14,9 +14,7 @@ _CLC_OVERLOAD _CLC_DEF char __clc_clz(char x) {
return __clc_clz(__clc_as_uchar(x));
}
-_CLC_OVERLOAD _CLC_DEF uchar __clc_clz(uchar x) {
- return __builtin_clzg(x, 8);
-}
+_CLC_OVERLOAD _CLC_DEF uchar __clc_clz(uchar x) { return __builtin_clzg(x, 8); }
_CLC_OVERLOAD _CLC_DEF short __clc_clz(short x) {
return __clc_clz(__clc_as_ushort(x));
@@ -30,9 +28,7 @@ _CLC_OVERLOAD _CLC_DEF int __clc_clz(int x) {
return __clc_clz(__clc_as_uint(x));
}
-_CLC_OVERLOAD _CLC_DEF uint __clc_clz(uint x) {
- return __builtin_clzg(x, 32);
-}
+_CLC_OVERLOAD _CLC_DEF uint __clc_clz(uint x) { return __builtin_clzg(x, 32); }
_CLC_OVERLOAD _CLC_DEF long __clc_clz(long x) {
return __clc_clz(__clc_as_ulong(x));
More information about the cfe-commits
mailing list