rust: impl TrustedLen for VectorIter (#8797)

Improves unpack performance for vectors by allowing the compiler
to vectorize flatbuffers::Vector to std::vec::Vec conversions,
using the unstable trusted_len feature.

Internally, enables an optimization in src/alloc/vec/spec_extend.rs:
Previously, unpacking a flatbuffers::Vector called
SpecExtend::extend_desugared fallback, which inhibits vectorization
(due to a branch before every element move).  Declaring TrustedLen
allows SpecExtend::extend_trusted, which LLVM can often vectorize
into a memcpy.

For [ubyte] vectors in particular, this turns a rather expensive
loop of 'mov BYTE PTR [rax+r13*1], bpl' into a `call memcpy`.
This commit is contained in:
Richard Patel
2025-12-02 22:21:16 -06:00
committed by GitHub
parent 17ceaae16e
commit 0b60686e3d
2 changed files with 6 additions and 0 deletions

View File

@@ -30,6 +30,7 @@
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(all(nightly, not(feature = "std")), feature(error_in_core))]
#![cfg_attr(nightly, feature(trusted_len))]
#[cfg(not(feature = "std"))]
extern crate alloc;