Skip to content

[libclc] Remove (vload|vstore)_half helpers #137181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions libclc/amdgpu/lib/SOURCES_3.9

This file was deleted.

2 changes: 0 additions & 2 deletions libclc/amdgpu/lib/SOURCES_4.0

This file was deleted.

2 changes: 0 additions & 2 deletions libclc/amdgpu/lib/SOURCES_5.0

This file was deleted.

31 changes: 0 additions & 31 deletions libclc/amdgpu/lib/shared/vload_half_helpers.ll

This file was deleted.

43 changes: 0 additions & 43 deletions libclc/amdgpu/lib/shared/vstore_half_helpers.ll

This file was deleted.

11 changes: 0 additions & 11 deletions libclc/generic/lib/shared/vload.cl
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,7 @@ VLOAD_ADDR_SPACES(half)

/* vload_half are legal even without cl_khr_fp16 */
/* no vload_half for double */
#if __clang_major__ < 6
float __clc_vload_half_float_helper__constant(const __constant half *);
float __clc_vload_half_float_helper__global(const __global half *);
float __clc_vload_half_float_helper__local(const __local half *);
float __clc_vload_half_float_helper__private(const __private half *);

#define VEC_LOAD1(val, AS) \
val = __clc_vload_half_float_helper##AS(&mem[offset++]);
#else
#define VEC_LOAD1(val, AS) val = __builtin_load_halff(&mem[offset++]);
#endif

#define VEC_LOAD2(val, AS) \
VEC_LOAD1(val.lo, AS) \
VEC_LOAD1(val.hi, AS)
Expand Down
82 changes: 30 additions & 52 deletions libclc/generic/lib/shared/vstore.cl
Original file line number Diff line number Diff line change
Expand Up @@ -75,57 +75,35 @@ VSTORE_ADDR_SPACES(double)
VSTORE_ADDR_SPACES(half)
#endif

/* vstore_half are legal even without cl_khr_fp16 */
#if __clang_major__ < 6
#define DECLARE_HELPER(STYPE, AS, builtin) \
void __clc_vstore_half_##STYPE##_helper##AS(STYPE, AS half *);
#else
#define DECLARE_HELPER(STYPE, AS, __builtin) \
_CLC_DEF void __clc_vstore_half_##STYPE##_helper##AS(STYPE s, AS half *d) { \
__builtin(s, d); \
}
#endif

DECLARE_HELPER(float, __private, __builtin_store_halff);
DECLARE_HELPER(float, __global, __builtin_store_halff);
DECLARE_HELPER(float, __local, __builtin_store_halff);

#ifdef cl_khr_fp64
DECLARE_HELPER(double, __private, __builtin_store_half);
DECLARE_HELPER(double, __global, __builtin_store_half);
DECLARE_HELPER(double, __local, __builtin_store_half);
#endif

#define VEC_STORE1(STYPE, AS, val, ROUNDF) \
__clc_vstore_half_##STYPE##_helper##AS(ROUNDF(val), &mem[offset++]);

#define VEC_STORE2(STYPE, AS, val, ROUNDF) \
VEC_STORE1(STYPE, AS, val.lo, ROUNDF) \
VEC_STORE1(STYPE, AS, val.hi, ROUNDF)
#define VEC_STORE3(STYPE, AS, val, ROUNDF) \
VEC_STORE1(STYPE, AS, val.s0, ROUNDF) \
VEC_STORE1(STYPE, AS, val.s1, ROUNDF) \
VEC_STORE1(STYPE, AS, val.s2, ROUNDF)
#define VEC_STORE4(STYPE, AS, val, ROUNDF) \
VEC_STORE2(STYPE, AS, val.lo, ROUNDF) \
VEC_STORE2(STYPE, AS, val.hi, ROUNDF)
#define VEC_STORE8(STYPE, AS, val, ROUNDF) \
VEC_STORE4(STYPE, AS, val.lo, ROUNDF) \
VEC_STORE4(STYPE, AS, val.hi, ROUNDF)
#define VEC_STORE16(STYPE, AS, val, ROUNDF) \
VEC_STORE8(STYPE, AS, val.lo, ROUNDF) \
VEC_STORE8(STYPE, AS, val.hi, ROUNDF)

#define __FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS, ROUNDF) \
#define VEC_STORE1(val, ROUNDF, BUILTIN) BUILTIN(ROUNDF(val), &mem[offset++]);

#define VEC_STORE2(val, ROUNDF, BUILTIN) \
VEC_STORE1(val.lo, ROUNDF, BUILTIN) \
VEC_STORE1(val.hi, ROUNDF, BUILTIN)
#define VEC_STORE3(val, ROUNDF, BUILTIN) \
VEC_STORE1(val.s0, ROUNDF, BUILTIN) \
VEC_STORE1(val.s1, ROUNDF, BUILTIN) \
VEC_STORE1(val.s2, ROUNDF, BUILTIN)
#define VEC_STORE4(val, ROUNDF, BUILTIN) \
VEC_STORE2(val.lo, ROUNDF, BUILTIN) \
VEC_STORE2(val.hi, ROUNDF, BUILTIN)
#define VEC_STORE8(val, ROUNDF, BUILTIN) \
VEC_STORE4(val.lo, ROUNDF, BUILTIN) \
VEC_STORE4(val.hi, ROUNDF, BUILTIN)
#define VEC_STORE16(val, ROUNDF, BUILTIN) \
VEC_STORE8(val.lo, ROUNDF, BUILTIN) \
VEC_STORE8(val.hi, ROUNDF, BUILTIN)

#define __FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, AS, ROUNDF, BUILTIN) \
_CLC_OVERLOAD _CLC_DEF void vstore_half##SUFFIX(TYPE vec, size_t offset, \
AS half *mem) { \
offset *= VEC_SIZE; \
VEC_STORE##VEC_SIZE(STYPE, AS, vec, ROUNDF) \
VEC_STORE##VEC_SIZE(vec, ROUNDF, BUILTIN) \
} \
_CLC_OVERLOAD _CLC_DEF void vstorea_half##SUFFIX(TYPE vec, size_t offset, \
AS half *mem) { \
offset *= OFFSET; \
VEC_STORE##VEC_SIZE(STYPE, AS, vec, ROUNDF) \
VEC_STORE##VEC_SIZE(vec, ROUNDF, BUILTIN) \
}

_CLC_DEF _CLC_OVERLOAD float __clc_noop(float x) { return x; }
Expand Down Expand Up @@ -246,15 +224,15 @@ _CLC_DEF _CLC_OVERLOAD double __clc_rte(double x) {
}
#endif

#define __XFUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS) \
__FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS, __clc_noop) \
__FUNC(SUFFIX##_rtz, VEC_SIZE, OFFSET, TYPE, STYPE, AS, __clc_rtz) \
__FUNC(SUFFIX##_rtn, VEC_SIZE, OFFSET, TYPE, STYPE, AS, __clc_rtn) \
__FUNC(SUFFIX##_rtp, VEC_SIZE, OFFSET, TYPE, STYPE, AS, __clc_rtp) \
__FUNC(SUFFIX##_rte, VEC_SIZE, OFFSET, TYPE, STYPE, AS, __clc_rte)
#define __XFUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, AS, BUILTIN) \
__FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, AS, __clc_noop, BUILTIN) \
__FUNC(SUFFIX##_rtz, VEC_SIZE, OFFSET, TYPE, AS, __clc_rtz, BUILTIN) \
__FUNC(SUFFIX##_rtn, VEC_SIZE, OFFSET, TYPE, AS, __clc_rtn, BUILTIN) \
__FUNC(SUFFIX##_rtp, VEC_SIZE, OFFSET, TYPE, AS, __clc_rtp, BUILTIN) \
__FUNC(SUFFIX##_rte, VEC_SIZE, OFFSET, TYPE, AS, __clc_rte, BUILTIN)

#define FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS) \
__XFUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, STYPE, AS)
#define FUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, AS, BUILTIN) \
__XFUNC(SUFFIX, VEC_SIZE, OFFSET, TYPE, AS, BUILTIN)

#define __CLC_BODY "vstore_half.inc"
#include <clc/math/gentype.inc>
Expand Down
30 changes: 21 additions & 9 deletions libclc/generic/lib/shared/vstore_half.inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@

// This does not exist for fp16
#if __CLC_FPSIZE > 16

#if __CLC_FPSIZE == 32
#define STORE_HALF_BUILTIN __builtin_store_halff
#elif __CLC_FPSIZE == 64
#define STORE_HALF_BUILTIN __builtin_store_half
#else
#error "Invalid FP size"
#endif

#ifndef __CLC_SCALAR

#if __CLC_VECSIZE == 3
Expand All @@ -16,17 +25,20 @@
#define __CLC_OFFSET __CLC_VECSIZE
#endif

FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE,
__CLC_SCALAR_GENTYPE, __private);
FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE,
__CLC_SCALAR_GENTYPE, __local);
FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE,
__CLC_SCALAR_GENTYPE, __global);
FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __private,
STORE_HALF_BUILTIN);
FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __local,
STORE_HALF_BUILTIN);
FUNC(__CLC_VECSIZE, __CLC_VECSIZE, __CLC_OFFSET, __CLC_GENTYPE, __global,
STORE_HALF_BUILTIN);

#undef __CLC_OFFSET
#else
FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __private);
FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __local);
FUNC(, 1, 1, __CLC_GENTYPE, __CLC_SCALAR_GENTYPE, __global);
FUNC(, 1, 1, __CLC_GENTYPE, __private, STORE_HALF_BUILTIN);
FUNC(, 1, 1, __CLC_GENTYPE, __local, STORE_HALF_BUILTIN);
FUNC(, 1, 1, __CLC_GENTYPE, __global, STORE_HALF_BUILTIN);
#endif

#undef STORE_HALF_BUILTIN

#endif
2 changes: 0 additions & 2 deletions libclc/ptx/lib/SOURCES_3.9

This file was deleted.

2 changes: 0 additions & 2 deletions libclc/ptx/lib/SOURCES_4.0

This file was deleted.

2 changes: 0 additions & 2 deletions libclc/ptx/lib/SOURCES_5.0

This file was deleted.

31 changes: 0 additions & 31 deletions libclc/ptx/lib/shared/vload_half_helpers.ll

This file was deleted.

43 changes: 0 additions & 43 deletions libclc/ptx/lib/shared/vstore_half_helpers.ll

This file was deleted.

Loading