[libc-commits] [PATCH] D144421: [libc] Partially implement 'quick_exit' for the GPU

Joseph Huber via Phabricator via libc-commits libc-commits at lists.llvm.org
Mon Feb 20 11:47:45 PST 2023


jhuber6 created this revision.
jhuber6 added reviewers: sivachandra, lntue, michaelrj.
Herald added subscribers: libc-commits, ecnelises, tschuett.
Herald added projects: libc-project, All.
jhuber6 requested review of this revision.

This patch adds a partial implementation of `quick_exit` for the GPU
target. This is mainly done to test object libraries for the GPU and
will be expanded later. This will simply cause the threads to terminate
on the GPU without returning an error code. This functionality will be
added later to facilitate unit tests.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D144421

Files:
  libc/src/__support/OSUtil/gpu/CMakeLists.txt
  libc/src/__support/OSUtil/gpu/quick_exit.cpp
  libc/src/__support/OSUtil/gpu/quick_exit.h
  libc/src/__support/OSUtil/quick_exit.h


Index: libc/src/__support/OSUtil/quick_exit.h
===================================================================
--- libc/src/__support/OSUtil/quick_exit.h
+++ libc/src/__support/OSUtil/quick_exit.h
@@ -9,7 +9,11 @@
 #ifndef LLVM_LIBC_SRC_SUPPORT_OSUTIL_QUICK_EXIT_H
 #define LLVM_LIBC_SRC_SUPPORT_OSUTIL_QUICK_EXIT_H
 
-#ifdef __unix__
+#include "src/__support/macros/properties/architectures.h"
+
+#if defined(LIBC_TARGET_ARCH_IS_GPU)
+#include "gpu/quick_exit.h"
+#elif defined(__unix__)
 #include "linux/quick_exit.h"
 #endif
 
Index: libc/src/__support/OSUtil/gpu/quick_exit.h
===================================================================
--- /dev/null
+++ libc/src/__support/OSUtil/gpu/quick_exit.h
@@ -0,0 +1,18 @@
+//===---------- GPU implementation of a quick exit function -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
+#define LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
+
+namespace __llvm_libc {
+
+void quick_exit(int status);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
Index: libc/src/__support/OSUtil/gpu/quick_exit.cpp
===================================================================
--- /dev/null
+++ libc/src/__support/OSUtil/gpu/quick_exit.cpp
@@ -0,0 +1,31 @@
+//===---------- GPU implementation of a quick exit function -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
+#define LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
+
+#include "quick_exit.h"
+
+#include "src/__support/macros/properties/architectures.h"
+
+namespace __llvm_libc {
+
+void quick_exit(int status) {
+#if defined(LIBC_TARGET_ARCH_IS_NVPTX)
+  asm("exit" ::: "memory");
+#elif defined(LIBC_TARGET_ARCH_IS_AMDGPU)
+  // This will terminate the entire wavefront, may not be valid with divergent
+  // work items.
+  asm("s_endpgm" ::: "memory");
+#endif
+  __builtin_unreachable();
+}
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_SUPPORT_OSUTIL_GPU_QUICK_EXIT_H
Index: libc/src/__support/OSUtil/gpu/CMakeLists.txt
===================================================================
--- /dev/null
+++ libc/src/__support/OSUtil/gpu/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_object_library(
+  gpu_util
+  SRCS
+    quick_exit.cpp
+  HDRS
+    quick_exit.h
+  DEPENDS
+    libc.src.__support.common
+)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D144421.498922.patch
Type: text/x-patch
Size: 2904 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230220/605996b0/attachment-0001.bin>


More information about the libc-commits mailing list