From: Peter Bergner Date: Mon, 11 Jun 2018 18:25:37 +0000 (-0500) Subject: backport: re PR target/85755 (PowerPC Gcc's -mupdate produces inefficient code on... X-Git-Tag: releases/gcc-7.4.0~409 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e719bb23916643d12c4229a0949b24edbb54778;p=thirdparty%2Fgcc.git backport: re PR target/85755 (PowerPC Gcc's -mupdate produces inefficient code on power8/power9 machines) gcc/ Backport from mainline 2018-06-08 Peter Bergner PR target/85755 * config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC addresses. gcc/testsuite/ Backport from mainline 2018-06-08 Peter Bergner PR target/85755 * gcc.target/powerpc/pr85755.c: New test. From-SVN: r261442 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2dd1ec985e85..61eda2f22e20 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-06-11 Peter Bergner + + Backport from mainline + 2018-06-08 Peter Bergner + + PR target/85755 + * config/rs6000/rs6000.c (mem_operand_gpr): Enable PRE_INC and PRE_DEC + addresses. + 2018-06-07 Peter Bergner Backport from mainline diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 75eab0375afc..01ae6ad8787c 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -8565,6 +8565,13 @@ mem_operand_gpr (rtx op, machine_mode mode) int extra; rtx addr = XEXP (op, 0); + /* PR85755: Allow PRE_INC and PRE_DEC addresses. */ + if (TARGET_UPDATE + && (GET_CODE (addr) == PRE_INC || GET_CODE (addr) == PRE_DEC) + && mode_supports_pre_incdec_p (mode) + && legitimate_indirect_address_p (XEXP (addr, 0), false)) + return true; + /* Don't allow non-offsettable addresses. See PRs 83969 and 84279. */ if (!rs6000_offsettable_memref_p (op, mode, false)) return false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c31736667041..7909bf580547 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-06-11 Peter Bergner + + Backport from mainline + 2018-06-08 Peter Bergner + + PR target/85755 + * gcc.target/powerpc/pr85755.c: New test. + 2018-06-09 Steven G. Kargl PR fortran/38351 diff --git a/gcc/testsuite/gcc.target/powerpc/pr85755.c b/gcc/testsuite/gcc.target/powerpc/pr85755.c new file mode 100644 index 000000000000..2d8741d639ed --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr85755.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O1" } */ + +void +preinc (long *q, long n) +{ + long i; + for (i = 0; i < n; i++) + q[i] = i; +} + +void +predec (long *q, long n) +{ + long i; + for (i = n; i >= 0; i--) + q[i] = i; +} + +/* { dg-final { scan-assembler-times {\mstwu\M} 2 { target ilp32 } } } */ +/* { dg-final { scan-assembler-times {\mstdu\M} 2 { target lp64 } } } */ +/* { dg-final { scan-assembler-not {\mstfdu\M} } } */