From 227ec520f7487f85b08e48c43077a94755da4cc3 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 12 Nov 2025 03:49:58 +0100 Subject: [PATCH 1/4] [libclc] Fix floating-point __clc_atomic_store cast mismatch When pointer element type is casted to integer type, the stored value should be casted to integer type to avoid type mistmatch. LLVM IR change in function _Z18__clc_atomic_storePU3AS1Vffii: > %5 = bitcast float %1 to i32 (New) < %5 = fptosi float %1 to i32 (Old) --- libclc/clc/lib/generic/atomic/clc_atomic_def.inc | 8 ++++++-- libclc/clc/lib/generic/atomic/clc_atomic_store.cl | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc index 14a09b1f09f5c..c54d6abbc741d 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc +++ b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc @@ -29,6 +29,10 @@ #define __CLC_AS_RETTYPE(x) x #endif +#ifndef __CLC_AS_INTTYPE +#define __CLC_AS_INTTYPE(x) x +#endif + #ifdef __CLC_NO_VALUE_ARG #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \ @@ -51,8 +55,8 @@ _CLC_OVERLOAD _CLC_DEF void __CLC_FUNCTION( \ volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \ int MemoryOrder, int MemoryScope) { \ - __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, Value, \ - MemoryOrder, MemoryScope); \ + __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, \ + __CLC_AS_INTTYPE(Value), MemoryOrder, MemoryScope); \ } #else #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl index a93d21e8430ce..7c0803006c2f7 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl @@ -17,6 +17,8 @@ #undef __CLC_PTR_CASTTYPE #define __CLC_PTR_CASTTYPE __CLC_BIT_INTN +#undef __CLC_AS_INTTYPE +#define __CLC_AS_INTTYPE __CLC_AS_S_GENTYPE #define __CLC_BODY #include From 2c75b2300a51b28935dbf3bd630b3d499238053d Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 12 Nov 2025 04:10:44 +0100 Subject: [PATCH 2/4] fix clc_atomic_exchange --- libclc/clc/lib/generic/atomic/clc_atomic_def.inc | 9 ++++----- libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl | 2 ++ libclc/clc/lib/generic/atomic/clc_atomic_store.cl | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc index c54d6abbc741d..00b1acb84dc16 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc +++ b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc @@ -47,8 +47,7 @@ volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder, \ int MemoryScope) { \ return __CLC_AS_RETTYPE( \ - __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, \ - (__CLC_GENTYPE)1, MemoryOrder, MemoryScope)); \ + __CLC_IMPL_FUNCTION(Ptr, (__CLC_GENTYPE)1, MemoryOrder, MemoryScope)); \ } #elif defined(__CLC_RETURN_VOID) #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ @@ -63,9 +62,9 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \ volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \ int MemoryOrder, int MemoryScope) { \ - return __CLC_AS_RETTYPE( \ - __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, Value, \ - MemoryOrder, MemoryScope)); \ + return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION( \ + (ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, __CLC_AS_INTTYPE(Value), \ + MemoryOrder, MemoryScope)); \ } #endif diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl b/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl index ee80256d3dbb6..21c3261100365 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl @@ -16,8 +16,10 @@ #undef __CLC_PTR_CASTTYPE #undef __CLC_AS_RETTYPE +#undef __CLC_AS_INTTYPE #define __CLC_PTR_CASTTYPE __CLC_BIT_INTN #define __CLC_AS_RETTYPE(x) __CLC_AS_GENTYPE(x) +#define __CLC_AS_INTTYPE __CLC_AS_S_GENTYPE #define __CLC_BODY #include diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl index 7c0803006c2f7..37fb8fdfdcb15 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl @@ -16,8 +16,8 @@ #include #undef __CLC_PTR_CASTTYPE -#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN #undef __CLC_AS_INTTYPE +#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN #define __CLC_AS_INTTYPE __CLC_AS_S_GENTYPE #define __CLC_BODY From 5da2b0ec371703a113c5540c3ee3cc43caf5bee9 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 12 Nov 2025 04:19:47 +0100 Subject: [PATCH 3/4] remove __CLC_AS_RETTYPE from inc/dec --- libclc/clc/lib/generic/atomic/clc_atomic_def.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc index 00b1acb84dc16..26a4c87223b0e 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc +++ b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc @@ -46,8 +46,8 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \ volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder, \ int MemoryScope) { \ - return __CLC_AS_RETTYPE( \ - __CLC_IMPL_FUNCTION(Ptr, (__CLC_GENTYPE)1, MemoryOrder, MemoryScope)); \ + return __CLC_IMPL_FUNCTION(Ptr, (__CLC_GENTYPE)1, MemoryOrder, \ + MemoryScope); \ } #elif defined(__CLC_RETURN_VOID) #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ From 2b79dc446fa53a6c0f6ca40a5d991cd16f46666a Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 12 Nov 2025 04:27:31 +0100 Subject: [PATCH 4/4] rename __CLC_PTR_CASTTYPE to __CLC_CASTTYPE, rename __CLC_AS_INTTYPE to __CLC_AS_CASTTYPE --- libclc/clc/lib/generic/atomic/clc_atomic_def.inc | 16 ++++++++-------- .../lib/generic/atomic/clc_atomic_exchange.cl | 8 ++++---- libclc/clc/lib/generic/atomic/clc_atomic_load.cl | 4 ++-- .../clc/lib/generic/atomic/clc_atomic_store.cl | 8 ++++---- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc index 26a4c87223b0e..75561430b33ad 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_def.inc +++ b/libclc/clc/lib/generic/atomic/clc_atomic_def.inc @@ -21,16 +21,16 @@ #ifdef __CLC_HAS_ATOMIC -#ifndef __CLC_PTR_CASTTYPE -#define __CLC_PTR_CASTTYPE __CLC_GENTYPE +#ifndef __CLC_CASTTYPE +#define __CLC_CASTTYPE __CLC_GENTYPE #endif #ifndef __CLC_AS_RETTYPE #define __CLC_AS_RETTYPE(x) x #endif -#ifndef __CLC_AS_INTTYPE -#define __CLC_AS_INTTYPE(x) x +#ifndef __CLC_AS_CASTTYPE +#define __CLC_AS_CASTTYPE(x) x #endif #ifdef __CLC_NO_VALUE_ARG @@ -39,7 +39,7 @@ volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder, \ int MemoryScope) { \ return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION( \ - (ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, MemoryOrder, MemoryScope)); \ + (ADDRSPACE __CLC_CASTTYPE *)Ptr, MemoryOrder, MemoryScope)); \ } #elif defined(__CLC_INC_DEC) #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ @@ -54,8 +54,8 @@ _CLC_OVERLOAD _CLC_DEF void __CLC_FUNCTION( \ volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \ int MemoryOrder, int MemoryScope) { \ - __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, \ - __CLC_AS_INTTYPE(Value), MemoryOrder, MemoryScope); \ + __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_CASTTYPE *)Ptr, \ + __CLC_AS_CASTTYPE(Value), MemoryOrder, MemoryScope); \ } #else #define __CLC_DEFINE_ATOMIC(ADDRSPACE) \ @@ -63,7 +63,7 @@ volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \ int MemoryOrder, int MemoryScope) { \ return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION( \ - (ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, __CLC_AS_INTTYPE(Value), \ + (ADDRSPACE __CLC_CASTTYPE *)Ptr, __CLC_AS_CASTTYPE(Value), \ MemoryOrder, MemoryScope)); \ } #endif diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl b/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl index 21c3261100365..b2c26758103cd 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl @@ -14,12 +14,12 @@ #define __CLC_BODY #include -#undef __CLC_PTR_CASTTYPE +#undef __CLC_CASTTYPE #undef __CLC_AS_RETTYPE -#undef __CLC_AS_INTTYPE -#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN +#undef __CLC_AS_CASTTYPE +#define __CLC_CASTTYPE __CLC_BIT_INTN #define __CLC_AS_RETTYPE(x) __CLC_AS_GENTYPE(x) -#define __CLC_AS_INTTYPE __CLC_AS_S_GENTYPE +#define __CLC_AS_CASTTYPE __CLC_AS_S_GENTYPE #define __CLC_BODY #include diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_load.cl b/libclc/clc/lib/generic/atomic/clc_atomic_load.cl index f7fe2510569e4..af808553a7110 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_load.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_load.cl @@ -15,9 +15,9 @@ #define __CLC_BODY #include -#undef __CLC_PTR_CASTTYPE +#undef __CLC_CASTTYPE #undef __CLC_AS_RETTYPE -#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN +#define __CLC_CASTTYPE __CLC_BIT_INTN #define __CLC_AS_RETTYPE(x) __CLC_AS_GENTYPE(x) #define __CLC_BODY diff --git a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl index 37fb8fdfdcb15..66ae2ba98556d 100644 --- a/libclc/clc/lib/generic/atomic/clc_atomic_store.cl +++ b/libclc/clc/lib/generic/atomic/clc_atomic_store.cl @@ -15,10 +15,10 @@ #define __CLC_BODY #include -#undef __CLC_PTR_CASTTYPE -#undef __CLC_AS_INTTYPE -#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN -#define __CLC_AS_INTTYPE __CLC_AS_S_GENTYPE +#undef __CLC_CASTTYPE +#undef __CLC_AS_CASTTYPE +#define __CLC_CASTTYPE __CLC_BIT_INTN +#define __CLC_AS_CASTTYPE __CLC_AS_S_GENTYPE #define __CLC_BODY #include