public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "joony.wie at samsung dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/111306] New: macro-fusion makes error on conjugate complex multiplication Date: Wed, 06 Sep 2023 12:18:54 +0000 [thread overview] Message-ID: <bug-111306-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111306 Bug ID: 111306 Summary: macro-fusion makes error on conjugate complex multiplication Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: joony.wie at samsung dot com Target Milestone: --- It seems that the operands src1 and src2 of "_mm512_fcmul_pch" are swapped for macro-fusion with optimize option. If the operands are swapped, the imag value of result will have incorrect sign bit. So, the operands should not be swapped in these conjugate complex multiplication intrinsics. Let me show the example and the output. output: 3.000000 -4.000000 // w/o optimize. 3.000000 4.000000 // w/ optimize. https://godbolt.org/z/df9Gz18hc // but may not executable ``` #include <immintrin.h> #include <cstdio> __attribute__((optimize("O0"))) auto func0(_Float16 *a, _Float16 *b, int n, _Float16 *c) { __m512h rA = _mm512_loadu_ph(a); for (int i = 0; i < n; i += 32) { __m512h rB = _mm512_loadu_ph(b + i); _mm512_storeu_ph(c + i, _mm512_fcmul_pch(rB, rA)); } } __attribute__((optimize("O"))) auto func1(_Float16 *a, _Float16 *b, int n, _Float16 *c) { __m512h rA = _mm512_loadu_ph(a); for (int i = 0; i < n; i += 32) { __m512h rB = _mm512_loadu_ph(b + i); _mm512_storeu_ph(c + i, _mm512_fcmul_pch(rB, rA)); } } int main() { int n = 32; _Float16 a[n], b[n], c[n]; for (int i = 1; i <= n; i++) { a[i - 1] = i & 1 ? -i : i; b[i - 1] = i; } func0(a, b, n, c); for (int i = 0; i < n / 32 * 2; i++) { printf("%f ", (float)c[i]); } printf("\n"); func1(a, b, n, c); for (int i = 0; i < n / 32 * 2; i++) { printf("%f ", (float)c[i]); } printf("\n"); return 0; } ```
next reply other threads:[~2023-09-06 12:18 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-09-06 12:18 joony.wie at samsung dot com [this message] 2023-09-08 2:18 ` [Bug target/111306] [12,13] macro-fusion makes error on conjugate complex multiplication fp16 pinskia at gcc dot gnu.org 2023-09-08 2:19 ` pinskia at gcc dot gnu.org 2023-09-08 3:24 ` crazylht at gmail dot com 2023-09-08 6:02 ` crazylht at gmail dot com 2023-09-11 1:17 ` cvs-commit at gcc dot gnu.org 2023-09-11 1:20 ` cvs-commit at gcc dot gnu.org 2023-09-11 1:22 ` cvs-commit at gcc dot gnu.org 2023-09-11 1:23 ` crazylht at gmail dot com 2023-09-12 11:09 ` 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-111306-4@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: linkBe 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).