Inliner strangeness

John M McIntosh johnmci at smalltalkconsulting.com
Thu Jun 8 22:47:37 UTC 2006


This was done on purpose years ago to inline all the variables in the  
GC logic.

If you have one accessor and one usage of the variable in another  
routine and say not to inline the accessor,
then the inliner won't fold the global into a local variable.  Your  
code example follows the rules nicely because you've only
one usage of the foo variable we can see and why make it a global...


On 8-Jun-06, at 1:53 PM, Andreas Raab wrote:

> Hi -
>
> I don't know if this behavior has been in the CCode inliner before  
> but I just noticed that the inliner will forcefully convert iVars  
> to temps if that iVar is only explicitly referred to in a single  
> method. Like, for example here:
>
> Interpreter>>getFoo
>   ^self cCode: 'foo'
>
> Interpreter>>setFoo: fooValue
>   foo := fooValue.
>
> The above will cause the inliner to remove foo from the regular  
> interpreter variables (even if declared via #declareCVarsIn:) and  
> move it into #setFoo:. With the foreseeable result of creating  
> total and utter nonsense in the resulting C code.
>
> Has anyone seen that before?
>
> Cheers,
>   - Andreas

--
======================================================================== 
===
John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
======================================================================== 
===




More information about the Vm-dev mailing list