From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id F3164397EC07; Fri, 1 May 2020 19:02:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F3164397EC07 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1588359767; bh=y1XheZm0RBfQG2Z6zVHoABx3nHJorI4pP/PD5R2Qipw=; h=From:To:Subject:Date:From; b=n14W7jmBzb8DlHLJwO1/bxnCKn9T7PMoj67fq9gF8DytFZmFG8V3h9D7p3+MDxxPw TvXJDs91TD+HxG9bQHXWMtgHkOSTq80e23uZjbhScrp2kqVdC8XjKHt3HlemE5II9W BRlnvhK/ZDmlEuQplLJfJGcEdKDLmNieWDs98bjQ= From: "gabravier at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/94908] New: Failure to optimally optimize certain shuffle patterns Date: Fri, 01 May 2020 19:02:46 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: tree-optimization X-Bugzilla-Version: 10.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: gabravier 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 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: Fri, 01 May 2020 19:02:47 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D94908 Bug ID: 94908 Summary: Failure to optimally optimize certain shuffle patterns Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- typedef float v4sf __attribute__((vector_size(16))); v4sf g(); v4sf f(v4sf a, v4sf b) { return (v4sf){g()[1], a[1], a[2], a[3]}; } With -O3, LLVM outputs this : f(float __vector(4), float __vector(4)): # @f(float __vector(4), float __vector(4)) sub rsp, 24 movaps xmmword ptr [rsp], xmm0 # 16-byte Spill call g() movaps xmm1, xmmword ptr [rsp] # 16-byte Reload shufps xmm0, xmm1, 17 # xmm0 =3D xmm0[1,0],xmm1[1,0] shufps xmm0, xmm1, 232 # xmm0 =3D xmm0[0,2],xmm1[2,3] add rsp, 24 ret GCC outputs this :=20 f(float __vector(4), float __vector(4)): sub rsp, 24 movaps XMMWORD PTR [rsp], xmm0 call g() movaps xmm1, XMMWORD PTR [rsp] add rsp, 24 shufps xmm0, xmm0, 85 movaps xmm2, xmm1 shufps xmm2, xmm1, 85 movaps xmm3, xmm2 movaps xmm2, xmm1 unpckhps xmm2, xmm1 unpcklps xmm0, xmm3 shufps xmm1, xmm1, 255 unpcklps xmm2, xmm1 movlhps xmm0, xmm2 ret This also seems to occurs on powerpc64le, so I haven't marked it as target-specific.=