develooper Front page | perl.perl6.internals | Postings from November 2004

Re: Continuations, basic blocks, loops and register allocation

Thread Previous | Thread Next
Jeff Clites
November 13, 2004 17:35
Re: Continuations, basic blocks, loops and register allocation
Message ID:
On Nov 13, 2004, at 2:46 PM, Matt Fowles wrote:

> On Sat, 13 Nov 2004 14:08:12 -0800, Jeff Clites <> 
> wrote:
>> That's oversimplifying a bit, but I feel like those are the core 
>> issues
>> (stemming from the observation of Leo's that continuations in effect
>> give all variables a lifetime that extends to their entire block, in
>> most cases).
> This does not give all variables extended lifetimes.  It only gives
> variables that are used in the exception handler such a lifetime.
> Thus temporaries used in calculations can be safely overwritten.
> Perhaps we should try adding the control flow arcs to the basic block
> analysis and see how the allocator handles it then...

Not all variables, but due to Leo's case (2), it should be all 
variables which are referenced after the first function call out of a 
subroutine, if there's a later function call; for instance, consider:

a = 10;
b = 12;
... use a and b
... never use a or b again
c = 1;
d = 2;
... use c and d
... never use c or d again

Normally, the lifetime of a and b would end at the call to bar, and 
that of c and d would end at the call to baz, but due to continuations, 
the call to zoo might resume at the op right after the call to foo 
(since the continuation created when calling foo may have been 
captured), so a,b,c,d have to persist at least until the last function 
call is made.

We could teach the allocator about these possibilities as you 
mentioned, and that would give us correct program behavior, but we know 
a priori that we'll have much higher register pressure that you might 
expect, so a different overall strategy might work better.


Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About