[libc-commits] [libc] f7b7c69 - [libc] Partially implement 'quick_exit' for the GPU

Joseph Huber via libc-commits libc-commits at lists.llvm.org
Wed Feb 22 11:10:23 PST 2023


Author: Joseph Huber
Date: 2023-02-22T13:10:16-06:00
New Revision: f7b7c698ebcbee359e7451b31dfeb818e62b671f

URL: https://github.com/llvm/llvm-project/commit/f7b7c698ebcbee359e7451b31dfeb818e62b671f
DIFF: https://github.com/llvm/llvm-project/commit/f7b7c698ebcbee359e7451b31dfeb818e62b671f.diff

LOG: [libc] Partially implement 'quick_exit' for the GPU

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.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D144421

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

Modified: 
    libc/src/__support/OSUtil/quick_exit.h

Removed: 
    


################################################################################
diff  --git a/libc/src/__support/OSUtil/gpu/CMakeLists.txt b/libc/src/__support/OSUtil/gpu/CMakeLists.txt
new file mode 100644
index 0000000000000..eb6e86feaad3b
--- /dev/null
+++ b/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
+)

diff  --git a/libc/src/__support/OSUtil/gpu/quick_exit.cpp b/libc/src/__support/OSUtil/gpu/quick_exit.cpp
new file mode 100644
index 0000000000000..d8c8f032a9403
--- /dev/null
+++ b/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

diff  --git a/libc/src/__support/OSUtil/gpu/quick_exit.h b/libc/src/__support/OSUtil/gpu/quick_exit.h
new file mode 100644
index 0000000000000..d07a73a211dad
--- /dev/null
+++ b/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

diff  --git a/libc/src/__support/OSUtil/quick_exit.h b/libc/src/__support/OSUtil/quick_exit.h
index e1eb66b3f5442..310e376f49da0 100644
--- a/libc/src/__support/OSUtil/quick_exit.h
+++ b/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
 


        


More information about the libc-commits mailing list