[libiberty] remove TBAA violation in iterative_hash, improve code-gen
commit52ac4c6be8664e9dab5b90e7c64df03985791893
authorRichard Biener <rguenther@suse.de>
Wed, 14 Feb 2024 13:00:23 +0000 (14 14:00 +0100)
committerRichard Biener <rguenther@suse.de>
Thu, 15 Feb 2024 08:14:22 +0000 (15 09:14 +0100)
tree25169613dcf3e9e0235b3aebf4525350aff1e55e
parent5266f930bed06c99a9845bbde7d90cb285037733
[libiberty] remove TBAA violation in iterative_hash, improve code-gen

The following removes the TBAA violation present in iterative_hash.
As we eventually LTO that it's important to fix.  This also improves
code generation for the >= 12 bytes loop by using | to compose the
4 byte words as at least GCC 7 and up can recognize that pattern
and perform a 4 byte load while the variant with a + is not
recognized (not on trunk either), I think we have an enhancement bug
for this somewhere.

Given we reliably merge and the bogus "optimized" path might be
only relevant for archs that cannot do misaligned loads efficiently
I've chosen to keep a specialization for aligned accesses.

libiberty/
* hashtab.c (iterative_hash): Remove TBAA violating handling
of aligned little-endian case in favor of just keeping the
aligned case special-cased.  Use | for composing a larger word.
libiberty/hashtab.c