Skip to content

der: derive(Sequence): value_len: try_fold generates a lot of llvm-ir #1800

Description

@dishmaker

cargo llvm-lines shows a lot of try_fold

Probable cause Sequence macro:

impl<'a> ::der::EncodeValue for SubjectPublicKeyInfo<'a> {
        fn value_len(&self) -> ::der::Result<::der::Length> {
            use ::der::Encode as _;
            [
                self.algorithm.encoded_len()?,
                ::der::asn1::BitStringRef::try_from(self.subject_public_key)?
                    .encoded_len()?,
            ]
                .into_iter()
                .try_fold(::der::Length::ZERO, |acc, len| acc + len)
        }
./formats$ cargo llvm-lines --release -p x509-cert | head -20
  Lines                Copies              Function name
  -----                ------              -------------
  57722                1305                (TOTAL)
   1826 (3.2%,  3.2%)    24 (1.8%,  1.8%)  <core::ops::index_range::IndexRange as core::iter::traits::iterator::Iterator>::try_fold
   1711 (3.0%,  6.1%)    59 (4.5%,  6.4%)  <T as der::encode::Encode>::encoded_len
   1668 (2.9%,  9.0%)    12 (0.9%,  7.3%)  der::ord::iter_cmp
   1663 (2.9%, 11.9%)    23 (1.8%,  9.0%)  core::iter::traits::iterator::Iterator::try_fold
   1639 (2.8%, 14.7%)    12 (0.9%, 10.0%)  <der::reader::slice::SliceReader as der::reader::Reader>::read_nested
   1597 (2.8%, 17.5%)    13 (1.0%, 11.0%)  <T as der::decode::Decode>::decode
   1343 (2.3%, 19.8%)    14 (1.1%, 12.0%)  <der::reader::slice::SliceReader as der::reader::Reader>::finish
   1176 (2.0%, 21.9%)    21 (1.6%, 13.6%)  der::encode::EncodeValue::header
   1167 (2.0%, 23.9%)     1 (0.1%, 13.7%)  x509_cert::attr::AttributeTypeAndValue::from_delimited_str
   1160 (2.0%, 25.9%)    20 (1.5%, 15.2%)  <T as der::ord::DerOrd>::der_cmp
    891 (1.5%, 27.4%)     1 (0.1%, 15.3%)  <x509_cert::attr::AttributeTypeAndValue as core::fmt::Display>::fmt
    852 (1.5%, 28.9%)    12 (0.9%, 16.2%)  <der::asn1::context_specific::ContextSpecific<T> as der::tag::Tagged>::tag
    843 (1.5%, 30.4%)     3 (0.2%, 16.5%)  der::encode::Encode::encode_to_vec
    675 (1.2%, 31.5%)    15 (1.1%, 17.6%)  <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next
    664 (1.2%, 32.7%)     8 (0.6%, 18.2%)  <T as der::encode::Encode>::encode
    624 (1.1%, 33.8%)    12 (0.9%, 19.2%)  <core::iter::adapters::zip::Zip<A,B> as core::iter::adapters::zip::ZipImpl<A,B>>::next
    564 (1.0%, 34.8%)    12 (0.9%, 20.1%)  <core::iter::adapters::zip::Zip<A,B> as core::iter::adapters::zip::ZipImpl<A,B>>::new

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions