From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 21C6D3857C5A; Thu, 10 Dec 2020 01:56:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 21C6D3857C5A From: "crazylht at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/98218] New: [TARGET_MMX_WITH_SSE] Miss vec_cmpmn/vcondmn expander for 64bit vector Date: Thu, 10 Dec 2020 01:56:09 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: crazylht at gmail dot com X-Bugzilla-Status: UNCONFIRMED 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: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone cf_gcchost cf_gcctarget Message-ID: 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: Thu, 10 Dec 2020 01:56:10 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D98218 Bug ID: 98218 Summary: [TARGET_MMX_WITH_SSE] Miss vec_cmpmn/vcondmn expander for 64bit vector Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: crazylht at gmail dot com Target Milestone: --- Host: x86_64-pc-linux-gnu Target: x86_64-*-* i?86-*-* Refer to https://godbolt.org/z/sYE88f cat test.c typedef char v8qi __attribute__ ((vector_size(8))); v8qi f1(v8qi a, v8qi b) { return a =3D=3D b; } gcc -O2 -msse4.1 -S f1(char __vector(8), char __vector(8)): pextrb edx, xmm0, 0 pextrb eax, xmm1, 0 pextrb ecx, xmm0, 1 cmp dl, al pextrb eax, xmm1, 1 pextrb esi, xmm0, 2 setne dl pextrb edi, xmm0, 3 pextrb r8d, xmm0, 4 sub edx, 1 cmp cl, al pextrb eax, xmm1, 2 setne cl pextrb r9d, xmm0, 5 movzx edx, dl sub ecx, 1 cmp sil, al pextrb eax, xmm1, 3 setne sil pextrb r10d, xmm0, 6 pextrb r11d, xmm0, 7 movzx ecx, cl sub esi, 1 cmp dil, al pextrb eax, xmm1, 4 setne dil movzx esi, sil sub edi, 1 cmp r8b, al pextrb eax, xmm1, 5 setne r8b movzx edi, dil sub r8d, 1 cmp r9b, al pextrb eax, xmm1, 6 setne r9b movzx r8d, r8b sub r9d, 1 cmp r10b, al pextrb eax, xmm1, 7 setne r10b movzx r9d, r9b sub r10d, 1 cmp r11b, al setne al movzx r10d, r10b sub eax, 1 movzx eax, al sal rax, 8 or rax, r10 sal rax, 8 or rax, r9 sal rax, 8 or rax, r8 sal rax, 8 or rax, rdi sal rax, 8 or rax, rsi sal rax, 8 or rax, rcx sal rax, 8 or rax, rdx movq xmm0, rax ret It should be better with f1(char __vector(8), char __vector(8)): # @f1(char __vector(8), char __vector(8)) pcmpeqb xmm0, xmm1 ret=