From: Oleg Endo <oleg.endo@t-online.de>
To: Jeff Law <law@redhat.com>, Andrew Waterman <andrew@sifive.com>
Cc: Craig Blackmore <craig.blackmore@embecosm.com>,
GCC Patches <gcc-patches@gcc.gnu.org>,
Jim Wilson <jimw@sifive.com>, Ofer Shinaar <Ofer.Shinaar@wdc.com>,
Nidal.Faour@wdc.com, Kito Cheng <kito.cheng@gmail.com>
Subject: Re: [PATCH v2 1/2] RISC-V: Add shorten_memrefs pass
Date: Sun, 27 Oct 2019 07:13:00 -0000 [thread overview]
Message-ID: <0589dfbc04514b24bfe7b7e90047197586a4d5e2.camel@t-online.de> (raw)
In-Reply-To: <66f754f0-66cb-320e-a256-9750b241e6cd@redhat.com>
On Sat, 2019-10-26 at 14:04 -0600, Jeff Law wrote:
> On 10/26/19 1:33 PM, Andrew Waterman wrote:
> > I don't know enough to say whether the legitimize_address hook is
> > sufficient for the intended purpose, but I am sure that RISC-V's
> > concerns are not unique: other GCC targets have to cope with
> > offset-size constraints that are coupled to register-allocation
> > constraints.
>
> Yup. I think every risc port in the 90s faces this problem. I
> always
> wished for a generic mechanism for ports to handle this problem.
>
> Regardless, it's probably worth investigating.
>
What we tried to do with the address mode selection (AMS) optimization
some time ago was the following:
- Extract memory accesses from the insns stream and put them in
"access sequences". Also analyze the address expression and try
to find effective base addresses by tracing back address
calculations.
- For each memory access, get a set of address mode alternatives and
the corresponding costs from the backend. The full context of each
access is provided, so the backend can detect things like
"in this access sequence, FP loads dominate" and use this
information to tune the alternative costs.
- Given the alternatives and costs for each memory access, the pass
would then try to minimize the costs of the whole memory access
sequence, taking costs of address modification isnns into account.
I think this is quite generic, but of course also complex. The
optimization problem itself is hard. There was some research done by
others using CPLEX or PBQP solvers. To keep things simple we used a
backtracking algorithm and handled only a limited set of scenarios.
For example, I think we could not get loop constructs work nicely to
improve post-inc address mode utilization.
The SH ISA has very similar properties to ARM thumb and RVC, and
perhaps others. Advantages would not be limited to RISC only, even
CISC ISAs like M68K, RX, ... can benefit from it, as the "proper
optimization" can reduce the instruction sizes by shortening the
addresses in the instruction stream.
If anyone is interested, here is the AMS optimization pass class:
https://github.com/erikvarga/gcc/blob/master/gcc/ams.h
https://github.com/erikvarga/gcc/blob/master/gcc/ams.cc
It's using a different style to callback into the backend code. Not
GCC's "hooks" but a delegate pattern. SH backend's delegate
implementation is here
https://github.com/erikvarga/gcc/blob/master/gcc/config/sh/sh.c#L11897
We were getting some improvements in the generated code, but it started
putting pressure on register allocation related issues in the SH
backend (the R0 problem), so we could not do more proper testing.
Maybe somebody can get some ideas out of it.
Cheers,
Oleg
next prev parent reply other threads:[~2019-10-27 5:58 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-12 16:19 [PATCH] RISC-V: Allow more load/stores to be compressed Craig Blackmore
2019-09-18 10:01 ` Kito Cheng
2019-10-25 17:40 ` [PATCH v2 0/2] " Craig Blackmore
2019-10-25 17:40 ` [PATCH v2 1/2] RISC-V: Add shorten_memrefs pass Craig Blackmore
2019-10-26 18:25 ` Jeff Law
2019-10-26 19:16 ` Oleg Endo
2019-10-26 20:04 ` Jeff Law
2019-10-26 20:02 ` Andrew Waterman
2019-10-26 20:16 ` Jeff Law
2019-10-27 7:13 ` Oleg Endo [this message]
2019-10-31 0:00 ` Jim Wilson
2019-10-31 9:42 ` Nidal Faour
2019-10-31 10:42 ` Andrew Waterman
2019-10-31 15:57 ` Ofer Shinaar
2019-12-10 18:28 ` Craig Blackmore
2020-02-19 11:40 ` Craig Blackmore
2020-04-08 16:04 ` Jim Wilson
2020-04-27 17:08 ` Craig Blackmore
2020-05-12 22:33 ` Jim Wilson
2020-05-13 17:51 ` Craig Blackmore
2019-10-31 0:03 ` Jim Wilson
2019-10-25 17:57 ` [PATCH v2 2/2] sched-deps.c: Avoid replacing address if it increases address cost Craig Blackmore
2019-10-31 2:00 ` Jim Wilson
2019-12-10 18:29 ` Craig Blackmore
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=0589dfbc04514b24bfe7b7e90047197586a4d5e2.camel@t-online.de \
--to=oleg.endo@t-online.de \
--cc=Nidal.Faour@wdc.com \
--cc=Ofer.Shinaar@wdc.com \
--cc=andrew@sifive.com \
--cc=craig.blackmore@embecosm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jimw@sifive.com \
--cc=kito.cheng@gmail.com \
--cc=law@redhat.com \
/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).