Skip to content

Commit fa417d7

Browse files
authored
[libclc] Fix floating-point __clc_atomic_store/exchange cast mismatch (#167625)
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)
1 parent 500e6d8 commit fa417d7

File tree

4 files changed

+24
-17
lines changed

4 files changed

+24
-17
lines changed

libclc/clc/lib/generic/atomic/clc_atomic_def.inc

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,50 @@
2121

2222
#ifdef __CLC_HAS_ATOMIC
2323

24-
#ifndef __CLC_PTR_CASTTYPE
25-
#define __CLC_PTR_CASTTYPE __CLC_GENTYPE
24+
#ifndef __CLC_CASTTYPE
25+
#define __CLC_CASTTYPE __CLC_GENTYPE
2626
#endif
2727

2828
#ifndef __CLC_AS_RETTYPE
2929
#define __CLC_AS_RETTYPE(x) x
3030
#endif
3131

32+
#ifndef __CLC_AS_CASTTYPE
33+
#define __CLC_AS_CASTTYPE(x) x
34+
#endif
35+
3236
#ifdef __CLC_NO_VALUE_ARG
3337
#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \
3438
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \
3539
volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder, \
3640
int MemoryScope) { \
3741
return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION( \
38-
(ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, MemoryOrder, MemoryScope)); \
42+
(ADDRSPACE __CLC_CASTTYPE *)Ptr, MemoryOrder, MemoryScope)); \
3943
}
4044
#elif defined(__CLC_INC_DEC)
4145
#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \
4246
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \
4347
volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder, \
4448
int MemoryScope) { \
45-
return __CLC_AS_RETTYPE( \
46-
__CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, \
47-
(__CLC_GENTYPE)1, MemoryOrder, MemoryScope)); \
49+
return __CLC_IMPL_FUNCTION(Ptr, (__CLC_GENTYPE)1, MemoryOrder, \
50+
MemoryScope); \
4851
}
4952
#elif defined(__CLC_RETURN_VOID)
5053
#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \
5154
_CLC_OVERLOAD _CLC_DEF void __CLC_FUNCTION( \
5255
volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \
5356
int MemoryOrder, int MemoryScope) { \
54-
__CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, Value, \
55-
MemoryOrder, MemoryScope); \
57+
__CLC_IMPL_FUNCTION((ADDRSPACE __CLC_CASTTYPE *)Ptr, \
58+
__CLC_AS_CASTTYPE(Value), MemoryOrder, MemoryScope); \
5659
}
5760
#else
5861
#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \
5962
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION( \
6063
volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value, \
6164
int MemoryOrder, int MemoryScope) { \
62-
return __CLC_AS_RETTYPE( \
63-
__CLC_IMPL_FUNCTION((ADDRSPACE __CLC_PTR_CASTTYPE *)Ptr, Value, \
64-
MemoryOrder, MemoryScope)); \
65+
return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION( \
66+
(ADDRSPACE __CLC_CASTTYPE *)Ptr, __CLC_AS_CASTTYPE(Value), \
67+
MemoryOrder, MemoryScope)); \
6568
}
6669
#endif
6770

libclc/clc/lib/generic/atomic/clc_atomic_exchange.cl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
#define __CLC_BODY <clc_atomic_def.inc>
1515
#include <clc/integer/gentype.inc>
1616

17-
#undef __CLC_PTR_CASTTYPE
17+
#undef __CLC_CASTTYPE
1818
#undef __CLC_AS_RETTYPE
19-
#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN
19+
#undef __CLC_AS_CASTTYPE
20+
#define __CLC_CASTTYPE __CLC_BIT_INTN
2021
#define __CLC_AS_RETTYPE(x) __CLC_AS_GENTYPE(x)
22+
#define __CLC_AS_CASTTYPE __CLC_AS_S_GENTYPE
2123

2224
#define __CLC_BODY <clc_atomic_def.inc>
2325
#include <clc/math/gentype.inc>

libclc/clc/lib/generic/atomic/clc_atomic_load.cl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
#define __CLC_BODY <clc_atomic_def.inc>
1616
#include <clc/integer/gentype.inc>
1717

18-
#undef __CLC_PTR_CASTTYPE
18+
#undef __CLC_CASTTYPE
1919
#undef __CLC_AS_RETTYPE
20-
#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN
20+
#define __CLC_CASTTYPE __CLC_BIT_INTN
2121
#define __CLC_AS_RETTYPE(x) __CLC_AS_GENTYPE(x)
2222

2323
#define __CLC_BODY <clc_atomic_def.inc>

libclc/clc/lib/generic/atomic/clc_atomic_store.cl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
#define __CLC_BODY <clc_atomic_def.inc>
1616
#include <clc/integer/gentype.inc>
1717

18-
#undef __CLC_PTR_CASTTYPE
19-
#define __CLC_PTR_CASTTYPE __CLC_BIT_INTN
18+
#undef __CLC_CASTTYPE
19+
#undef __CLC_AS_CASTTYPE
20+
#define __CLC_CASTTYPE __CLC_BIT_INTN
21+
#define __CLC_AS_CASTTYPE __CLC_AS_S_GENTYPE
2022

2123
#define __CLC_BODY <clc_atomic_def.inc>
2224
#include <clc/math/gentype.inc>

0 commit comments

Comments
 (0)