| Commit message (Collapse) | Author | Age |
|
|
|
|
| |
PiperOrigin-RevId: 492481345
Change-Id: Ie77656ed334b54930ee852d31e2794a1fc58ce2f
|
|
|
|
|
| |
PiperOrigin-RevId: 492463896
Change-Id: I063759ca5ceb3597a7c8ab25af23aa688dee26c2
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
called. When the variable is a global the compiler is allowed to instantiate it more
aggresively and it might happen before the types involved are complete.
When it is inside a function the compiler can't instantiate it until after the
functions are called.
Remove an unused member from the vtable.
Replace transfer_slot_fn with a generic function when relocation is available to reduce duplication.
PiperOrigin-RevId: 492227302
Change-Id: I07499f63b91c59c0ae42402683387c7b84a6f0ee
|
|
|
|
|
| |
PiperOrigin-RevId: 492219541
Change-Id: Iee5d7941e413c8b960365e60fa0254536dd20e49
|
|
|
|
|
| |
PiperOrigin-RevId: 491992941
Change-Id: Id66154cc4561770047b55625ef00014602975c5d
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
coverage of the accelerated CRC implementation and some differences
bewteen the internal and external implementation.
This change adds CI coverage to the
linux_clang-latest_libstdcxx_bazel.sh script assuming this script
always runs on machines of at least the Intel Haswell generation.
Fixes include:
* Remove the use of the deprecated xor operator on crc32c_t
* Remove #pragma unroll_completely, which isn't known by GCC or Clang:
https://godbolt.org/z/97j4vbacs
* Fixes for -Wsign-compare, -Wsign-conversion and -Wshorten-64-to-32
PiperOrigin-RevId: 491965029
Change-Id: Ic5e1f3a20f69fcd35fe81ebef63443ad26bf7931
|
|
|
|
|
| |
PiperOrigin-RevId: 491915718
Change-Id: I7469601857b5a3506163518d29f49792f3053b34
|
|
|
|
|
| |
PiperOrigin-RevId: 491723314
Change-Id: I68bc5a7ea5288982f6d0efb64c14fdbee4eec85a
|
|
|
|
|
| |
PiperOrigin-RevId: 491722639
Change-Id: Iff13661095d10c82599ad30f7220700825a78c9e
|
|
|
|
|
|
|
|
|
|
| |
std::array has a special-case to allow this
https://en.cppreference.com/w/cpp/container/array
Fixes #1332
PiperOrigin-RevId: 491703960
Change-Id: Ib83a1f0865448314e463e8ebf39ae3b842f762ea
|
|
|
|
|
| |
PiperOrigin-RevId: 491681300
Change-Id: I4ecdd3bf359cda7592b6c392a2fbb61b8394f71b
|
|
|
|
|
|
|
|
|
| |
The motivation is to explicitly remove and document dangerous
operations like adding crc32c_t to a set, because equality is not
enough to guarantee uniqueness.
PiperOrigin-RevId: 491656425
Change-Id: I7b4dadc1a59ea9861e6ec7a929d64b5746467832
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
this parser for the static checker.
This fixes some outstanding bugs where the static checker differed from the
dynamic one.
Also, fix `%v` to be accepted with POSIX syntax.
Tested:
Presubmit
TGP OCL:487237262:BASE:490275393:1669141454896:92dd62e3
PiperOrigin-RevId: 491650577
Change-Id: Id138c108187428b3aea46f8887495f1da12c91b2
|
|
|
|
|
|
|
| |
including for (size_t, char) overload.
PiperOrigin-RevId: 491456410
Change-Id: I76dec24b0bd02204fa38419af9247cee38b1cf50
|
|
|
|
|
|
|
|
|
|
|
|
| |
According to https://stackoverflow.com/a/68939636 it is safe to use
__m128i instead.
https://learn.microsoft.com/en-us/cpp/intrinsics/x86-intrinsics-list?view=msvc-170 also uses this type instead
Fixes #1330
PiperOrigin-RevId: 491427300
Change-Id: I4a1d44ac4d5e7c1e1ee063ff397935df118254a1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This CL makes a bunch of changes (mostly to raw_hash_set which
underlies flat_hash_set and flat_hash_map). Techniques used:
* Extract code that does not depend on the specific hash table type
into common (non-inlined) functions.
* Place ABSL_ATTRIBUTE_NOINLINE directives judiciously.
* Out-of-line some slow paths.
Reduces sizes of some large binaries by ~0.5%.
Has no significant performance impact on a few performance critical
binaries.
## Speed of fleetbench micro-benchmarks
Following is a histogram of %-age changes in
[fleetbench](https://github.com/google/fleetbench)
hot_swissmap_benchmark results. Negative numbers indicate a speedup
caused by this change. Statistically insignificant changes are mapped
to zero.
XXX Also run and merge in cold_swissmap_benchmark
Across all 351 benchmarks, the average speedup is 0.38%.
The best speedup was -25%, worst slowdown was +6.81%.
```
Count: 351 Average: -0.382764 StdDev: 3.77807
Min: -25 Median: 0.435135 Max: 6.81
---------------------------------------------
[ -25, -10) 16 4.558% 4.558% #
[ -9, -8) 2 0.570% 5.128%
[ -8, -7) 1 0.285% 5.413%
[ -7, -6) 1 0.285% 5.698%
[ -6, -5) 2 0.570% 6.268%
[ -5, -4) 5 1.425% 7.692%
[ -4, -3) 13 3.704% 11.396% #
[ -3, -2) 15 4.274% 15.670% #
[ -2, -1) 26 7.407% 23.077% ##
[ -1, 0) 14 3.989% 27.066% #
[ 0, 1) 185 52.707% 79.772% ############
[ 1, 2) 14 3.989% 83.761% #
[ 2, 3) 8 2.279% 86.040% #
[ 3, 4) 7 1.994% 88.034%
[ 4, 5) 32 9.117% 97.151% ##
[ 5, 6) 6 1.709% 98.860%
[ 6, 7) 4 1.140% 100.000%
```
We looked at the slowdowns and they do not seem worth worrying
about. E.g., the worst one was:
```
BM_FindHit_Hot<::absl::node_hash_set,64>/set_size:4096/density:0
2.61ns ± 1% 2.79ns ± 1% +6.81% (p=0.008 n=5+5)
```
## Detailed changes
* Out-of-line slow paths in hash table sampler methods.
* Explicitly unregister from sampler instead of from destructor.
* Introduced a non-templated CommonFields struct that holds some of
the hash table fields (infoz, ctrl, slots, size, capacity). This
struct can be passed to new non-templated helpers. The struct is
a private base class of raw_hash_set.
* Made non-inlined InitializeSlots<> that is only templated on
allocator and size/alignment of the slot type so that we can share
instantiations across types that have the same size/alignment.
* Moved some infrequently called code paths into non-inlined type-erased.
functions. Pass a suite of type-specific function pointers to these
routines for when they need to operate on slots.
* Marked some methods as non-inlined.
* Avoid unnecessary reinitialization in destructor.
* Introduce UpdateSpine type-erased helper that is called from
clear() and rehash().
PiperOrigin-RevId: 491413386
Change-Id: Ia5495c5a6ec73622a785a0d260e406ddb9085a7c
|
|
|
|
|
|
|
| |
Fixes #1329
PiperOrigin-RevId: 491372279
Change-Id: I93c094b06ece9cb9bdb39fd4541353e0344a1a57
|
|
|
|
|
| |
PiperOrigin-RevId: 491367420
Change-Id: I6a0ab74bb0675fd910ed9fc95ee20c5023eb0cb6
|
|
|
|
|
| |
PiperOrigin-RevId: 491338755
Change-Id: I813566ef69ba6121bb4d4b64ea483cd7c4cd6019
|
|
|
|
|
|
|
|
|
| |
TSan misses synchronization around passing PerThreadSynch between threads
since it happens inside of the Mutex code (which me mostly ignore),
so we need to ignore all accesses to the object.
PiperOrigin-RevId: 491297912
Change-Id: I13ea2015dee5c1a3fc4315c85112902ccffccc45
|
|
|
|
|
| |
PiperOrigin-RevId: 491266544
Change-Id: I0dd222f6d9fe49f1fdcdb11cf732c13c353e7695
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently we take generic/default code-path on AMD due to misspelling.
Mostly helps with crc+memcpy:
name old speed new speed delta
BM_Memcpy/1 156MB/s ± 1% 156MB/s ± 1% ~ (p=0.563 n=18+18)
BM_Memcpy/100 6.38GB/s ± 1% 6.50GB/s ± 1% +1.89% (p=0.000 n=19+19)
BM_Memcpy/10000 14.6GB/s ± 1% 21.7GB/s ± 0% +49.01% (p=0.000 n=20+19)
BM_Memcpy/500000 13.5GB/s ± 1% 19.9GB/s ± 0% +47.35% (p=0.000 n=18+17)
PiperOrigin-RevId: 490572650
Change-Id: Id7901321a23262c0ab62a2d82fae86cf42acf16d
|
|
|
|
|
|
|
| |
Using /arch:AVX on MSVC now uses the accelerated implementation
PiperOrigin-RevId: 490550573
Change-Id: I924259845f38ee41d15f23f95ad085ad664642b5
|
|
|
|
|
| |
PiperOrigin-RevId: 490329293
Change-Id: Ied36e737e85afc683cc7cc116ac6bc07092472df
|
|
|
|
|
|
|
| |
ifdefs inside btree_iterator.
PiperOrigin-RevId: 490317784
Change-Id: I4ffe2a1ad2e39890790e278d82eec7223b67908c
|
|
|
|
|
| |
PiperOrigin-RevId: 490228223
Change-Id: Iec5af16531132a903aaa3e584dd87b03feb2c0c7
|
|
|
|
|
|
|
| |
leave partial data in the buffer (all decoders should ignore it anyway) and to be sure that we don't try to put any subsequent operands in either (there shouldn't be enough space).
PiperOrigin-RevId: 490143656
Change-Id: I4d743dd9214013fbd151478ef662d50affd5ff7a
|
|
|
|
|
|
|
|
|
|
| |
enabled.
- Add assertions that the iterators haven't been invalidated.
- Also refactor some generation-related code to define the functions inside ABSL_BTREE_ENABLE_GENERATIONS ifdef/else branches.
PiperOrigin-RevId: 489988637
Change-Id: I34d32ed2e27cf89f7f8bb5d9c1f6770bb40b8794
|
|
|
|
|
|
|
|
|
|
|
| |
from Base64Encode.
Also:
* Clarify that padding refers to ‘output’ padding
* Make CalculateBase64EscapedLen() a bit more discoverable
* Reference all relevant non-obsolete RFCs (2045 as well as 4648)
PiperOrigin-RevId: 489981278
Change-Id: I27365ea5d52bfdb0c9d02ed96d05b4a60f2dc36f
|
|
|
|
|
| |
PiperOrigin-RevId: 489569565
Change-Id: Ia08c0c956a672ad435885c68f3e4a3de0405dad1
|
|
|
|
|
|
|
| |
This stores the operands to LOG (and CHECK) as separate fields in a serialized protobuf. The protobuf format is not yet published.
PiperOrigin-RevId: 489275799
Change-Id: I86d83671a6b1feb2bddd5bee51552907897ca8eb
|
|
|
|
|
| |
PiperOrigin-RevId: 489044912
Change-Id: I1657dd60bcfa2d0fb4b889f27f4f237325b73f08
|
|
|
|
|
|
|
|
|
|
| |
absl::make_unique is now std::make_unique in all configurations.
Documentation has been updated to recommend using the std::make_unique
spelling.
PiperOrigin-RevId: 488988005
Change-Id: Iddb8b863e6301876713d78c3fbe6660d0f9a38cf
|
|
|
|
|
| |
PiperOrigin-RevId: 488986942
Change-Id: I2babb7ea30d60c544f55ca9ed02d9aed23051a12
|
|
|
|
|
| |
PiperOrigin-RevId: 488955034
Change-Id: I143f3632b295098bc6ea5c6aedf7446dd91c668b
|
|
|
|
|
|
|
| |
This is used when demoting regular logging inside a LogSink::Send to raw-like to avoid infinite recursive dispatch.
PiperOrigin-RevId: 488934154
Change-Id: I0aaaeea0ceaaff3c4394308a7102a55befbef290
|
|
|
|
|
| |
PiperOrigin-RevId: 488930308
Change-Id: Ie620734e2f47df47e4000bc8eb2fff7f52939596
|
|
|
|
|
| |
PiperOrigin-RevId: 488799458
Change-Id: I1aaaa60c5be3260055a6f5773f78cb4043a60ac8
|
|
|
|
|
|
|
|
| |
extracted node and an iterator to the next element in the container.
Motivation: it can be useful, when calling `extract` to maintain an iterator next to the location of the extracted element. `std::set`, et al. allow for this because they have iterator stability. `absl::{flat,node}_hash_{set,map}` allow for this because they are guaranteed not to rehash when elements are removed so they also have iterator stability across calls to `extract()`. But b-tree doesn't support this use case without this API because removing elements can cause rebalancing, which invalidates iterators. We can get the next iterator without this API using `lower_bound(node_handle.value())`, but that requires an extra lookup.
PiperOrigin-RevId: 488721247
Change-Id: Id66f17311bf53678f536e4e4f070775f5ce0c542
|
|
|
|
|
| |
PiperOrigin-RevId: 488676817
Change-Id: I13f15bb93ab6dda4c56caf969be3c14f84ada6a0
|
|
|
|
|
|
|
|
|
|
|
|
| |
availability of a few timezones for "time_test" and "time_benchmark",
but (file-based) zoneinfo is now secured via existing Bazel data/env
attributes, or new CMake environment settings.
This also avoids the need for employing the CCTZ zone-info-source
extension mechanism (which is a win).
PiperOrigin-RevId: 488673952
Change-Id: I9def9d705c8f0dca3c0bcddc2406edb098ea5da3
|
|
|
|
|
|
|
| |
Also updated documentation around FormatSink and PutPaddedString
PiperOrigin-RevId: 488651398
Change-Id: Ic6c586dbb8bea61df841a142f12d22c7e5b03f43
|
|
|
|
|
| |
PiperOrigin-RevId: 488373221
Change-Id: I1e30820188cc860ce4df8fddafa04de343ec46af
|
|
|
|
|
|
|
|
|
|
|
| |
matching ${TZDIR} setting for, //absl/time/internal/cctz:zoneinfo.
This eliminates any hidden dependency on /usr/share/zoneinfo, and
enables the upcoming deletion of the embedded internal/zoneinfo.inc
data from //absl/time:test_util.
PiperOrigin-RevId: 488372848
Change-Id: If1c8525b5ca4348cb2fc3b4760819f791b6e9725
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, ~raw_hash_set() would change *this to have the same
representation as an empty hash table. This is unnecessary since
nobody should be touching a destroyed hash table, and prevents future
optimizations/changes that might not be able to preserve this
behavior.
PiperOrigin-RevId: 487899950
Change-Id: I2d4470677bdd411c2e48ef511187e39f4e7fc2f4
|
|
|
|
|
| |
PiperOrigin-RevId: 487707178
Change-Id: Ie8f57a6327a6460ab37566b8b6f56d470f6dd2dc
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes the build on arm64 macOS.
Note that hardware acceleration is not yet enabled on arm64 when not
running under Linux.
Addresses the report from https://github.com/abseil/abseil-cpp/commit/1687dbf814eceb93de2d93f91b31acaab404091c#commitcomment-89529264
PiperOrigin-RevId: 487655295
Change-Id: I168dfc863c960d0b694b26dfcb85ff0fd0e95a1e
|
|
|
|
|
|
|
|
| |
- Add assertions that the iterators are either (a) from the same container or (b) both default constructed. Standard says: "The domain of == for forward iterators is that of iterators over the same underlying sequence. However, value-initialized iterators may be compared and shall compare equal to other value-initialized iterators of the same type." - [reference](https://eel.is/c++draft/forward.iterators#2).
- Also optimize IsEndIterator a bit.
PiperOrigin-RevId: 487617518
Change-Id: Iefba5c3bc8caa93954671793e6929e22f419c298
|
|
|
|
|
| |
PiperOrigin-RevId: 487592054
Change-Id: Iff24f6e2a304fbc85843f10417fc3343c41333da
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
deprecation of ATOMIC_FLAG_INIT.
Another option would have been to use macros to only initialize
std::atomic_flag before C++20, but I decided to use one compilation
path instead.
The major difference between std::atomic_flag and std::atomic<bool> is
that the former is guaranteed to be lock-free, but we already assume
std::atomic<bool> is lock-free in many places.
https://en.cppreference.com/w/cpp/atomic/atomic_flag
PiperOrigin-RevId: 487397075
Change-Id: I3f1c539ec8b2ca58547282e69ed73e93243e8efe
|