diff mbox

patch implementing a new pass for register-pressure relief through live range shrinkage

Message ID 52793564.7020909@redhat.com
State New
Headers show

Commit Message

Jeff Law Nov. 5, 2013, 6:13 p.m. UTC
On 11/05/13 08:35, Vladimir Makarov wrote:
>    I'd like to add a new experimental optimization to the trunk.  This
> optimization was discussed on RA BOF of this summer GNU Cauldron.

[Good stuff snipped]

>
>    The single but significant drawback is additional compilation time
> (4%-6%) as the 1st insn scheduling pass is quite expensive.  So I'd
> recommend target maintainers to switch it on only for -Ofast.  If
> somebody finds that the optimization works on processors which uses
> 1st insn scheduling by default (in which I slightly doubt), we could
> improve the compilation time by reusing data for this optimization and
> the 1st insn scheduling.
Yow!  That's a pretty big hit.

Presumably there wasn't any way to integrate this with the existing 
sched2 pass, amoritizing the cost for dependency analysis and such?  Do 
we even know what part of the scheduler is really impacting compile-time 
performance here?






Jeff

Comments

Vladimir Makarov Nov. 5, 2013, 6:47 p.m. UTC | #1
On 11/05/2013 01:13 PM, Jeff Law wrote:
> On 11/05/13 08:35, Vladimir Makarov wrote:
>>    I'd like to add a new experimental optimization to the trunk.  This
>> optimization was discussed on RA BOF of this summer GNU Cauldron.
>
> [Good stuff snipped]
>
>>
>>    The single but significant drawback is additional compilation time
>> (4%-6%) as the 1st insn scheduling pass is quite expensive.  So I'd
>> recommend target maintainers to switch it on only for -Ofast.  If
>> somebody finds that the optimization works on processors which uses
>> 1st insn scheduling by default (in which I slightly doubt), we could
>> improve the compilation time by reusing data for this optimization and
>> the 1st insn scheduling.
> Yow!  That's a pretty big hit.
>
> Presumably there wasn't any way to integrate this with the existing
> sched2 pass, amoritizing the cost for dependency analysis and such? 
> Do we even know what part of the scheduler is really impacting
> compile-time performance here?
>
I guess you meant sched1 pass.  The 1st insn scheduler is more expensive
than the 2nd one, as we have less constraint dependency graph and
because we need to keep all insns in schedule-pressure mode whose source
insns were issued in one place to consider (not just ready ones). 
Practically most of code used for 1st insn scheduling is used and I
think there is no big opportunity to speedup the pass.  Although, for
example, we can use only BBs not just any scheduling regions (one
entry/several exits DAGs used by haifa-scheduler in regional mode), or
don't calculate insn priorities.

The biggest impact on 1st insn scheduling in register pressure sensitive
mode is to maintain and consider all insns from ready and queue in one
place.  Register-pressure sensitive scheduling is much more expensive
(as i remember from older experiments it may be in 2 times more
expensive than non-pressure sensitive one).

So some work could be done to speed up the code.  Still it will be
pretty expensive as the 1st insn scheduling pass in register-pressure
sensitive mode.
>
>
>
> Index: haifa-sched.c
> ===================================================================
> --- haifa-sched.c    (revision 204380)
> +++ haifa-sched.c    (working copy)
> @@ -150,6 +150,9 @@ along with GCC; see the file COPYING3.
>
>  #ifdef INSN_SCHEDULING
>
> +/* True if we do pressure relief pass.  */
> +bool sched_relief_p;
>
> Can we restructure things a bit so this is at least a file local
> static?  init/fini_for_live_range_shrinkage in haifa-sched.c, used by
> the bits in sched-rgn.c?
>
Sure. I'll modify the patch.
diff mbox

Patch

Index: haifa-sched.c
===================================================================
--- haifa-sched.c	(revision 204380)
+++ haifa-sched.c	(working copy)
@@ -150,6 +150,9 @@  along with GCC; see the file COPYING3.

  #ifdef INSN_SCHEDULING

+/* True if we do pressure relief pass.  */
+bool sched_relief_p;

Can we restructure things a bit so this is at least a file local static? 
  init/fini_for_live_range_shrinkage in haifa-sched.c, used by the bits 
in sched-rgn.c?