190 Commits

Author SHA1 Message Date
B I Mohammed Abbas
8e8d0c1499
Fix integer suffix in truncxfhf2_test (#121388)
Fixes error introduced by #120372.
2024-12-31 09:27:15 -08:00
B I Mohammed Abbas
28ae2ff2a4
Add truncxfhf2 with tests to compiler-rt (#120372)
Fixes #105181
2024-12-30 14:14:43 -08:00
lntue
a57f4c7009
[compiler-rt] Fix a bug in fp_div_impl when an intermediate result is out of expected range. (#119449)
Before this fix, `1.0L / (1.0L - 0x1.0p-113L)` will return `2 * (1 +
eps(1))`.
2024-12-17 12:24:57 -05:00
Alexander Richardson
d33dc14833
[compiler-rt] Allow running extendhfxf2_test without int128 support
We don't need 128-bit integers here, instead rewrite the fp_test.h helpers
to avoid the need for __int128. Also change the high argument for
compareResultF80() and F80FromRep80() to be uint16_t since values greater
than this do not make any sense. This should allow the compiler to detect
accidentally swapping the arguments.

Reviewed By: biabbas, alexander-shaposhnikov

Pull Request: https://github.com/llvm/llvm-project/pull/117818
2024-12-02 10:52:58 -08:00
Paul Osmialowski
fed07a0545
[compiler-rt][tests] Make this test case pass on AArch64 (#117628)
See also D92832 and GCC bug
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878
2024-12-02 16:41:53 +00:00
B I Mohammed Abbas
06d24da131
Fix extendhfxf2 test (#117665)
Fix changes in #113897

Co-authored-by: Alex Richardson <alexrichardson@google.com>
2024-11-26 15:27:53 -08:00
B I Mohammed Abbas
a5dd646360
Add extendhfxf2 into compiler rt (#113897)
Retry of pr #109090 and #111099.

Co-authored-by: Alexander Richardson <alexrichardson@google.com>
2024-11-25 10:19:27 -08:00
Jérôme Duval
d084bc291a
[compiler-rt][profile] Add support for LLVM profile for Haiku (#107575)
Haiku uses typical UNIX interfaces.

All tests pass except
instrprof-error.c
Posix/gcov-dlopen.c
Posix/gcov-destructor.c
Posix/instrprof-dlopen-norpath.test

---------

Co-authored-by: Petr Hosek <phosek@google.com>
2024-11-05 03:14:25 -05:00
Martin Storsjö
ef9629c64a Revert "Add extendhfxf2 into compiler rt (#111099)"
This reverts commit 5f7bad07b9d5b6c5cfa8c16a4e62cf1e128725be.

These tests fail to build in multiple configurations, see
https://github.com/llvm/llvm-project/pull/111099.
2024-10-26 12:34:45 +03:00
B I Mohammed Abbas
5f7bad07b9
Add extendhfxf2 into compiler rt (#111099)
Retry pr #109090 with updated extendhfxf2 test
2024-10-25 20:05:23 -04:00
Eisuke Kawashima
0af6c304e4
[NFC][compiler-rt] fix(compiler-rt/**.py): fix comparison to None (#94015)
from PEP8
(https://peps.python.org/pep-0008/#programming-recommendations):

> Comparisons to singletons like None should always be done with is or
is not, never the equality operators.
2024-10-24 07:32:10 -07:00
lntue
007780f31e
Revert "Add missing extendhfxf2 in compiler rt" (#110662)
Reverts llvm/llvm-project#109090
2024-10-01 09:02:24 -04:00
B I Mohammed Abbas
a57a83fc15
Add missing extendhfxf2 in compiler rt (#109090)
Issue: #105181
extendhfxf2 calls extendhfXfy to convert _Float16 to double, then type
casts this converted value to long double.
__uint128_t may not be available on all architectures. Thus I din't use
extendhfXfy to widen precision to 128 bits.
2024-10-01 08:42:08 -04:00
beetrees
2495130c1b
[compiler-rt] Add missing carry to 128x128->256 wide multiply (#97257) 2024-09-24 17:51:13 -07:00
Alexander Shaposhnikov
eacda48a00 [compiler-rt][builtins] Delete test __compiler_rt_fmaxf
Delete test for the removed helper function __compiler_rt_fmaxf.
This is a follow-up to d60ca0c913.
2024-09-06 21:15:25 +00:00
Alexander Shaposhnikov
d60ca0c913
[compiler-rt][builtins]Adjust complex division for aarch64 (#106664)
Adjust __divsc3 to ensure consistent behavior across x86_64 and AArch64 when the divisor should be treated as infinity if one of its components is a NaN (including signaling NaNs).

Test plan: ninja check-all
2024-09-06 12:21:06 -07:00
Aiden Grossman
745de9ef20
[compiler-rt] Delete unused test shell scripts (#100889)
This patch deletes two shell scripts in compiler-rt/builtiins/Unit that
seemed to have been used to run the tests at some point, but not
anymore.

They were originally copied over in
8c1441f86037d62f8e164cc458dff8b91d015998,
but have only been updated once since in what seemed like a simple grep.

These files also got lit testing support about seven years ago in
9b7bbeca48b10a0eb81708650777703ce41e67d7 that I believe makes these
scripts completely redundant.
2024-07-27 15:39:07 -07:00
Carlos Seo
c4b66bf4d0
[AArch64] Implement INIT/ADJUST_TRAMPOLINE (#70267)
Add support for llvm.init.trampoline and llvm.adjust.trampoline
intrinsics for AArch64.

Fixes https://github.com/llvm/llvm-project/issues/65573
Fixes https://github.com/llvm/llvm-project/issues/76927
Fixes https://github.com/llvm/llvm-project/issues/83555
Updates https://github.com/llvm/llvm-project/pull/66157
2024-07-24 11:18:08 -03:00
Daniel Thornburgh
c22828991e
Revert "[builtins] Disable COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY by d… (#84580)
…efault (#83201)"

This reverts commit 062cfada643c1aa48a1bb81894e2920d390fe8cf. See issue
#84574.
2024-03-08 15:13:20 -08:00
Fangrui Song
062cfada64
[builtins] Disable COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY by default (#83201)
Most of GCC's Linux targets have a link spec
`%{!static|static-pie:--eh-frame-hdr}` that doesn't pass --eh-frame-hdr
for `-static` links. `-static` links are supposed to utilize
`__register_frame_info` (called by `crtbeginT.o`, not by crtbegin.o or
crtbeginS.o) as a replacement.

compiler-rt crtbegin (not used with GCC) has some ehframe code, which is
not utilized because Clang driver unconditionally passes --eh-frame-hdr
for Linux targets, even for -static. In addition, LLVM libunwind
implements `__register_frame_info` as an empty stub.

Furthermore, in a non-static link, the `__register_frame_info`
references can cause an undesired weak dynamic symbol.

For now, just disable the config by default.
2024-02-27 16:32:53 -08:00
Pavel Iliin
568babab7e
[AArch64] Implement __builtin_cpu_supports, compiler-rt tests. (#82378)
The patch complements https://github.com/llvm/llvm-project/pull/68919
and adds AArch64 support for builtin
`__builtin_cpu_supports("feature1+...+featureN")`
which return true if all specified CPU features in argument are
detected. Also compiler-rt aarch64 native run tests for features
detection mechanism were added and 'cpu_model' check was fixed after its
refactor merged https://github.com/llvm/llvm-project/pull/75635 Original
RFC was https://reviews.llvm.org/D153153
2024-02-22 23:33:54 +00:00
Dinar Temirbulatov
3112578597 [AArch64][compiler-rt] Add memcpy, memset, memmove, memchr builtins. (#77496)
Add naive implementation of memcpy, memset, memmove, memchr for SME
targets.
Co-authored-by: David Sherwood <david.sherwood@arm.com>
2024-01-23 11:26:20 +00:00
Douglas Yung
bffd80d6df Revert "[AArch64][compiler-rt] Add memcpy, memset, memmove, memchr builtins. (#77496)"
This reverts commit 3ab8d2aac7bc2dd45dda3db0b8a71fd27eefb749.

This change is causing issues running lit tests on many bots including:
- https://lab.llvm.org/buildbot/#/builders/197/builds/12119
- https://lab.llvm.org/buildbot/#/builders/184/builds/9792
- https://lab.llvm.org/buildbot/#/builders/93/builds/18455
- https://lab.llvm.org/buildbot/#/builders/231/builds/19858
- https://lab.llvm.org/buildbot/#/builders/121/builds/38426
- https://lab.llvm.org/buildbot/#/builders/230/builds/23990
- https://lab.llvm.org/buildbot/#/builders/57/builds/32391
- https://lab.llvm.org/buildbot/#/builders/247/builds/13502
- https://lab.llvm.org/buildbot/#/builders/275/builds/3601
- https://lab.llvm.org/buildbot/#/builders/269/builds/4211
- https://lab.llvm.org/buildbot/#/builders/18/builds/14161
- https://lab.llvm.org/buildbot/#/builders/19/builds/23893
- https://lab.llvm.org/buildbot/#/builders/37/builds/30295
- https://lab.llvm.org/buildbot/#/builders/77/builds/33979
2024-01-22 18:21:09 -08:00
Dinar Temirbulatov
3ab8d2aac7
[AArch64][compiler-rt] Add memcpy, memset, memmove, memchr builtins. (#77496)
Add naive implementation of memcpy, memset, memmove, memchr for SME
targets.
Co-authored-by: David Sherwood <david.sherwood@arm.com>
2024-01-22 23:40:53 +00:00
Rainer Orth
0901f918da
[builtins][test] Don't XFAIL divtc3_test.c on 32-bit Solaris/sparc fo… (#72403)
As detailed in Issue #72398, the recent builtins rework and
77d75dc9be5c4bb1d9986a475e1c661718067c6a caused `Builtins-sparc-sunos::
divtc3_test.c` to `XPASS` on 32-bit Solaris/SPARC. Since there are
several underlying issues, un-`XFAIL` the test for now until those are
resolved, to turn the Solaris/sparcv9 buildbot green again after 5 days.

Tested on `sparcv9-sun-solaris2.11` and `x86_64-pc-linux-gnu`.
2023-11-15 20:52:23 +01:00
Amara Emerson
77d75dc9be
[builtins] Guard the divtc3_test.c test with CRT_HAS_TF_MODE (#71876)
The bots on https://green.lab.llvm.org/green/job/clang-stage1-RA/ were
failing this test.
2023-11-10 11:30:18 -08:00
Martin Storsjö
703de006d3
[compiler-rt] [test] Apply the MSVC scalbn test exceptions to MinGW too (#70776)
MinGW mode can also use the MSVC/UCRT math functions. On ARM/ARM64,
mingw-w64 has always used the UCRT scalbn function. On x86, mingw-w64
recently changed to prefer the UCRT version for a large number of math
functions.
2023-10-31 22:38:53 +02:00
Alexander Shaposhnikov
d4b8572f11 [compiler-rt] Fix src_rep_t_clz and clz_in_sig_frac
This is a follow-up to 910a4bf5b.

1. __builtin_clz takes unsigned int, thus for uint16_t
src_rep_t_clz can't use it directly but should subtract 16
(leading 16 bits of the promoted argument are zero).

2. Fix (and simplify) clz_in_sig_frac.

Test plan: ninja check-compiler-rt
(extendhfsf2_test.c and extenddftf2_test.c)
2023-10-28 10:20:57 +00:00
Alexander Richardson
d2ce3e9621
[builtins] Support building the 128-bit float functions on ld80 platforms (#68132)
GCC provides these functions (e.g. __addtf3, etc.) in libgcc on x86_64.
Since Clang supports float128, we can also enable the existing code by
using float128 for fp_t if either __FLOAT128__ or __SIZEOF_FLOAT128__ is
defined instead of only supporting these builtins for platforms with
128-bit IEEE long doubles.
This commit defines a new tf_float typedef that matches a float with
attribute((mode(TF)) on each given architecture.

There are more tests that could be enabled for x86, but to keep the diff
smaller, I restricted test changes to ones that started failing as part
of this refactoring.

This change has been tested on x86 (natively) and
aarch64,powerpc64,riscv64 and sparc64 via qemu-user.

This supersedes https://reviews.llvm.org/D98261 and should also cover
the changes from https://github.com/llvm/llvm-project/pull/68041.
2023-10-24 17:32:01 +01:00
Alexander Shaposhnikov
910a4bf5b7
[compiler-rt] Implement __extendxftf2 and __trunctfxf2 for x86_64 (#66918)
This patch implements __extendxftf2 (long double -> f128) and
__trunctfxf2 (f128 -> long double) on x86_64.
This is a preparation to unblock https://reviews.llvm.org/D53608,
We intentionally do not modify compiler-rt/lib/builtins/fp_lib.h in this
PR
(in particular, to limit the scope and avoid exposing other functions on
X86_64 in this PR).
Instead, TODOs were added to use fp_lib.h once it is available.

Test plan:
1. ninja check-compiler-rt (verified on X86_64 and on Aarch64)
In particular, new tests (extendxftf2_test.c and trunctfxf2_test.c) were
added.
2. compared the results of conversions with what other compilers (gcc)
produce.
2023-10-16 16:12:33 -07:00
Pranav Kant
613a09d99e
[builtins][NFC] Avoid using CRT_LDBL_128BIT in tests (#66832)
https://reviews.llvm.org/D153812 removed this macro from
implementations. Clean this up from tests as well.
2023-09-19 18:08:50 -07:00
Karl-Johan Karlsson
831b509d5f [builtins] Fix signed integer overflows in fp_fixint_impl.inc
When compiling the builtins with the undefined behavior sanitizer and running
testcases you end up with the following warning:

UBSan: fp_fixint_impl.inc:39:42: left shift of 8388608 by 40 places cannot be represented in type 'fixint_t' (aka 'long long')
UBSan: fp_fixint_impl.inc:39:17: signed integer overflow: -1 * -9223372036854775808 cannot be represented in type 'fixint_t' (aka 'long long')

This can be avoided by doing the shift and the multiplication in a matching
unsigned variant of the type.

The added test only trigger the intended signed overflow case when the builtins
are built with -D__SOFTFP__.

This was found in an out of tree target.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D159069
2023-08-31 10:08:15 +02:00
Alex Richardson
b114940012 [builtins] Drop -fnested-functions flag from tests
This flag does nothing for clang and is apparently not supported by GCC:
aarch64-linux-gnu-gcc: error: unrecognized command-line option '-fnested-functions'; did you mean '-Wunused-function'?
It looks like it was maybe supported by Apple GCC, but that is no longer
a supported compiler.

Differential Revision: https://reviews.llvm.org/D153819
2023-07-24 17:19:11 -07:00
Alex Richardson
cdc6f4cdcd [builtins] Fix building trunc*fhf2_test with GCC
GCC does not support __fp16, use the TYPE_FP16 macro instead.

Differential Revision: https://reviews.llvm.org/D153813
2023-07-24 17:19:11 -07:00
Simi Pallipurath
6f4f1023fa [compiler-rt] [Arm] Make the tests for the runtime functions __aeabi_c{d,f} work on Big-Endian.
We are trying to build the compiler-rt as big-endian. And found that the tests compiler-rt/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c and compiler-rt/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c do not work on big endian at the moment. This patch makes these tests work on big endian as well.

Reviewed By: peter.smith, simon_tatham

Differential Revision: https://reviews.llvm.org/D155208
2023-07-17 12:27:32 +01:00
Petr Hosek
bb7a902c76 [CMake] Use COMPILER_RT_BUILD_CRT in the condition for test
Unlike COMPILER_RT_HAS_CRT this handles the case where CRT is available
but has been disabled by setting COMPILER_RT_BUILD_CRT. This addresses
an issue reported on D153989.

Differential Revision: https://reviews.llvm.org/D155126
2023-07-12 22:30:43 +00:00
Petr Hosek
b47beecc81 [compiler-rt] Move crt into builtins
On Linux crt is typically use in combination with builtins. In the Clang
driver the use of builtins and crt is controlled by the --rtlib option.
Both builtins and crt also have similar build requirements where they
need to be built before any other runtimes and must avoid dependencies.
We also want builtins and crt these to be buildable separately from the
rest of compiler-rt for bootstrapping purposes. Given how simple crt is,
rather than maintaining a separate directory with its own separate build
setup, it's more efficient to just move crt into builtins. We still use
separate CMake option to control whether to built crt same as before.

This is an alternative to D89492 and D136664.

Differential Revision: https://reviews.llvm.org/D153989
2023-07-11 23:05:45 +00:00
Petr Hosek
7c4dbff05d Revert "[compiler-rt] Move crt into builtins"
This reverts commit dae9d1b52469daca88a968e7b99a26420aef657c since
it caused https://github.com/llvm/llvm-project/issues/63799.
2023-07-11 15:32:49 +00:00
Petr Hosek
dae9d1b524 [compiler-rt] Move crt into builtins
On Linux crt is typically use in combination with builtins. In the Clang
driver the use of builtins and crt is controlled by the --rtlib option.
Both builtins and crt also have similar build requirements where they
need to be built before any other runtimes and must avoid dependencies.
We also want builtins and crt these to be buildable separately from the
rest of compiler-rt for bootstrapping purposes. Given how simple crt is,
rather than maintaining a separate directory with its own separate build
setup, it's more efficient to just move crt into builtins. We still use
separate CMake option to control whether to built crt same as before.

This is an alternative to D89492 and D136664.

Differential Revision: https://reviews.llvm.org/D153989
2023-07-11 07:41:04 +00:00
Alex Richardson
f05c5c9c2c [builtins] Avoid using floating point q suffix. NFCI
The q floating point suffix is not supported by all compilers
configurations (e.g. GCC only supports it for some targets), so use a
macro (much like UINT64_C) instead. As this touches almost all lines in
the two tests also run them through clang-format.
2023-06-27 16:54:29 -07:00
Alex Richardson
f157afceb0 [builtins] Fix __floattitf and __floatuntitf on x86
These conversion functions were using LDBL_MANT_DIG (which is the 80-bit
extended float on x86) instead of the appropriate macro for the 128-bit
floating point type expected by the *tf* softfloat library calls.
This was discovered while testing D98261 (which allows building the *tf*
functions on x86).

This also changes the constants used in the two tests to use 128-bit
floating-point literals instead of long double ones to ensure that the
comparison succeeds on platforms with smaller long double (e.g. x86_64)

Reviewed By: scanon

Differential Revision: https://reviews.llvm.org/D131787
2023-06-27 09:22:25 -07:00
David Candler
e256f552c8 [builtins][test] Skip scalbn rounding tests on newlib
The picolib/newlib implementation of scalbn gives slightly different
results compared to glibc and compiler-rt's inlined
__compiler_rt_scalbn in certain rounding modes. Since these tests
are already disabled for msvc which doesn't respect the mode change,
this patch skips them for newlib as well.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D150280
2023-05-30 09:00:45 +01:00
Tobias Hieta
f98ee40f4b
[NFC][Py Reformat] Reformat python files in the rest of the dirs
This is an ongoing series of commits that are reformatting our
Python code. This catches the last of the python files to
reformat. Since they where so few I bunched them together.

Reformatting is done with `black`.

If you end up having problems merging this commit because you
have made changes to a python file, the best way to handle that
is to run git checkout --ours <yourfile> and then reformat it
with black.

If you run into any problems, post to discourse about it and
we will try to help.

RFC Thread below:

https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style

Reviewed By: jhenderson, #libc, Mordante, sivachandra

Differential Revision: https://reviews.llvm.org/D150784
2023-05-25 11:17:05 +02:00
Martin Storsjö
cafefe0160 [compiler-rt] [test] [builtins] Pass the right parameters for linking with -nodefaultlibs on mingw targets
The clang-cl/MSVC case is handled above, thus consider win32 && !is_msvc
to be mingw.

This matches the list of libraries passed by e.g. the libcxx build, when
using -nodefaultlibs.

Differential Revision: https://reviews.llvm.org/D147647
2023-04-13 12:11:17 +03:00
Martin Storsjö
ea47dcf2c8 [compiler-rt] [test] Remove a leftover XFAIL
This test succeeds on aarch64 windows now (tested both in mingw
mode and with clang-cl), most probably since commit
ccd96b3e03e18653e909852bfef105fc10782acb / D146667 ([builtins][test] Fix
divmodti4_test.c on Windows).

Differential Revision: https://reviews.llvm.org/D148000
2023-04-12 10:17:03 +03:00
Martin Storsjö
25350a7362 [compiler-rt] [test] Generalize the triple regex for windows XFAILs
Don't hardcode the vendor field in the triples to "pc"; for mingw
environments the triple is often "<arch>-w64-windows-gnu".

Differential Revision: https://reviews.llvm.org/D147862
2023-04-11 00:02:33 +03:00
Karl-Johan Karlsson
3834b0467d [builtins] Support architectures with 16-bit int in __ashlti3, __ashrti3 and __lshrti3
The amount to shift should be specified by the int type not a 32-bit integer
type.

This patch change the functions for 128-bit shifts in compiler-rt the same way
as was done for 64-bit shifts in D78662.

The README.txt is updated with the shift builtins signatures from this patch and D78662.

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D146960
2023-03-31 07:02:55 +02:00
Arthur Eubanks
ccd96b3e03 [builtins][test] Fix divmodti4_test.c on Windows
By making the 64 bit integer literals unsigned. Otherwise some of them
are unexpectedly sign extended (and the compiler rightly diagnosed this
with warnings)

Initially added in D80506.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D146667
2023-03-23 19:08:59 -07:00
Muhammad Omair Javaid
37505da42f [compiler-rt] Remove XFAIL decorator trampoline_setup_test.c
This patch remove xfail decorator from
builtins/Unit/trampoline_setup_test.c as it is passing on Windows/AArch64
nowz. It is being skipped in code with __clang__ not defined.

https://lab.llvm.org/buildbot/#/builders/120/builds/3873
2023-01-25 06:18:23 +05:00
Muhammad Omair Javaid
aa36207c78 [compiler-rt] XFAIL builtins unit tests on WoA
Following tests are marked XFAIl because they are dependent on native
C complex numbers but they are not a native type for Microsoft ABI [1].

Builtins-aarch64-windows :: divmodti4_test.c
Builtins-aarch64-windows :: fixunstfdi_test.c
Builtins-aarch64-windows :: multc3_test.c

Also trampoline_setup_test.c as it runs with only non-clang compiler while
WoA LLVM buildbots use clang.

[1] https://learn.microsoft.com/en-us/cpp/c-runtime-library/complex-math-support?view=msvc-170
2023-01-03 15:22:45 +04:00