inlining methods in slang

Martin Kuball MartinKuball at web.de
Tue May 3 19:01:45 UTC 2005


Am Monday 02 May 2005 09:48 schrieb John M McIntosh:
> You should look at
> CCodeGenerator>>collectInlineList
>
> to understand why your code does not get inlined.
>
Well, the offending line is
   self var: #output type: 'unsigned char*'.

The inlined code can do well without it. But the code generated for 
the method does not compile without it. So my question is still: why 
do inlined methods get their own c method definitions? I think I 
could live without them.


> A long time ago I wrote up a change set to force inline of methods
> I thought were safe, but violated the rules, see
> http://www.smalltalkconsulting.com/papers/tipsAndThoughts/source/
> ForceInline-JMM.cs
> Since this example is 5 years old, I'd expect it might require some
> changes. A little bit of debugging should show you
> why the inliner is not doing the inlining.
>
> Lastly since you are fiddling with slang, you should be aware if
> that if you have a instance variable, and if that instance variable
> is used in methods that fold via inlining into a single C routine
> the global variable will become a c routine scoped variable. This
> optimization was used to improve the garbage collector since the
> mark logic is folded into a single routine but had used instance
> vars for recording state across multiple methods in ObjectMemory.
> If you do not wish this behavior you code up an accessor, then it
> will resort back to a global var.
>
> On May 1, 2005, at 9:15 AM, Martin Kuball wrote:
> > Hi!
> >
> > I'm writing a xvid plugin and have the following problem. I to
> > make the plugin code more readable I wrote a small method that
> > should be inlined into the c-code whenever it is called:
> >
> > insert: color into: output at: offset
> >
> >  | intColor |
> >
> >  intColor _ self cCoerce: color to: 'int'.
> >  output at: offset put: (0 max: (255 min: intColor))
> >
> > That works. But in addition the generator outputs code for the
> > method itself. But that code does not compile because the
> > generator generates code with output as an int var.
> >
> > Now declaring outpus as a pointer like:
> >
> > insert: color into: output at: offset
> >
> >  | intColor |
> >
> >  self var: #output type: 'unsigned char*'.
> >  intColor _ self cCoerce: color to: 'int'.
> >  output at: offset put: (0 max: (255 min: intColor))
> >
> > does help, but now the method is not inlined any more. Even
> > forcing inlining using
> >  self inline: true
> >
> > does not help.
> >
> > Martin
>
> --
> ===================================================================
>===== ===
> John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
> Corporate Smalltalk Consulting Ltd. 
> http://www.smalltalkconsulting.com
> ===================================================================
>===== ===



More information about the Squeak-dev mailing list