[all-commits] [llvm/llvm-project] 67eee4: [libc++] Optimize vector growing of trivially relo...

Nikolas Klauser via All-commits all-commits at lists.llvm.org
Fri Feb 2 08:14:07 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 67eee4a029797c09129889c3655416d1be487cfe
      https://github.com/llvm/llvm-project/commit/67eee4a029797c09129889c3655416d1be487cfe
  Author: Nikolas Klauser <nikolasklauser at berlin.de>
  Date:   2024-02-02 (Fri, 02 Feb 2024)

  Changed paths:
    M libcxx/benchmarks/ContainerBenchmarks.h
    M libcxx/benchmarks/vector_operations.bench.cpp
    M libcxx/docs/ReleaseNotes/19.rst
    M libcxx/include/CMakeLists.txt
    M libcxx/include/__memory/uninitialized_algorithms.h
    M libcxx/include/__memory/unique_ptr.h
    A libcxx/include/__type_traits/is_trivially_relocatable.h
    M libcxx/include/libcxx.imp
    M libcxx/include/module.modulemap.in
    M libcxx/include/string
    M libcxx/include/vector
    A libcxx/test/libcxx/type_traits/is_trivially_relocatable.compile.pass.cpp
    M libcxx/test/support/count_new.h

  Log Message:
  -----------
  [libc++] Optimize vector growing of trivially relocatable types (#76657)

This patch introduces a new trait to represent whether a type is
trivially
relocatable, and uses that trait to optimize the growth of a std::vector
of trivially relocatable objects.

```
--------------------------------------------------
Benchmark                           old        new
--------------------------------------------------
bm_grow<int>                    1354 ns    1301 ns
bm_grow<std::string>            5584 ns    3370 ns
bm_grow<std::unique_ptr<int>>   3506 ns    1994 ns
bm_grow<std::deque<int>>       27114 ns   27209 ns
```

This also changes to order of moving and destroying the objects when
growing the vector. This should not affect our conformance.




More information about the All-commits mailing list