From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id B62823858418; Sun, 14 Nov 2021 14:19:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B62823858418 From: "dl.soluz at gmx dot net" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/58483] missing optimization opportunity for const std::vector compared to std::array Date: Sun, 14 Nov 2021 14:19:57 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 4.8.1 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: enhancement X-Bugzilla-Who: dl.soluz at gmx dot net X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Nov 2021 14:19:57 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D58483 --- Comment #16 from dennis luehring --- the sample still gets reduced by clang to 160 with -O2 or -O3 clang: main: # @main mov eax, 160 ret and gcc 11.2/trunk producing -O2 main: push rbp mov edi, 12 sub rsp, 48 movq xmm15, QWORD PTR .LC0[rip] mov DWORD PTR [rsp+8], 30 movq QWORD PTR [rsp], xmm15 pxor xmm15, xmm15 mov QWORD PTR [rsp+32], 0 movaps XMMWORD PTR [rsp+16], xmm15 call operator new(unsigned long) mov rcx, QWORD PTR [rsp] lea rdx, [rax+12] lea rdi, [rsp+16] mov QWORD PTR [rsp+16], rax mov QWORD PTR [rsp+32], rdx mov QWORD PTR [rax], rcx mov ecx, DWORD PTR [rsp+8] mov QWORD PTR [rsp+24], rdx mov DWORD PTR [rax+8], ecx call std::_Vector_base >::~_Vector_base= () [base object destructor] add rsp, 48 mov eax, 160 pop rbp ret mov rbp, rax jmp .L5 main.cold: .LC0: .long 10 .long 20 -O3 main: sub rsp, 24 mov edi, 12 movq xmm15, QWORD PTR .LC0[rip] mov DWORD PTR [rsp+8], 30 movq QWORD PTR [rsp], xmm15 call operator new(unsigned long) mov esi, 12 mov rdi, rax mov rax, QWORD PTR [rsp] mov QWORD PTR [rdi], rax mov eax, DWORD PTR [rsp+8] mov DWORD PTR [rdi+8], eax call operator delete(void*, unsigned long) mov eax, 160 add rsp, 24 ret .LC0: .long 10 .long 20 does that mean its still not clear if the unused new/delete can be removed here?=