At 07:15 AM 6/12/2005, Chip Salzenberg wrote:

Therefore, register allocation must allow for implicit flow of control
from *every* function call to *every* function return ... or, more
precisely, to where *every* continuation is taken, including function
return continuations.

Yes.

But for casual readers, you might want to qualify that with:

"For a given basic block..."


Just a couple of thoughts to add:

1) As far as variable lifetime, the brute-force method would assume
lifetime windows (du-chains) from the first definition of each variable
to the last function call in a basic block. Horrible for optimization.

2) For languages without eval() it is possible simply to do compile
time analysis of routines and associate an AST attribute with
whether the routine captures or invokes a continuation, and for
languages with Continuation Passing Style calls, you can analyze
whether the function does anything but use Return Continuations.
This would give the register allocator enough information to properly
break down the basic blocks into correct DU-chains and allocate
with confidence.

However, given Parrot's intended target languages, I feel that (2) is
going to be rarely applicable.

-Melvin

Reply via email to