1038 Commits

Author SHA1 Message Date
Siva Chandra
d00e97df0f [libc][Obvious] Fix typo is chmod implementation.
This now allows enabling the chmod function on aarch64.
2022-08-23 15:01:21 -07:00
Siva Chandra
8856137ce7 [libc] Enable a few entrypoints on aarch64 which are now available on x86_64. 2022-08-23 12:31:42 -07:00
Siva Chandra Reddy
055322891c [libc] Add Linux implementations of POSIX chdir, fchdir, chmod and fchmod.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D132445
2022-08-23 17:16:49 +00:00
Guillaume Chatelet
1e5b3ce707 [reland][NFC][libc] standardize string_view 2022-08-23 12:40:49 +00:00
Guillaume Chatelet
eebe9b2964 Revert "[reland][NFC][libc] standardize string_view"
This reverts commit df99774ef7d9c910941fe915689f9126258800ee.
2022-08-23 12:40:48 +00:00
Guillaume Chatelet
df99774ef7 [reland][NFC][libc] standardize string_view 2022-08-23 12:10:28 +00:00
Guillaume Chatelet
54cfe5f778 Revert "[reland][NFC][libc] standardize string_view"
This reverts commit 522d29a6a745e38d635739b05383770804bac311.
2022-08-23 11:50:56 +00:00
Guillaume Chatelet
522d29a6a7 [reland][NFC][libc] standardize string_view 2022-08-23 11:48:53 +00:00
Guillaume Chatelet
0df7e1b0e5 Revert "[reland][NFC][libc] standardize string_view"
This reverts commit 187099da1c415bd8f717eb5adc75bb1d73c7a0ba.
2022-08-23 11:00:22 +00:00
Guillaume Chatelet
187099da1c [reland][NFC][libc] standardize string_view 2022-08-23 10:55:57 +00:00
Guillaume Chatelet
abed700019 Revert "[NFC][libc] standardize string_view"
This reverts commit abe0fa6b17d866ef21e7c2abb799658c490b8508.
2022-08-23 10:43:22 +00:00
Guillaume Chatelet
abe0fa6b17 [NFC][libc] standardize string_view 2022-08-23 09:57:20 +00:00
Siva Chandra Reddy
3496dd3bb6 [libc][Obvious] Move some macros definitions to sys/stat.h.
They were previously incorrectly listed in fcntl.h
2022-08-22 23:19:18 +00:00
Guillaume Chatelet
41d4067d0b [NFC][libc] clarify CPP folder documentation 2022-08-22 15:41:41 +00:00
Guillaume Chatelet
aa59c9810a [libc][NFC] Use STL case for string_view 2022-08-22 15:25:14 +00:00
Guillaume Chatelet
c860fd3f25 [NFC][libc] Remove ArrayRef which is replaced with span 2022-08-22 10:52:28 +00:00
Guillaume Chatelet
4d2319123a [NFC][libc] Switch File impl to span instead of ArrayRef 2022-08-22 10:27:07 +00:00
Guillaume Chatelet
22bc0fde55 [NFC][libc] Switch mem* tests from ArrayRef to span 2022-08-22 09:58:35 +00:00
Guillaume Chatelet
f890f80d67 [libc] Allow span views over mutable data 2022-08-22 09:43:08 +00:00
Guillaume Chatelet
e5d5146323 [libc] Allow construction of const span from mutable span 2022-08-22 08:54:31 +00:00
Guillaume Chatelet
a1c42cb803 [reland][NFC][libc] Use span instead of ArrayRef 2022-08-22 08:22:38 +00:00
Guillaume Chatelet
70ca9a6600 Revert "[NFC][libc] Use span instead of ArrayRef"
This reverts commit e7b250b8a6e2bd7e2cb85e0a90d77b1a3326814b.
2022-08-22 08:14:22 +00:00
Guillaume Chatelet
e7b250b8a6 [NFC][libc] Use span instead of ArrayRef 2022-08-22 08:09:57 +00:00
Guillaume Chatelet
5541e6bc05 [libc] Add a span facility
This is intended to replace ArrayRef.

Differential Revision: https://reviews.llvm.org/D132254
2022-08-22 07:27:00 +00:00
Guillaume Chatelet
f00567eceb [libc][NFC] Move blockstore out of the CPP folder 2022-08-19 21:51:53 +00:00
Guillaume Chatelet
e2d7975843 [libc][NFC] Use STL case for bitset and simplify implementation 2022-08-19 21:39:14 +00:00
Guillaume Chatelet
d769cd8cdc [reland][libc][NFC] Use STL case for bit 2022-08-19 21:26:26 +00:00
Guillaume Chatelet
175560fc21 Revert "[libc][NFC] Use STL case for bit"
This reverts commit 7ba14b8611df1172d92d60bf19870e98a92e7a3a.
2022-08-19 21:17:48 +00:00
Guillaume Chatelet
7ba14b8611 [libc][NFC] Use STL case for bit 2022-08-19 21:10:27 +00:00
Siva Chandra Reddy
4d97766316 [libc] Install startup files with the install-libc target.
Differential Revision: https://reviews.llvm.org/D132212
2022-08-19 20:15:16 +00:00
Guillaume Chatelet
7799b5c0e6 [reland][NFC][libc] rearrange aarch64 memset code to better match new implementation
Differential Revision: https://reviews.llvm.org/D132121
2022-08-19 15:31:45 +00:00
Guillaume Chatelet
31fbcccb31 Revert "[NFC][libc] rearrange aarch64 memset code to better match new implementation"
This reverts commit 4d931b6e1e7e6003fa6c68aec9223b06e31c982d.
2022-08-19 15:02:16 +00:00
Guillaume Chatelet
4d931b6e1e [NFC][libc] rearrange aarch64 memset code to better match new implementation
Differential Revision: https://reviews.llvm.org/D132121
2022-08-19 14:48:17 +00:00
Siva Chandra Reddy
84517b6fb1 [libc] Add more headers to the linux x86_64 and aarch64 configs. 2022-08-19 07:15:08 +00:00
Siva Chandra Reddy
857286f757 [libc][NFC] Change the libc fullbuild target name to "libc". 2022-08-19 07:07:30 +00:00
John Ericson
e941b031d3 Revert "[cmake] Use CMAKE_INSTALL_LIBDIR too"
This reverts commit f7a33090a91015836497c75f173775392ab0304d.

Unfortunately this causes a number of failures that didn't show up in my
local build.
2022-08-18 22:46:32 -04:00
John Ericson
f7a33090a9 [cmake] Use CMAKE_INSTALL_LIBDIR too
We held off on this before as `LLVM_LIBDIR_SUFFIX` conflicted with it.
Now we return this.

`LLVM_LIBDIR_SUFFIX` is kept as a deprecated way to set
`CMAKE_INSTALL_LIBDIR`. The other `*_LIBDIR_SUFFIX` are just removed
entirely.

I imagine this is too potentially-breaking to make LLVM 15. That's fine.
I have a more minimal version of this in the disto (NixOS) patches for
LLVM 15 (like previous versions). This more expansive version I will
test harder after the release is cut.

Reviewed By: sebastian-ne, ldionne, #libc, #libc_abi

Differential Revision: https://reviews.llvm.org/D130586
2022-08-18 15:33:35 -04:00
Vitaly Buka
4e5d64e83e [NFC][libc] Detect HWASAN support macro 2022-08-18 10:19:18 -07:00
Siva Chandra Reddy
d20e632853 [libc][Obvious] Update the static archive target name for libc-api-test. 2022-08-17 23:18:33 +00:00
Siva Chandra Reddy
e5edd74bb7 [libc] Add a target to install libc in the full build mode.
* In the full build mode, `ninja install-libc` will install the headers as
  well the static archive named libc.a.
* In the default mode, `ninja install-llvmlibc` will only install the
  static archive libllvmlibc.a.

Reviewed By: jeffbailey

Differential Revision: https://reviews.llvm.org/D132015
2022-08-17 22:49:02 +00:00
Siva Chandra Reddy
eb0715e3c7 [libc][NFC] Make IntegerToString simpler to use at call-sites.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D131943
2022-08-17 07:57:06 +00:00
Siva Chandra Reddy
8e99ad6546 [libc][Obvious] Rearrange few header targets to satisfy dependency order. 2022-08-16 22:33:45 +00:00
Siva Chandra Reddy
e17ff7dd2a [libc][Obvious] Convert an add_header target to add_header_library target. 2022-08-16 20:33:24 +00:00
Michael Jones
438d1f18a5 [libc] add guard for file pieces of printf
In the printf_core CMake, the file pieces are defined as object
libraries that depend on the File data structure. If these are added
unconditionally they'll try to evaluate that dependancy even when there
is no File available. This patch adds a guard to prevent that error.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D131921
2022-08-15 15:43:24 -07:00
Michael Jones
e0e7fa36d3 [libc] enable s(n)printf without fullbuild
To use the FILE data structure, LLVM-libc must be in fullbuild mode
since it expects its own implementation. This means that (f)printf can't
be used without fullbuild, but s(n)printf only uses strings. This patch
adjusts the CMake to allow for this.

Reviewed By: sivachandra, lntue

Differential Revision: https://reviews.llvm.org/D131913
2022-08-15 13:45:34 -07:00
Michael Jones
0e27dfd560 [libc] add sprintf size comparison
To accurately measure the size of sprintf in a finished binary, the
easiest method is to simply build a binary with and without sprintf.
This patch adds an integration test that can be built with and without
sprintf, as well as targets to build it.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D131735
2022-08-12 11:46:55 -07:00
Siva Chandra Reddy
e4efe2cfc6 [libc] Pack memory functions in the integration test libc.a files.
Reviewed By: michaelrj

Differential Revision: https://reviews.llvm.org/D131752
2022-08-12 17:27:26 +00:00
Tue Ly
af59bac4ca [libc] Add missing header and Windows entrypoints for tanf. 2022-08-12 09:34:33 -04:00
Tue Ly
82d6e77048 [libc] Implement tanf function correctly rounded for all rounding modes.
Implement tanf function correctly rounded for all rounding modes.

We use the range reduction that is shared with `sinf`, `cosf`, and `sincosf`:
```
  k = round(x * 32/pi) and y = x * (32/pi) - k.
```
Then we use the tangent of sum formula:
```
  tan(x) = tan((k + y)* pi/32) = tan((k mod 32) * pi / 32 + y * pi/32)
         = (tan((k mod 32) * pi/32) + tan(y * pi/32)) / (1 - tan((k mod 32) * pi/32) * tan(y * pi/32))
```
We need to make a further reduction when `k mod 32 >= 16` due to the pole at `pi/2` of `tan(x)` function:
```
  if (k mod 32 >= 16): k = k - 31, y = y - 1.0
```
And to compute the final result, we store `tan(k * pi/32)` for `k = -15..15` in a table of 32 double values,
and evaluate `tan(y * pi/32)` with a degree-11 minimax odd polynomial generated by Sollya with:
```
>  P = fpminimax(tan(y * pi/32)/y, [|0, 2, 4, 6, 8, 10|], [|D...|], [0, 1.5]);
```

Performance benchmark using `perf` tool from the CORE-MATH project on Ryzen 1700:
```
$ CORE_MATH_PERF_MODE="rdtsc" ./perf.sh tanf
CORE-MATH reciprocal throughput   : 18.586
System LIBC reciprocal throughput : 50.068

LIBC reciprocal throughput        : 33.823
LIBC reciprocal throughput        : 25.161     (with `-msse4.2` flag)
LIBC reciprocal throughput        : 19.157     (with `-mfma` flag)

$ CORE_MATH_PERF_MODE="rdtsc" ./perf.sh tanf --latency
GNU libc version: 2.31
GNU libc release: stable
CORE-MATH latency   : 55.630
System LIBC latency : 106.264

LIBC latency        : 96.060
LIBC latency        : 90.727    (with `-msse4.2` flag)
LIBC latency        : 82.361    (with `-mfma` flag)
```

Reviewed By: orex

Differential Revision: https://reviews.llvm.org/D131715
2022-08-12 09:21:05 -04:00
Siva Chandra Reddy
4a738ee822 [libc] Add implemementations of thread specific data related API.
Specifically, POSIX functions pthread_key_create, pthread_key_delete,
pthread_setspecific and pthread_getspecific have been added. The C
standard equivalents tss_create, tss_delete, tss_set and tss_get have
also been added.

Reviewed By: lntue, michaelrj

Differential Revision: https://reviews.llvm.org/D131647
2022-08-12 05:28:40 +00:00