[PATCH], PR target/87033, General LWAX on PowerPC
Michael Meissner
meissner@linux.ibm.com
Mon Aug 20 22:46:00 GMT 2018
In this patch earlier to improve switch behavior:
https://gcc.gnu.org/ml/gcc-patches/2018-07/msg01957.html
I noticed that the compiler wasn't generating the LWAX instruction. I tracked
this down to the "extendsi<mode>2" insn using the "Y" constraint when it can
optimize a load + sign extend into a single load with sign extend. The "Y"
constraint is for DS-form offsettable addresses, and does not allow indexed
addresses (i.e. X-form loads). This patch adds the "Z" constraint as well,
which allows indexed addresses.
I have down trunk builds with/without this patch and there were no regressions.
Can I apply this patch to the trunk? Can I backport this patch to GCC 7 and
GCC 8 as well with a suitable delay to catch any problems?
[gcc]
2018-08-20 Michael Meissner <meissner@linux.ibm.com>
PR target/87033
* config/rs6000/rs6000.md (extendsi<mode>2): Change constraints
from 'Y' to 'YZ' to enable the LWAX instruction to be generated
for indexed loads.
[gcc/testsuite]
2018-08-20 Michael Meissner <meissner@linux.ibm.com>
PR target/87033
* gcc.target/powerpc/pr87033.c: New test.
--
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.ibm.com, phone: +1 (978) 899-4797
-------------- next part --------------
Index: gcc/config/rs6000/rs6000.md
===================================================================
--- gcc/config/rs6000/rs6000.md (revision 263672)
+++ gcc/config/rs6000/rs6000.md (working copy)
@@ -988,7 +988,7 @@ (define_insn "extendsi<mode>2"
"=r, r, wl, wu, wj, wK, wH, wr")
(sign_extend:EXTSI (match_operand:SI 1 "lwa_operand"
- "Y, r, Z, Z, r, wK, wH, ?wIwH")))]
+ "YZ, r, Z, Z, r, wK, wH, ?wIwH")))]
""
"@
lwa%U1%X1 %0,%1
Index: gcc/testsuite/gcc.target/powerpc/pr87033.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pr87033.c (nonexistent)
+++ gcc/testsuite/gcc.target/powerpc/pr87033.c (working copy)
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
+/* { dg-options "-O2" } */
+
+/* Insure that a LWAX is generated instead of ADD + LWA. */
+long func (int *p, unsigned long n)
+{
+ return p[n];
+}
+
+/* { dg-final { scan-assembler {\mlwax\M} } } */
+/* { dg-final { scan-assembler-not {\mlwa\M} } } */
More information about the Gcc-patches
mailing list