Skip to content

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

@dishmaker

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions