At 6:04 PM +0200 4/22/04, Leopold Toetsch wrote:
Dan Sugalski <[EMAIL PROTECTED]> wrote:
          registers needed:        I43, N0, S12, P3327
          registers in .pasm:      I25, N0, S20, P32 - 464 spilled
          2007 basic_blocks, 2079 edges

Ouch. Register allocation is spending huge times during spilling. Something is definetely wrong with your code - wrong in the sense of: it doesn't play with, what imcc expects ;)

Yep, the 45 minute compile times were the hint that maybe imcc and I were fighting a bit. :)


You must have too much pseudo-globals in that unit, spanning a huge
range and interfering with one another. Do you use lexical vars or
Parrot globals?

I was using .locals for the actual variables in the source program, and $Px for all the temps the compiler generated. I've been migrating a lot of the code to use a few .local-defined hashes and indexing into them, and it looks like that's the way to go. (This'd be easier if this language had, y'know, actual subroutines and stuff...)


> Hrm. Does the code currently consider something like:

$P0 = foo

to start a new lifetime for $P0?

If you don't use $P0 beyond that point yes. Do you name all temps $P0 or some such? Or are you giving them unique names. You should do the latter.

I've a lot of 'constant' temps named $P0. I'll go fix that and see where we go. -- Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                      teddy bears get drunk

Reply via email to