[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 19:42:26 PDT 2025


https://github.com/wenju-he created https://github.com/llvm/llvm-project/pull/135301

It looks simpler to use __builtin_clzg for all unsigned types.

>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] [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)



More information about the cfe-commits mailing list