From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C58FA3858D37; Sat, 22 Jan 2022 18:50:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C58FA3858D37 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/104188] gcc omitting AVX-512 broadcast instruction Date: Sat, 22 Jan 2022 18:50:05 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 11.2.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org 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: bug_status 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: Sat, 22 Jan 2022 18:50:05 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D104188 Jakub Jelinek changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW --- Comment #5 from Jakub Jelinek --- I came up with: #include union U { float m[4][4]; __m128 r[4]; __m512 s; }; __attribute__((noipa)) void foo (union U *x, union U *a, union U *b) { __m512 c =3D _mm512_loadu_ps (&a->s); __m512 d =3D _mm512_broadcast_f32x4 (b->r[0]); __m512 e =3D _mm512_broadcast_f32x4 (b->r[1]); __m512 f =3D _mm512_broadcast_f32x4 (b->r[2]); __m512 g =3D _mm512_broadcast_f32x4 (b->r[3]); __m512 h =3D _mm512_mul_ps (_mm512_permute_ps (c, 0x00), d); h =3D _mm512_fmadd_ps (_mm512_permute_ps (c, 0x55), e, h); h =3D _mm512_fmadd_ps (_mm512_permute_ps (c, 0xaa), f, h); h =3D _mm512_fmadd_ps (_mm512_permute_ps (c, 0xff), g, h); _mm512_storeu_ps (&x->s, h); } int main () { union U a =3D { .m =3D { { 1.0f, 2.0f, 3.0f, 4.0f }, { 5.0f, 6.0f, 7.0f, 8.0f }, { 9.0f, 10.0f, 11.0f, 12.0f }, { 13.0f, 14.0f, 15.0f, 16.0f } } }; union U b =3D { .m =3D { { 17.0f, 18.0f, 19.0f, 20.0f }, { 21.0f, 22.0f, 23.0f, 24.0f }, { 25.0f, 26.0f, 27.0f, 28.0f }, { 29.0f, 30.0f, 31.0f, 32.0f } } }; union U c; foo (&c, &a, &b); if (c.m[0][0] !=3D 250.0f || c.m[0][1] !=3D 260.0f || c.m[0][2] !=3D 270.= 0f || c.m[0][3] !=3D 280.0f) __builtin_abort (); if (c.m[1][0] !=3D 618.0f || c.m[1][1] !=3D 644.0f || c.m[1][2] !=3D 670.= 0f || c.m[1][3] !=3D 696.0f) __builtin_abort (); if (c.m[2][0] !=3D 986.0f || c.m[2][1] !=3D 1028.0f || c.m[2][2] !=3D 107= 0.0f || c.m[2][3] !=3D 1112.0f) __builtin_abort (); if (c.m[3][0] !=3D 1354.0f || c.m[3][1] !=3D 1412.0f || c.m[3][2] !=3D 14= 70.0f || c.m[3][3] !=3D 1528.0f) __builtin_abort (); return 0; }=