Bill~

I have to say that I am really impressed by all of the work that you
are doing, and if you can make the internals of imcc a little more
approachable, you would be doing a great service.

Thanks,
Matt


On Thu, 28 Oct 2004 15:08:23 -0700, Bill Coffman <[EMAIL PROTECTED]> wrote:
> Hi all,
> 
> Thanks for your continued comments.  Btw, I usually read all the
> parrot list, so don't think I'm not paying attention.
> 
> Currently, here's how the register allocator is doing.
> 
> Failed Test        Stat Wstat Total Fail  Failed  List of Failed
> -------------------------------------------------------------------------------
> t/library/dumper.t    5  1280    13    5  38.46%  1-2 5 8 13
> 4 tests and 51 subtests skipped.
> Failed 1/123 test scripts, 99.19% okay. 5/1956 subtests failed, 99.74% okay.
> 
> I recall Leo, or someone, saying that the data dumper routines are not
> following the calling convention properly.  So I've decided not to
> worry about it too much.  It passes the other tests, plus the
> randomized tests that I created, up to 150 symbols.  At that range, it
> still takes about 20x longer than g++ -O2, for equivalent programs to
> compile (see gen4.pl).
> 
> Also, it is currently running about O(n^2) for n symbols, where the
> old one was running about O(n^3) from my analysis.  The spill code is
> still very expensive, and has a large constant associate.  I also have
> data, which is attached.  The difference doesn't show up until a lot
> of spilling is going on, around 80 symbols or so.
> 
> I've learned a lot about how the compiler works at this point, and I'd
> like to contribute more :)
> 
> Would you like a patch?  Should I fix the data dumper routines first?
> What is all this talk about deferred registers?  What should I do
> next?
> 
> Well, I'm making some comments on the below stuff.
> 
> On Thu, 28 Oct 2004 09:07:05 -0400, Dan Sugalski <[EMAIL PROTECTED]> wrote:
> > At 9:36 PM +0200 10/27/04, Leopold Toetsch wrote:
> > >Dan Sugalski wrote:
> > >>At 11:09 AM +0200 10/26/04, Leopold Toetsch wrote:
> > >
> > >>>So, if you want that really super efficient, you would allocate
> > >>>registers around function calls directly to that wanted register number,
> > >>>which should be in the SymReg's want_regno.
> 
> Yes, I think we are kind of doing this.  It's best to pass the
> registers straight through though.  Like when a variable will be used
> as a parameter, give it the appropriate reg num.  Sort of outside the
> immediate scope of register coloring, but as I've learned, one must go
> a little beyond, to see the input and output for each sub.
> 
> > >>While true, in the general case leaving 0-15 as non-preferred
> > >>registers will probably make things easier. Those registers,
> > >>especially the PMC ones, are going to see a lot of thrash as
> > >>function calls are made, and it'll probably be easier to have them
> > >>as scratch registers.
> 
> I guess I don't agree.  I'd like to pack down the number of registers
> used to a minimum.  Then when a function is called, only those needed
> registers are copied in/out.  Don't think the functionality exists.
> But the idea is to have each sub declare how many registers to
> save/restore.  This would then save 0-k such registers.  Where k is
> the number of registers used by the sub.  Pack 'em down, minimize the
> number needed.
> 
> We can also minimize this number to match the physical architecture
> that parrot is running on (for an arch specific optimization).  The
> imc_reg_alloc function does not have 32 hard coded in there (well a
> little bit, but can be easily changed).  It's pretty dynamic.
> 
> > >Yep, that's the easy part ;) OTOH when the register allocator is
> > >doing register renaming anyway, the most inner loop with a function
> > >call should get registers assigned already matching the calling
> > >convemtions. With more then one call at that loop level, you have to
> > >move around registers anyway.
> 
> Yes, yes, renaming!  I want to do register renaming!
> 
> > Oh, sure, but keeping your scratch PMCs out of the way makes life a
> > lot easier for the register coloring algorithms. Might not be
> > optimal, but if it makes life simpler to start, optimal can come
> > later.
> 
> p31 holds all the spill stuff.  It's a pain.  Maybe I'll move that
> around, but if p31 is used, it means that there is no more room for
> symbols, in at least one of the reg sets.
> 
> > >[1] all except Dan's 6000 lines subroutines :) Did you start
> > >creating real subs for your code already?
> >
> > I wish. :( Unfortunately not, outside some simple stuff, and I doubt
> > I will. The language just doesn't lend itself to that sort of thing.
> > We're going to add actual real subroutines to the language after we
> > roll out into production, but that doesn't help now, alas.
> 
> Interesting.  I'd like to test on something like that.  Maybe SPEC99 as well.
> 
> - Bill Coffman
> 
> 
> 


-- 
"Computer Science is merely the post-Turing Decline of Formal Systems Theory."
-???

Reply via email to