public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: William Schmidt <wschmidt@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-8780] rs6000: Don't let swaps pass break multiply low-part (PR101129) Date: Mon, 19 Jul 2021 17:52:43 +0000 (GMT) [thread overview] Message-ID: <20210719175243.462C4396DC29@sourceware.org> (raw) https://gcc.gnu.org/g:ac0efe3c6fc6231b20ffd684956a4a5c3c54a96b commit r11-8780-gac0efe3c6fc6231b20ffd684956a4a5c3c54a96b Author: Bill Schmidt <wschmidt@linux.ibm.com> Date: Mon Jul 19 12:49:17 2021 -0500 rs6000: Don't let swaps pass break multiply low-part (PR101129) Backport from mainline. 2021-07-15 Bill Schmidt <wschmidt@linux.ibm.com> gcc/ PR target/101129 * config/rs6000/rs6000-p8swap.c (has_part_mult): New. (rs6000_analyze_swaps): Insns containing a subreg of a mult are not swappable. gcc/testsuite/ PR target/101129 * gcc.target/powerpc/pr101129.c: New. Diff: --- gcc/config/rs6000/rs6000-p8swap.c | 19 ++++++++++++++++ gcc/testsuite/gcc.target/powerpc/pr101129.c | 35 +++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/gcc/config/rs6000/rs6000-p8swap.c b/gcc/config/rs6000/rs6000-p8swap.c index ad2b3023819..903002a4576 100644 --- a/gcc/config/rs6000/rs6000-p8swap.c +++ b/gcc/config/rs6000/rs6000-p8swap.c @@ -1501,6 +1501,22 @@ replace_swap_with_copy (swap_web_entry *insn_entry, unsigned i) insn->set_deleted (); } +/* INSN is known to contain a SUBREG, which we can normally handle, + but if the SUBREG itself contains a MULT then we need to leave it alone + to avoid turning a mult_hipart into a mult_lopart, for example. */ +static bool +has_part_mult (rtx_insn *insn) +{ + rtx body = PATTERN (insn); + if (GET_CODE (body) != SET) + return false; + rtx src = SET_SRC (body); + if (GET_CODE (src) != SUBREG) + return false; + rtx inner = XEXP (src, 0); + return (GET_CODE (inner) == MULT); +} + /* Make NEW_MEM_EXP's attributes and flags resemble those of ORIGINAL_MEM_EXP. */ static void @@ -2476,6 +2492,9 @@ rs6000_analyze_swaps (function *fun) insn_entry[uid].is_swappable = 0; else if (special != SH_NONE) insn_entry[uid].special_handling = special; + else if (insn_entry[uid].contains_subreg + && has_part_mult (insn)) + insn_entry[uid].is_swappable = 0; else if (insn_entry[uid].contains_subreg) insn_entry[uid].special_handling = SH_SUBREG; } diff --git a/gcc/testsuite/gcc.target/powerpc/pr101129.c b/gcc/testsuite/gcc.target/powerpc/pr101129.c new file mode 100644 index 00000000000..1abc12480e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr101129.c @@ -0,0 +1,35 @@ +/* { dg-do run } */ +/* { dg-require-effective-target p8vector_hw } */ +/* { dg-options "-mdejagnu-cpu=power8 -O " } */ + +/* PR101129: The swaps pass was turning a mult-lopart into a mult-hipart. + Make sure we aren't doing that anymore. */ + +typedef unsigned char u8; +typedef unsigned char __attribute__((__vector_size__ (8))) U; +typedef unsigned char __attribute__((__vector_size__ (16))) V; +typedef unsigned int u32; +typedef unsigned long long u64; +typedef __int128 u128; + +u8 g; +U u; + +void +foo0 (u32 u32_0, U *ret) +{ + u128 u128_2 = u32_0 * (u128)((V){ 5 } > (u32_0 & 4)); + u64 u64_r = u128_2 >> 64; + u8 u8_r = u64_r + g; + *ret = u + u8_r; +} + +int +main (void) +{ + U x; + foo0 (7, &x); + for (unsigned i = 0; i < sizeof (x); i++) + if (x[i] != 0) __builtin_abort(); + return 0; +}
reply other threads:[~2021-07-19 17:52 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20210719175243.462C4396DC29@sourceware.org \ --to=wschmidt@gcc.gnu.org \ --cc=gcc-cvs@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).