Micro-optimize pg_lfind32().
commit7644a7340c8a7764f1b20b34e1273b41347cbfcb
authorNathan Bossart <nathan@postgresql.org>
Tue, 26 Mar 2024 19:03:32 +0000 (26 14:03 -0500)
committerNathan Bossart <nathan@postgresql.org>
Tue, 26 Mar 2024 19:03:32 +0000 (26 14:03 -0500)
tree80811ec740a0d4817641b456bcb5e15ec9332bc9
parenta65724dfa73db8b451d0c874a9161935a34a914e
Micro-optimize pg_lfind32().

This commit improves the performance of pg_lfind32() in many cases
by modifying it to process the remaining "tail" of elements with
SIMD instructions instead of processing them one-by-one.  Since the
SIMD code processes a large block of elements, this means that we
will process a subset of elements more than once, but that won't
affect the correctness of the result, and testing has shown that
this helps more cases than it regresses.  With this change, the
standard one-by-one linear search code is only used for small
arrays and for platforms without SIMD support.

Suggested-by: John Naylor
Reviewed-by: John Naylor
Discussion: https://postgr.es/m/20231129171526.GA857928%40nathanxps13
src/include/port/pg_lfind.h