[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