[clang] [libc] [lld] [llvm] Ugly example of building libc to spirv (PR #128585)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 24 13:59:24 PST 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 72791fef6d6c84b72cb961b288b25283bea97310 874f408032cdb12188810a06c9b68d90c35deecb --extensions cpp,c,h -- libc/src/math/spirv64/acos.cpp libc/src/math/spirv64/acosf.cpp libc/src/math/spirv64/acosh.cpp libc/src/math/spirv64/acoshf.cpp libc/src/math/spirv64/asin.cpp libc/src/math/spirv64/asinf.cpp libc/src/math/spirv64/asinh.cpp libc/src/math/spirv64/asinhf.cpp libc/src/math/spirv64/atan.cpp libc/src/math/spirv64/atan2.cpp libc/src/math/spirv64/atan2f.cpp libc/src/math/spirv64/atanf.cpp libc/src/math/spirv64/atanh.cpp libc/src/math/spirv64/atanhf.cpp libc/src/math/spirv64/ceil.cpp libc/src/math/spirv64/ceilf.cpp libc/src/math/spirv64/copysign.cpp libc/src/math/spirv64/copysignf.cpp libc/src/math/spirv64/cos.cpp libc/src/math/spirv64/cosf.cpp libc/src/math/spirv64/cosh.cpp libc/src/math/spirv64/coshf.cpp libc/src/math/spirv64/declarations.h libc/src/math/spirv64/erf.cpp libc/src/math/spirv64/erff.cpp libc/src/math/spirv64/exp.cpp libc/src/math/spirv64/exp10.cpp libc/src/math/spirv64/exp10f.cpp libc/src/math/spirv64/exp2.cpp libc/src/math/spirv64/exp2f.cpp libc/src/math/spirv64/expf.cpp libc/src/math/spirv64/expm1.cpp libc/src/math/spirv64/expm1f.cpp libc/src/math/spirv64/fabs.cpp libc/src/math/spirv64/fabsf.cpp libc/src/math/spirv64/fdim.cpp libc/src/math/spirv64/fdimf.cpp libc/src/math/spirv64/floor.cpp libc/src/math/spirv64/floorf.cpp libc/src/math/spirv64/fma.cpp libc/src/math/spirv64/fmaf.cpp libc/src/math/spirv64/fmax.cpp libc/src/math/spirv64/fmaxf.cpp libc/src/math/spirv64/fmin.cpp libc/src/math/spirv64/fminf.cpp libc/src/math/spirv64/fmod.cpp libc/src/math/spirv64/fmodf.cpp libc/src/math/spirv64/frexp.cpp libc/src/math/spirv64/frexpf.cpp libc/src/math/spirv64/hypot.cpp libc/src/math/spirv64/hypotf.cpp libc/src/math/spirv64/ilogb.cpp libc/src/math/spirv64/ilogbf.cpp libc/src/math/spirv64/ldexp.cpp libc/src/math/spirv64/ldexpf.cpp libc/src/math/spirv64/lgamma.cpp libc/src/math/spirv64/lgamma_r.cpp libc/src/math/spirv64/llrint.cpp libc/src/math/spirv64/llrintf.cpp libc/src/math/spirv64/log.cpp libc/src/math/spirv64/log10.cpp libc/src/math/spirv64/log10f.cpp libc/src/math/spirv64/log1p.cpp libc/src/math/spirv64/log1pf.cpp libc/src/math/spirv64/log2.cpp libc/src/math/spirv64/log2f.cpp libc/src/math/spirv64/logb.cpp libc/src/math/spirv64/logbf.cpp libc/src/math/spirv64/logf.cpp libc/src/math/spirv64/lrint.cpp libc/src/math/spirv64/lrintf.cpp libc/src/math/spirv64/nearbyint.cpp libc/src/math/spirv64/nearbyintf.cpp libc/src/math/spirv64/nextafter.cpp libc/src/math/spirv64/nextafterf.cpp libc/src/math/spirv64/platform.h libc/src/math/spirv64/powf.cpp libc/src/math/spirv64/powi.cpp libc/src/math/spirv64/powif.cpp libc/src/math/spirv64/remainder.cpp libc/src/math/spirv64/remainderf.cpp libc/src/math/spirv64/remquo.cpp libc/src/math/spirv64/remquof.cpp libc/src/math/spirv64/rint.cpp libc/src/math/spirv64/rintf.cpp libc/src/math/spirv64/round.cpp libc/src/math/spirv64/roundf.cpp libc/src/math/spirv64/scalbn.cpp libc/src/math/spirv64/scalbnf.cpp libc/src/math/spirv64/sin.cpp libc/src/math/spirv64/sincos.cpp libc/src/math/spirv64/sincosf.cpp libc/src/math/spirv64/sinf.cpp libc/src/math/spirv64/sinh.cpp libc/src/math/spirv64/sinhf.cpp libc/src/math/spirv64/sqrt.cpp libc/src/math/spirv64/sqrtf.cpp libc/src/math/spirv64/tan.cpp libc/src/math/spirv64/tanf.cpp libc/src/math/spirv64/tanh.cpp libc/src/math/spirv64/tanhf.cpp libc/src/math/spirv64/tgamma.cpp libc/src/math/spirv64/tgammaf.cpp libc/src/math/spirv64/trunc.cpp libc/src/math/spirv64/truncf.cpp libc/startup/gpu/spirv64/start.cpp clang/lib/Basic/Targets/SPIR.h lld/ELF/InputFiles.cpp offload/DeviceRTL/include/State.h offload/DeviceRTL/src/State.cpp offload/test/offloading/bug64959.c
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libc/startup/gpu/spirv64/start.cpp b/libc/startup/gpu/spirv64/start.cpp
index b1cb9f7be0..6b5272609d 100644
--- a/libc/startup/gpu/spirv64/start.cpp
+++ b/libc/startup/gpu/spirv64/start.cpp
@@ -47,11 +47,11 @@ static void call_fini_array_callbacks() {
// spirv is rejecting amdgpu_kernel, kernel and __kernel
// clang suggests it wants kernels marked with something from opencl
-extern "C" [[gnu::visibility("protected")/*, clang::amdgpu_kernel,
- clang::amdgpu_flat_work_group_size(1, 1),
- clang::amdgpu_max_num_work_groups(1)*/]]
-void
-_begin(int argc, char **argv, char **env) {
+extern "C" [[gnu::visibility("protected") /*, clang::amdgpu_kernel,
+ clang::amdgpu_flat_work_group_size(1, 1),
+ clang::amdgpu_max_num_work_groups(1)*/
+]]
+void _begin(int argc, char **argv, char **env) {
__atomic_store_n(&LIBC_NAMESPACE::app.env_ptr,
reinterpret_cast<uintptr_t *>(env), __ATOMIC_RELAXED);
// We want the fini array callbacks to be run after other atexit
@@ -62,16 +62,17 @@ _begin(int argc, char **argv, char **env) {
LIBC_NAMESPACE::call_init_array_callbacks(argc, argv, env);
}
-extern "C" [[gnu::visibility("protected")/*, clang::amdgpu_kernel*/]] void
+extern "C" [[gnu::visibility("protected") /*, clang::amdgpu_kernel*/]] void
_start(int argc, char **argv, char **envp, int *ret) {
// Invoke the 'main' function with every active thread that the user launched
// the _start kernel with.
__atomic_fetch_or(ret, main(argc, argv, envp), __ATOMIC_RELAXED);
}
-extern "C" [[gnu::visibility("protected")/*, clang::amdgpu_kernel,
- clang::amdgpu_flat_work_group_size(1, 1),
- clang::amdgpu_max_num_work_groups(1)*/]] void
+extern "C" [[gnu::visibility("protected") /*, clang::amdgpu_kernel,
+ clang::amdgpu_flat_work_group_size(1, 1),
+ clang::amdgpu_max_num_work_groups(1)*/
+]] void
_end(int retval) {
// Only a single thread should call `exit` here, the rest should gracefully
// return from the kernel. This is so only one thread calls the destructors
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 9549a1c3d4..ff177602fa 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -1680,11 +1680,11 @@ static uint16_t getBitcodeMachineKind(Ctx &ctx, StringRef path,
case Triple::x86:
return t.isOSIAMCU() ? EM_IAMCU : EM_386;
case Triple::x86_64:
- return EM_X86_64;
+ return EM_X86_64;
case Triple::spirv64:
if (t.getVendor() == Triple::AMD)
return EM_AMDGPU;
- LLVM_FALLTHROUGH;
+ LLVM_FALLTHROUGH;
default:
ErrAlways(ctx) << path
<< ": could not infer e_machine from bitcode target triple "
diff --git a/offload/DeviceRTL/include/State.h b/offload/DeviceRTL/include/State.h
index 54bcb9cf79..f36be1ef2e 100644
--- a/offload/DeviceRTL/include/State.h
+++ b/offload/DeviceRTL/include/State.h
@@ -104,19 +104,16 @@ struct ThreadStateTy {
void init() {
// assignment relies on implicit conversion between address spaces
// ICVState = TeamState.ICVState;
- __builtin_memcpy(&ICVState,
- &TeamState.ICVState,
- sizeof(ICVState));
+ __builtin_memcpy(&ICVState, &TeamState.ICVState, sizeof(ICVState));
PreviousThreadState = nullptr;
}
void init(ThreadStateTy *PreviousTS) {
__builtin_memcpy(&ICVState,
- PreviousTS ?
- (state::ICVStateTy*) & PreviousTS->ICVState
- : (state::ICVStateTy*) &TeamState.ICVState,
+ PreviousTS ? (state::ICVStateTy *)&PreviousTS->ICVState
+ : (state::ICVStateTy *)&TeamState.ICVState,
sizeof(ICVState));
-
+
PreviousThreadState = PreviousTS;
}
};
@@ -178,7 +175,7 @@ void resetStateForThread(uint32_t TId);
TeamState.HasThreadState = true; \
ThreadStates[TId]->init(); \
} \
- return (uint32_t &)ThreadStates[TId]->ICVState.Member; \
+ return (uint32_t &)ThreadStates[TId]->ICVState.Member; \
}
// FIXME: https://github.com/llvm/llvm-project/issues/123241.
@@ -187,8 +184,8 @@ void resetStateForThread(uint32_t TId);
auto TId = mapping::getThreadIdInBlock(); \
if (OMP_UNLIKELY(!ForceTeamState && config::mayUseThreadStates() && \
TeamState.HasThreadState && ThreadStates[TId])) \
- return (uint32_t &)ThreadStates[TId]->ICVState.Member; \
- return (uint32_t &)TeamState.ICVState.Member; \
+ return (uint32_t &)ThreadStates[TId]->ICVState.Member; \
+ return (uint32_t &)TeamState.ICVState.Member; \
}
[[gnu::always_inline, gnu::flatten]] inline uint32_t &
diff --git a/offload/DeviceRTL/src/State.cpp b/offload/DeviceRTL/src/State.cpp
index fe7fab0ef8..143e8f8578 100644
--- a/offload/DeviceRTL/src/State.cpp
+++ b/offload/DeviceRTL/src/State.cpp
@@ -316,20 +316,18 @@ void state::resetStateForThread(uint32_t TId) {
void state::runAndCheckState(void(Func(void))) {
// TeamStateTy OldTeamState = TeamState;
TeamStateTy OldTeamState;
- __builtin_memcpy(&OldTeamState,
- &TeamState,
- sizeof(TeamStateTy));
- OldTeamState.assertEqual((TeamStateTy&)TeamState);
+ __builtin_memcpy(&OldTeamState, &TeamState, sizeof(TeamStateTy));
+ OldTeamState.assertEqual((TeamStateTy &)TeamState);
Func();
- OldTeamState.assertEqual((TeamStateTy&)TeamState);
+ OldTeamState.assertEqual((TeamStateTy &)TeamState);
}
void state::assumeInitialState(bool IsSPMD) {
TeamStateTy InitialTeamState;
InitialTeamState.init(IsSPMD);
- InitialTeamState.assertEqual((TeamStateTy&)TeamState);
+ InitialTeamState.assertEqual((TeamStateTy &)TeamState);
ASSERT(mapping::isSPMDMode() == IsSPMD, nullptr);
}
@@ -466,7 +464,8 @@ constexpr uint64_t NUM_SHARED_VARIABLES_IN_SHARED_MEM = 64;
void __kmpc_begin_sharing_variables(void ***GlobalArgs, uint64_t nArgs) {
if (nArgs <= NUM_SHARED_VARIABLES_IN_SHARED_MEM) {
- SharedMemVariableSharingSpacePtr = (void**)&SharedMemVariableSharingSpace[0];
+ SharedMemVariableSharingSpacePtr =
+ (void **)&SharedMemVariableSharingSpace[0];
} else {
SharedMemVariableSharingSpacePtr = (void **)memory::allocGlobal(
nArgs * sizeof(void *), "new extended args");
@@ -477,7 +476,8 @@ void __kmpc_begin_sharing_variables(void ***GlobalArgs, uint64_t nArgs) {
}
void __kmpc_end_sharing_variables() {
- if ((void*)SharedMemVariableSharingSpacePtr != (void*)&SharedMemVariableSharingSpace[0])
+ if ((void *)SharedMemVariableSharingSpacePtr !=
+ (void *)&SharedMemVariableSharingSpace[0])
memory::freeGlobal(SharedMemVariableSharingSpacePtr, "new extended args");
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/128585
More information about the cfe-commits
mailing list