public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-12] amdgcn: Fix addsub bug
@ 2023-04-27 9:32 Andrew Stubbs
0 siblings, 0 replies; only message in thread
From: Andrew Stubbs @ 2023-04-27 9:32 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:a410f603fcaf2b963af5607eb359907fe273426e
commit a410f603fcaf2b963af5607eb359907fe273426e
Author: Andrew Stubbs <ams@codesourcery.com>
Date: Wed Apr 26 15:23:48 2023 +0100
amdgcn: Fix addsub bug
The vec_fmsubadd instuction actually had add twice, by mistake.
Also improve code-gen for all the complex patterns by using properly
undefined values. Mostly this just prevents the compiler reserving space
in the stack frame.
gcc/ChangeLog:
* config/gcn/gcn-valu.md (cmul<conj_op><mode>3): Use gcn_gen_undef.
(cml<addsub_as><mode>4): Likewise.
(vec_addsub<mode>3): Likewise.
(cadd<rot><mode>3): Likewise.
(vec_fmaddsub<mode>4): Likewise.
(vec_fmsubadd<mode>4): Likewise, and use sub for the odd lanes.
Diff:
---
gcc/ChangeLog.omp | 9 +++++++++
gcc/config/gcn/gcn-valu.md | 23 +++++++++++++++--------
2 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index 72948e409f8..c8a12d10884 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,12 @@
+2023-04-27 Andrew Stubbs <ams@codesourcery.com>
+
+ * config/gcn/gcn-valu.md (cmul<conj_op><mode>3): Use gcn_gen_undef.
+ (cml<addsub_as><mode>4): Likewise.
+ (vec_addsub<mode>3): Likewise.
+ (cadd<rot><mode>3): Likewise.
+ (vec_fmaddsub<mode>4): Likewise.
+ (vec_fmsubadd<mode>4): Likewise, and use sub for the odd lanes.
+
2023-04-21 Andrew Stubbs <ams@codesourcery.com>
Backport from mainline:
diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md
index ae532d9d3d8..a6380f91f5c 100644
--- a/gcc/config/gcn/gcn-valu.md
+++ b/gcc/config/gcn/gcn-valu.md
@@ -2382,8 +2382,9 @@
rtx even = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (even, get_exec (0x5555555555555555UL));
rtx dest = operands[0];
- emit_insn (gen_<cmul_subadd><mode>3_exec (dest, t1, t1_perm, dest, even));
- // a*c-b*d 0
+ emit_insn (gen_<cmul_subadd><mode>3_exec (dest, t1, t1_perm,
+ gcn_gen_undef (<MODE>mode),
+ even)); // a*c-b*d 0
rtx t2_perm = gen_reg_rtx (<MODE>mode);
emit_insn (gen_dpp_swap_pairs<mode> (t2_perm, t2)); // b*c a*d
@@ -2427,7 +2428,8 @@
rtx even = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (even, get_exec (0x5555555555555555UL));
rtx dest = operands[0];
- emit_insn (gen_sub<mode>3_exec (dest, t1, t2_perm, dest, even));
+ emit_insn (gen_sub<mode>3_exec (dest, t1, t2_perm,
+ gcn_gen_undef (<MODE>mode), even));
rtx odd = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (odd, get_exec (0xaaaaaaaaaaaaaaaaUL));
@@ -2451,7 +2453,8 @@
rtx dest = operands[0];
rtx x = operands[1];
rtx y = operands[2];
- emit_insn (gen_sub<mode>3_exec (dest, x, y, dest, even));
+ emit_insn (gen_sub<mode>3_exec (dest, x, y, gcn_gen_undef (<MODE>mode),
+ even));
rtx odd = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (odd, get_exec (0xaaaaaaaaaaaaaaaaUL));
emit_insn (gen_add<mode>3_exec (dest, x, y, dest, odd));
@@ -2478,7 +2481,9 @@
rtx even = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (even, get_exec (0x5555555555555555UL));
- emit_insn (gen_<cadd_subadd><mode>3_exec (dest, x, y, dest, even));
+ emit_insn (gen_<cadd_subadd><mode>3_exec (dest, x, y,
+ gcn_gen_undef (<MODE>mode),
+ even));
rtx odd = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (odd, get_exec (0xaaaaaaaaaaaaaaaaUL));
emit_insn (gen_<cadd_addsub><mode>3_exec (dest, x, y, dest, odd));
@@ -2498,7 +2503,8 @@
rtx even = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (even, get_exec (0x5555555555555555UL));
rtx dest = operands[0];
- emit_insn (gen_sub<mode>3_exec (dest, t1, operands[3], dest, even));
+ emit_insn (gen_sub<mode>3_exec (dest, t1, operands[3],
+ gcn_gen_undef (<MODE>mode), even));
rtx odd = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (odd, get_exec (0xaaaaaaaaaaaaaaaaUL));
emit_insn (gen_add<mode>3_exec (dest, t1, operands[3], dest, odd));
@@ -2518,10 +2524,11 @@
rtx even = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (even, get_exec (0x5555555555555555UL));
rtx dest = operands[0];
- emit_insn (gen_add<mode>3_exec (dest, t1, operands[3], dest, even));
+ emit_insn (gen_add<mode>3_exec (dest, t1, operands[3],
+ gcn_gen_undef (<MODE>mode), even));
rtx odd = gen_rtx_REG (DImode, EXEC_REG);
emit_move_insn (odd, get_exec (0xaaaaaaaaaaaaaaaaUL));
- emit_insn (gen_add<mode>3_exec (dest, t1, operands[3], dest, odd));
+ emit_insn (gen_sub<mode>3_exec (dest, t1, operands[3], dest, odd));
DONE;
})
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-04-27 9:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-27 9:32 [gcc/devel/omp/gcc-12] amdgcn: Fix addsub bug Andrew Stubbs
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).