[PATCH v3 0/5] bitops: optimize code and add tests

From: Vincent Mailhol
Date: Sun Dec 17 2023 - 02:13:18 EST


This series make sure that all the bitops operations (namely __ffs(),
ffs(), ffz(), __fls(), fls(), fls64()) correctly fold constant
expressions given that their argument is also a constant expression.

The first two patches optimize m68k architecture, the third and fourth
optimize the hexagon architecture bitops function, the fifth and final
patch adds test to assert that the constant folding occurs and that
the result is accurate.

This is tested on arm, arm64, hexagon, m68k, x86 and x86_64. For other
architectures, I am putting my trust into the kernel test robot to
send a report if ever one of the other architectures still lacks
bitops optimizations.
---

** Changelog **

v2 -> v3:

- Add patches 1/5 and 2/5 to optimize m68k architecture bitops.
Thanks to the kernel test robot for reporting!

- Add patches 3/5 and 4/5 to optimize hexagon architecture bitops.
Thanks to the kernel test robot for reporting!

- Patch 5/5: mark test_bitops_const_eval() as __always_inline, this
done, pass n (the test number) as a parameter. Previously, only
BITS(10) was tested. Add tests for BITS(0) and BITS(31).

Link: https://lore.kernel.org/all/20231130102717.1297492-1-mailhol.vincent@xxxxxxxxxx/

v1 -> v2:

- Drop the RFC patch. v1 was not ready to be applied on x86 because
of pending changes in arch/x86/include/asm/bitops.h. This was
finally fixed by Nick in commit 3dae5c43badf ("x86/asm/bitops: Use
__builtin_clz{l|ll} to evaluate constant expressions").
Thanks Nick!

- Update the commit description.

- Introduce the test_const_eval() macro to factorize code.

- No functional change.

Link: https://lore.kernel.org/all/20221111081316.30373-1-mailhol.vincent@xxxxxxxxxx/

Vincent Mailhol (5):
m68k/bitops: force inlining of all bitops functions
m68k/bitops: use __builtin_{clz,ctzl,ffs} to evaluate constant
expressions
hexagon/bitops: force inlining of all bitops functions
hexagon/bitops: use __builtin_{clz,ctzl,ffs} to evaluate constant
expressions
lib: test_bitops: add compile-time optimization/evaluations assertions

arch/hexagon/include/asm/bitops.h | 37 ++++++++----
arch/m68k/include/asm/bitops.h | 99 +++++++++++++++++--------------
lib/Kconfig.debug | 4 ++
lib/test_bitops.c | 32 ++++++++++
4 files changed, 118 insertions(+), 54 deletions(-)

--
2.25.1