[cfe-dev] missing optimization opportunity for const std::vector compared to std::array
Dennis Luehring via cfe-dev
cfe-dev at lists.llvm.org
Mon Oct 22 07:53:48 PDT 2018
so i've rembered correct - Richard Smith already fixed that with an
patch to LibC++ years ago
http://clang-developers.42468.n3.nabble.com/missing-optimization-opportunity-for-const-std-vector-compared-to-std-array-td4034587.html#none
see post ~Jun 04, 2014; 12:16am
http://clang-developers.42468.n3.nabble.com/missing-optimization-opportunity-for-const-std-vector-compared-to-std-array-tp4034587p4039822.html
this post informed about the patch
http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20140602/106887.html
what happend to this optimization - was it removed or broken over time?
or is it just not possible to test the behavior on gcc.godbolt.org with
the laste clang, missing flags or something?
Am 20.10.2018 um 12:00 schrieb Dennis Luehring via cfe-dev:
> for gcc-discussion see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58483
>
> is there a (good) reason not to remove the new/delete combination when
> the result is already known?
>
> #include <vector>
> #include <numeric>
> #include <array>
>
> static int calc(const std::array<int,3> p_ints, const int& p_init)
> //static int calc(const std::vector<int> p_ints, const int& p_init)
> {
> return std::accumulate(p_ints.begin(), p_ints.end(), p_init);
> }
>
> int main()
> {
> const int result = calc({10,20,30},100);
> return result;
> }
>
> results:
>
> gcc.godbolt x86-64 clang trunk, with -O2
>
> with std::array
>
> main: # @main
> mov eax, 160
> ret
>
> with std::vector
>
> main: # @main
> push rax
> mov edi, 12
> call operator new(unsigned long)
> movabs rcx, 85899345930
> mov qword ptr [rax], rcx
> mov dword ptr [rax + 8], 30
> mov rdi, rax
> call operator delete(void*)
> mov eax, 160
> pop rcx
> ret
>
> ---
>
> clang reduces new/delete with std::string but vector seems to be missing
> (buildin_new/delete missing in libc++?)
>
> #include <string>
>
> int main()
> {
> return std::string("hello").size();
> }
>
> down to
>
> main: # @main
> mov eax, 5
> ret
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list