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