forked from BigfootDev/flatbuffers
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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user