[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