This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] PR 62173, re-shuffle insns for RTL loop invariant hoisting
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- To: Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: Jiong Wang <jiong dot wang at arm dot com>, Richard Biener <richard dot guenther at gmail dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 19 Dec 2014 11:51:06 +0800
- Subject: Re: [PATCH] PR 62173, re-shuffle insns for RTL loop invariant hoisting
- Authentication-results: sourceware.org; auth=none
- References: <54803EBE dot 2060607 at arm dot com> <CAFiYyc1jauY_hejCfgU88DXtaSCCSZDUMiKMb678KqQ_QrMzrQ at mail dot gmail dot com> <CAFiYyc0gEQt_Ci1TyCfYys=JnZMr8FmYW7dFtq+mBmqKjeuttw at mail dot gmail dot com> <5480B6D6 dot 2020201 at arm dot com> <548EFE0D dot 1070808 at arm dot com> <548EFE55 dot 6090901 at arm dot com> <CAFiYyc3oYRsYkQwivE+T4A4mysDBe0gjZqjroQ8B2p1J6sakQg at mail dot gmail dot com> <54930811 dot 1020003 at arm dot com> <20141218220908 dot GA20720 at gate dot crashing dot org>
On Fri, Dec 19, 2014 at 6:09 AM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> On Thu, Dec 18, 2014 at 05:00:01PM +0000, Jiong Wang wrote:
>> On 17/12/14 15:54, Richard Biener wrote:
>> >ick. I realize we don't have SSA form on RTL but doesn't DF provide
>> >at least some help in looking up definition statements for pseudos?
>> >In fact we want to restrict the transform to single-use pseudos, thus
>> >hopefully it can at least tell us that... (maybe not and this is what
>> >LOG_LINKS are for in combine...?) At least loop-invariant alreadly
>> >computes df_chain with DF_UD_CHAIN which seems exactly what
>> >is needed (apart from maybe getting at single-use info).
>>
>> thanks very much for these inspiring questions.
>>
>> yes, we want to restrict the transformation on single-use pseudo only,
>> and it's better the transformation could re-use existed info and helper
>> function to avoid increase compile time. but I haven't found anything I
>> can reuse at the stage the transformation happen.
>>
>> the info similar as LOG_LINKS is what I want, but maybe simpler. I'd study
>> the code about build LOG_LINKS, and try to see if we can do some factor out.
>
> LOG_LINKs in combine are just historical. combine should be converted
> to use DF fully.
>
> LOG_LINKs have nothing to do with single use; they point from the _first_
> use to its corresponding def.
>
> You might want to look at what fwprop does instead.
Pass rtl fwprop uses df information in single-definition way, it
doesn't really take into consideration if register is a single use.
This often corrupts other optimizations like post-increment and
load/store pair. For example:
add r2, r1, r0
ldr rx, [r2]
add r2, r2, #4
is transformed into below form:
add r2, r1, r0
ldr rx, [r1, r0]
add r2, r2, #4
As a result, post-increment opportunity is corrupted, also definition
of r2 can't be deleted because it's not single use.
Thanks,
bin