ENH][VM] Improved code generation (hopefully ;)

Andreas Raab andreas.raab at gmx.de
Mon Jul 7 10:58:17 UTC 2003


John,

Here are versions that work with 3.6 latest. I hadn't noticed that some
things changed in VMMaker itself. This also makes the Interpreter changes
work right.

Cheers,
  - Andreas

PS. What kind of variable name is "globalStructureBuildMethodHasFoo"??? ;-)


> -----Original Message-----
> From: squeak-dev-bounces at lists.squeakfoundation.org 
> [mailto:squeak-dev-bounces at lists.squeakfoundation.org] On 
> Behalf Of John M McIntosh
> Sent: Monday, July 07, 2003 11:16 AM
> To: The general-purpose Squeak developers list
> Subject: ENH][VM] Improved code generation (hopefully ;) 
> 
> 
> > From:   "Andreas Raab" < andreas.raab at g... >
> > Hi Guys,
> >
> > I was always suspicious about the way CCodeGenerator handled  
> > #interpret with
> > respect to temps (e.g., inlining all temps into interpret 
> and randomly
> > renaming them t1 ... tN) as it completely spoils life-time 
> analysis  
> > for the
> > C compiler (which has to assume that temps may be read in other code
> > branches and may even "optimize" them into wasting unneeded 
> registers  
> > across
> > code branches).
> >
> 
> First I was using
> Change Set:		CGeneratorEnhancements-ajh
> Date:			12 February 2002
> Author:			Anthony Hannan (ajh18 at cornell.edu)
> 
> which localized the variables in interpret(), but your change 
> set is a  
> cleaner solution.
> 
> I downloaded and setup a new image with SM & loaded the 
> latest VMMaker  
> (or so I thing/thought/believe).
> 
> Ran into some issues with the version of VMMaker you used and the  
> current one.
> Tim and you can sort out what's happening.
> 
> TMethod lost an instance variable 
> globalStructureBuildMethodHasFoo and  
> an overwrote a change in
> TMethod>>setSelector: args: locals: block: primitive:
> 
> 
> These two I'm unsure about who's at fault.
> a) Interpreter lost the class variable BlockMethodIndex
> b) and the method isUnwindMarked: is missing
> {Isn't that the block closure stuff?}
> 
> Also the two variables in interpret()
> localReturnContext & localReturnValue end up with no declaration.
> 
> Well now because I was using Hannan changeset in earlier work, since  
> 3.2.7b1, the difference is too small/difficult to measure.
> For the GCC flavor I don't think there was any difference in 
> the code  
> size. (40 bytes smaller for the entire VM, but I was missing the  
> UnwindMarked method, so I think that accounts for the 40 bytes).
> 
> For CodeWarrior OS9 there was a 46 byte difference for the 
> interpret()  
> function but any improvement is
> lost in measurement noise.  In the past the reason I used Hannan  
> changeset because it was obvious that codewarrior
> just gave up doing any useful local variable analyses and stuck the  
> first couple of vars into registers and was stupid...
> Also this made great improvements in how the 68K version worked with  
> GCC on OpenBSD 3.x
> 
>  From a note of mine to the list on April 9th, 2002 talking 
> about this:
>  >on a 68k BSD box with GCC the new numbers are {Hannan changeset }
>  >1,614,205 bytecodes/sec and 57,652 sends/sec
>  >versus my previous one using the jumptable modification
>  >1,550,387 bytecodes/sec and 55,080 sends/sec
>  >versus what I started with
>  >1,439,884 bytecodes/sec and 51,098 sends/sec
> 
> So yes the change is good.
> 
> ----------
> PS Another topic  In my measurements of the macrobenchmark I see
> 55.9% is interpret()
> 4.5% is sweepPhase
> 5.0% is markPhase
> 3.0% UpdatePointers (spelling?)
> 0.9% is incCompMove
> 
> Thus 10% lurks in the mark/sweep phase of the GC.
> 
> Fidding with ObjectMemory>>startField can be measured in the  
> tinybenchmarks.
> I'm considering check for type 0, else type = 2, otherwise 
> it's a small  
> Integer.  That becomes a load with set condition, a branch
> on condition, a check against 2 and a branch on condition. This  
> improves macrobenchbenchmark by 2%, but degrades then tinybenchmark  
> because of the integers it creates. MMM a case statement! might be  
> useful here...
> 
> 
> --
> ==============================================================
> ========== 
> ===
> John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
> Corporate Smalltalk Consulting Ltd.  
> http://www.smalltalkconsulting.com
> 
> ==============================================================
> ========== 
> ===
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: InterpreterFixes-3Point6.1.cs
Type: application/octet-stream
Size: 10712 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20030707/2b765d15/InterpreterFixes-3Point6.1.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CodeGenEnh-3Point6.2.cs
Type: application/octet-stream
Size: 17717 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20030707/2b765d15/CodeGenEnh-3Point6.2.obj


More information about the Squeak-dev mailing list