Skip to content

Commit

Permalink
[libc] Partially implement 'quick_exit' for the GPU
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jhuber6 committed Feb 22, 2023
1 parent 2893d55 commit f7b7c69
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 1 deletion.
9 changes: 9 additions & 0 deletions libc/src/__support/OSUtil/gpu/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
add_object_library(
gpu_util
SRCS
quick_exit.cpp
HDRS
quick_exit.h
DEPENDS
libc.src.__support.common
)
31 changes: 31 additions & 0 deletions libc/src/__support/OSUtil/gpu/quick_exit.cpp
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions libc/src/__support/OSUtil/gpu/quick_exit.h
Original file line number Diff line number Diff line change
@@ -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
6 changes: 5 additions & 1 deletion libc/src/__support/OSUtil/quick_exit.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit f7b7c69

Please sign in to comment.