[gcc r15-3586] libstdc++: Restore unrolling in std::find using pragma [PR116140]
Alex Coplan
acoplan@gcc.gnu.org
Wed Sep 11 10:54:25 GMT 2024
https://gcc.gnu.org/g:3fd07d4f04f43816a038daf9b16c6d5bf2e96c9b
commit r15-3586-g3fd07d4f04f43816a038daf9b16c6d5bf2e96c9b
Author: Alex Coplan <alex.coplan@arm.com>
Date: Fri Aug 2 09:56:07 2024 +0100
libstdc++: Restore unrolling in std::find using pragma [PR116140]
Together with the preparatory compiler patches, this patch restores
unrolling in std::__find_if, but this time relying on the compiler to do
it by using:
#pragma GCC unroll 4
which should restore the majority of the regression relative to the
hand-unrolled version while still being vectorizable with WIP alignment
peeling enhancements.
On Neoverse V1 with LTO, this reduces the regression in xalancbmk (from
SPEC CPU 2017) from 5.8% to 1.7% (restoring ~71% of the lost
performance).
libstdc++-v3/ChangeLog:
PR libstdc++/116140
* include/bits/stl_algobase.h (std::__find_if): Add #pragma to
request GCC to unroll the loop.
Diff:
---
libstdc++-v3/include/bits/stl_algobase.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index 27f6c377ad6f..f13662fc4482 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -2104,6 +2104,7 @@ _GLIBCXX_END_NAMESPACE_ALGO
inline _Iterator
__find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
{
+#pragma GCC unroll 4
while (__first != __last && !__pred(__first))
++__first;
return __first;
More information about the Libstdc++-cvs
mailing list