Skip to content

Commit

Permalink
[libc] Fix integer rint variants on the GPU
Browse files Browse the repository at this point in the history
Summary:
Currently these are implemented as a static cast on `__builtin_rint()`
to a long. Howver, this is not strictly correct. The standard states
that the output is unspecified, but most implementations, and the LLVM
libc implementation, do some kind of guarantee on this beahvior. This is
not guaranteed by just doing a cast. This patch just uses the generic
versions until we implement `__builitin_lrint` correctly.
  • Loading branch information
jhuber6 committed Jul 8, 2024
1 parent 4b53cbb commit f7cfae5
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 99 deletions.
48 changes: 0 additions & 48 deletions libc/src/math/amdgpu/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -456,54 +456,6 @@ add_entrypoint_object(
VENDOR
)

add_entrypoint_object(
lrint
SRCS
lrint.cpp
HDRS
../lrint.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
lrintf
SRCS
lrintf.cpp
HDRS
../lrintf.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
llrint
SRCS
llrint.cpp
HDRS
../llrint.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
llrintf
SRCS
llrintf.cpp
HDRS
../llrintf.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
pow
SRCS
Expand Down
48 changes: 0 additions & 48 deletions libc/src/math/nvptx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -409,54 +409,6 @@ add_entrypoint_object(
VENDOR
)

add_entrypoint_object(
lrint
SRCS
lrint.cpp
HDRS
../lrint.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
lrintf
SRCS
lrintf.cpp
HDRS
../lrintf.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
llrint
SRCS
llrint.cpp
HDRS
../llrint.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
llrintf
SRCS
llrintf.cpp
HDRS
../llrintf.h
COMPILE_OPTIONS
${bitcode_link_flags}
-O2
VENDOR
)

add_entrypoint_object(
pow
SRCS
Expand Down
1 change: 1 addition & 0 deletions libc/test/src/math/RoundToIntegerTest.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "src/__support/CPP/algorithm.h"
#include "src/__support/FPUtil/FEnvImpl.h"
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/macros/properties/architectures.h"
#include "test/UnitTest/FEnvSafeTest.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
Expand Down
9 changes: 6 additions & 3 deletions libc/test/src/math/smoke/RoundToIntegerTest.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include "src/__support/CPP/algorithm.h"
#include "src/__support/FPUtil/FEnvImpl.h"
#include "src/__support/FPUtil/FPBits.h"
#include "src/__support/macros/properties/architectures.h"
#include "test/UnitTest/FEnvSafeTest.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
Expand Down Expand Up @@ -51,12 +50,10 @@ class RoundToIntegerTestTemplate
// 0 for errno and exceptions, but this doesn't hold for
// all math functions using RoundToInteger test:
// https://github.com/llvm/llvm-project/pull/88816
#ifndef LIBC_TARGET_ARCH_IS_GPU
if (expectError) {
ASSERT_FP_EXCEPTION(FE_INVALID);
ASSERT_MATH_ERRNO(EDOM);
}
#endif
}

public:
Expand Down Expand Up @@ -169,7 +166,13 @@ class RoundToIntegerTestTemplate
#define LIST_ROUND_TO_INTEGER_TESTS(F, I, func) \
LIST_ROUND_TO_INTEGER_TESTS_HELPER(F, I, func, false)

// The GPU target does not support different rounding modes.
#ifdef LIBC_TARGET_ARCH_IS_GPU
#define LIST_ROUND_TO_INTEGER_TESTS_WITH_MODES(F, I, func) \
LIST_ROUND_TO_INTEGER_TESTS_HELPER(F, I, func, false)
#else
#define LIST_ROUND_TO_INTEGER_TESTS_WITH_MODES(F, I, func) \
LIST_ROUND_TO_INTEGER_TESTS_HELPER(F, I, func, true)
#endif

#endif // LLVM_LIBC_TEST_SRC_MATH_SMOKE_ROUNDTOINTEGERTEST_H

0 comments on commit f7cfae5

Please sign in to comment.