https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58483

--- Comment #16 from dennis luehring <dl.soluz at gmx dot net> ---
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<int, std::allocator<int> >::~_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?

Reply via email to