public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "hiraditya at msn dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/109441] missed optimization when all elements of vector are known
Date: Thu, 06 Apr 2023 18:40:22 +0000	[thread overview]
Message-ID: <bug-109441-4-tB3LZp2PVx@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-109441-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #1 from AK <hiraditya at msn dot com> ---
I guess a better test case is this:

#include<vector>
using namespace std;

using T = int;


T v(std::vector<T> v) {
    T s;
    std::fill(v.begin(), v.end(), T());
    for (auto i = 0; i < v.size(); ++i) {
        s += v[i];
    }

    return s;
}

which has similar effect.

$ g++ -O3 -std=c++17

v(std::vector<int, std::allocator<int> >):
        push    rbp
        push    rbx
        sub     rsp, 8
        mov     rbp, QWORD PTR [rdi+8]
        mov     rcx, QWORD PTR [rdi]
        cmp     rcx, rbp
        je      .L7
        sub     rbp, rcx
        mov     rdi, rcx
        xor     esi, esi
        mov     rbx, rcx
        mov     rdx, rbp
        call    memset
        mov     rdi, rbp
        mov     edx, 1
        mov     rcx, rbx
        sar     rdi, 2
        test    rbp, rbp
        cmovne  rdx, rdi
        cmp     rbp, 12
        jbe     .L8
        mov     rax, rdx
        pxor    xmm0, xmm0
        shr     rax, 2
        sal     rax, 4
        add     rax, rbx
.L4:
        movdqu  xmm2, XMMWORD PTR [rbx]
        add     rbx, 16
        paddd   xmm0, xmm2
        cmp     rbx, rax
        jne     .L4
        movdqa  xmm1, xmm0
        psrldq  xmm1, 8
        paddd   xmm0, xmm1
        movdqa  xmm1, xmm0
        psrldq  xmm1, 4
        paddd   xmm0, xmm1
        movd    eax, xmm0
        test    dl, 3
        je      .L1
        and     rdx, -4
        mov     esi, edx
.L3:
        add     eax, DWORD PTR [rcx+rdx*4]
        lea     edx, [rsi+1]
        movsx   rdx, edx
        cmp     rdx, rdi
        jnb     .L1
        add     esi, 2
        lea     r8, [0+rdx*4]
        add     eax, DWORD PTR [rcx+rdx*4]
        movsx   rsi, esi
        cmp     rsi, rdi
        jnb     .L1
        add     eax, DWORD PTR [rcx+4+r8]
.L1:
        add     rsp, 8
        pop     rbx
        pop     rbp
        ret
.L7:
        add     rsp, 8
        xor     eax, eax
        pop     rbx
        pop     rbp
        ret
.L8:
        xor     eax, eax
        xor     esi, esi
        xor     edx, edx
        jmp     .L3

  parent reply	other threads:[~2023-04-06 18:40 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-06 18:31 [Bug tree-optimization/109441] New: " hiraditya at msn dot com
2023-04-06 18:36 ` [Bug tree-optimization/109441] " pinskia at gcc dot gnu.org
2023-04-06 18:40 ` hiraditya at msn dot com [this message]
2023-04-11 13:17 ` rguenth at gcc dot gnu.org
2023-05-17 17:23 ` hiraditya at msn dot com
2023-05-18  5:34 ` rguenth at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-109441-4-tB3LZp2PVx@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).