[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