> Would you care to characterize the number of extra variables created
> at the tree level and the number of extra pseudos created at the rtl
> level?  

We only create as many variables as we have statics we promote right
now.

At the RTL level, global reg has 6373 regs to allocate with promote
statics and eustores doing nothing (due to the global var threshold
issue).  It takes 376 seconds.  This is a checking enabled compiler in
all cases.

With promote statics and the global var threshold kicked up so eustores
eliminates dead stores, it has 5556 regs to allocate, but apparently can
do so a lot faster, as it takes 62 seconds on my machine.

Without promote statics, it has 199 regs to allocate (since the statics
are all in memory :P) and takes no time.


> I could see that there's room to be lazy and create hundreds
> of extra unnecessary variables that will exacerbate this problem.
> 

Yes, in the case of daten, we actually tickle the global var threshold,
because we generate 60,000 copy-in/outs, so nothing eliminates *any* of
the stores, useless or not, because they are all vuses/vdefs of
GLOBAL_VAR.

Kenny's plan was to do stupid copy-in/copy-out placement, and let things
like eustores clean up the dead stores and copies.  eustores simply
kills the stores, and DCE takes care of the rest (DCE normally won't
touch the stores because it doesn't know the static isn't used outside
the function).

Because of the global var usage that happens when you pass the global
var threshold, eustores can't eliminate them, since they all have
vuses/vdefs of the same variable.

If you up the threshold from from 50,000 to like 5 billion (i haven't
tried smaller numbers), eustores eliminates 63157 dead static stores in
daten, and things are slightly happier


> wherein the difference is that the first case uses two variables for
> the different live ranges, and the second uses only one.

We do the second right now.  However, without smart copy placement,
creating extra vars would still put at 2x or 3x above the global var
threshold, at one vdef/vuse per var.

> 
> 
> r~

Reply via email to