From: Hongyu Wang <hongyu.wang@intel.com>
To: gcc-patches@gcc.gnu.org
Cc: segher@kernel.crashing.org, dje.gcc@gmail.com
Subject: [PATCH] rs6000: Adjust loop_unroll_adjust to match middle-end change [PR 107692]
Date: Thu, 17 Nov 2022 07:54:29 +0800 [thread overview]
Message-ID: <20221116235429.25268-1-hongyu.wang@intel.com> (raw)
Hi,
r13-3950-g071e428c24ee8c enables O2 small loop unrolling, but it breaks
-fno-unroll-loops for rs6000 with loop_unroll_adjust hook. Adjust the
option handling and target hook accordingly.
Bootstrapped & regtested on powerpc64le-linux-gnu, OK for trunk?
gcc/ChangeLog:
PR target/107692
* common/config/rs6000/rs6000-common.cc: Do not enable
funroll-loops by default.
* config/rs6000/rs6000.cc (rs6000_override_options_after_change):
Remove flag override about loop unroll.
(rs6000_loop_unroll_adjust): Turns off munroll-only-small-loops
when explicit -f[no-]unroll-[all-]loops is set.
---
gcc/common/config/rs6000/rs6000-common.cc | 6 +--
gcc/config/rs6000/rs6000.cc | 45 ++++++++++-------------
2 files changed, 22 insertions(+), 29 deletions(-)
diff --git a/gcc/common/config/rs6000/rs6000-common.cc b/gcc/common/config/rs6000/rs6000-common.cc
index 8e393d08a23..7186d0c309c 100644
--- a/gcc/common/config/rs6000/rs6000-common.cc
+++ b/gcc/common/config/rs6000/rs6000-common.cc
@@ -34,9 +34,9 @@ static const struct default_options rs6000_option_optimization_table[] =
{ OPT_LEVELS_ALL, OPT_fsplit_wide_types_early, NULL, 1 },
/* Enable -fsched-pressure for first pass instruction scheduling. */
{ OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
- /* Enable -munroll-only-small-loops with -funroll-loops to unroll small
- loops at -O2 and above by default. */
- { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_funroll_loops, NULL, 1 },
+
+ /* Enable -munroll-only-small-loops to unroll small loops at -O2 and
+ above by default. */
{ OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_munroll_only_small_loops, NULL, 1 },
/* -frename-registers leads to non-optimal codegen and performance
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index a85d7630b41..26e41b4b3b0 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -3392,22 +3392,6 @@ rs6000_md_asm_adjust (vec<rtx> & /*outputs*/, vec<rtx> & /*inputs*/,
static void
rs6000_override_options_after_change (void)
{
- /* Explicit -funroll-loops turns -munroll-only-small-loops off, and
- turns -frename-registers on. */
- if ((OPTION_SET_P (flag_unroll_loops) && flag_unroll_loops)
- || (OPTION_SET_P (flag_unroll_all_loops)
- && flag_unroll_all_loops))
- {
- if (!OPTION_SET_P (unroll_only_small_loops))
- unroll_only_small_loops = 0;
- if (!OPTION_SET_P (flag_rename_registers))
- flag_rename_registers = 1;
- if (!OPTION_SET_P (flag_cunroll_grow_size))
- flag_cunroll_grow_size = 1;
- }
- else if (!OPTION_SET_P (flag_cunroll_grow_size))
- flag_cunroll_grow_size = flag_peel_loops || optimize >= 3;
-
/* If we are inserting ROP-protect instructions, disable shrink wrap. */
if (rs6000_rop_protect)
flag_shrink_wrap = 0;
@@ -5540,17 +5524,26 @@ rs6000_cost_data::finish_cost (const vector_costs *scalar_costs)
static unsigned
rs6000_loop_unroll_adjust (unsigned nunroll, struct loop *loop)
{
- if (unroll_only_small_loops)
- {
- /* TODO: These are hardcoded values right now. We probably should use
- a PARAM here. */
- if (loop->ninsns <= 6)
- return MIN (4, nunroll);
- if (loop->ninsns <= 10)
- return MIN (2, nunroll);
+ if (!(flag_unroll_loops || flag_unroll_all_loops
+ || loop->unroll))
+ {
+ unsigned nunroll_orig = nunroll;
+ nunroll = 1;
+ /* Any explicit -f{no-}unroll-{all-}loops turns off
+ -munroll-only-small-loops. */
+ if (unroll_only_small_loops
+ && !OPTION_SET_P (flag_unroll_loops))
+ {
+ /* TODO: These are hardcoded values right now. We probably should use
+ a PARAM here. */
+ if (loop->ninsns <= 6)
+ return MIN (4, nunroll_orig);
+ if (loop->ninsns <= 10)
+ return MIN (2, nunroll_orig);
- return 0;
- }
+ return 0;
+ }
+ }
return nunroll;
}
--
2.18.1
next reply other threads:[~2022-11-16 23:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 23:54 Hongyu Wang [this message]
2022-11-18 14:46 ` Segher Boessenkool
2022-11-22 9:00 ` Richard Biener
2022-11-23 1:53 ` Hongyu Wang
2022-11-23 20:02 ` Richard Biener
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=20221116235429.25268-1-hongyu.wang@intel.com \
--to=hongyu.wang@intel.com \
--cc=dje.gcc@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=segher@kernel.crashing.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: link
Be 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).