The Trunk: Compiler-nice.130.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Compiler-nice.130.mcz

commits-2
Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-nice.130.mcz

==================== Summary ====================

Name: Compiler-nice.130
Author: nice
Time: 2 March 2010, 1:28:40.263 am
UUID: cdff6f07-1e9b-f746-a7b1-2cd22feb03b4
Ancestors: Compiler-nice.129

Provide a better fix for http://source.squeak.org/trunk/Compiler-nice.129.mcz

BlockNode>>#addRemoteTemp: rootNode:
was always sent to the TempVariableNode definingScope...

But BlockNode>>#optimizedBlockHoistTempsInto:
might already have moved the temporaries to next upper unoptimized BlockNode (definingBlock actualScope).
This operation does not update the TempVariableNode definingScope (should it ?)

Thus, only when definingScope temporaries does not include the TempVariableNode,
should we attempt to remove it from actualScope temporaries....

Note: this does not solve (EventSensor>>#eventTickler) decompileWithTemps

=============== Diff against Compiler-nice.129 ===============

Item was changed:
  ----- Method: BlockNode>>addRemoteTemp:rootNode: (in category 'code generation (closures)') -----
  addRemoteTemp: aTempVariableNode rootNode: rootNode "<MethodNode>"
  "Add aTempVariableNode to my actualScope's sequence of
  remote temps.  If I am an optimized block then the actual
  scope is my actualScopeIfOptimized, otherwise it is myself."
  remoteTempNode == nil ifTrue:
  [remoteTempNode := RemoteTempVectorNode new
  name: self remoteTempNodeName
  index: arguments size + temporaries size
  type: LdTempType
  scope: 0.
  actualScopeIfOptimized
  ifNil:
  [self addTempNode: remoteTempNode.
  remoteTempNode definingScope: self]
  ifNotNil: [actualScopeIfOptimized addHoistedTemps: { remoteTempNode }]].
  remoteTempNode addRemoteTemp: aTempVariableNode encoder: rootNode encoder.
  "use remove:ifAbsent: because the deferred analysis for optimized
  loops can result in the temp has already been hoised into the root."
+ self removeTempNode: aTempVariableNode ifAbsent: [
+ self actualScope removeTempNode: aTempVariableNode ifAbsent: ["should not happen"]].
- self actualScope removeTempNode: aTempVariableNode ifAbsent: [].
  ^remoteTempNode!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Compiler-nice.130.mcz

Nicolas Cellier
2010/3/2  <[hidden email]>:

> Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
> http://source.squeak.org/trunk/Compiler-nice.130.mcz
>
> ==================== Summary ====================
>
> Name: Compiler-nice.130
> Author: nice
> Time: 2 March 2010, 1:28:40.263 am
> UUID: cdff6f07-1e9b-f746-a7b1-2cd22feb03b4
> Ancestors: Compiler-nice.129
>
> Provide a better fix for http://source.squeak.org/trunk/Compiler-nice.129.mcz
>

Hem, I meant http://bugs.squeak.org/view.php?id=7467
Danger, better not touching Compiler anymore at such a late time ;)

Nicolas

> BlockNode>>#addRemoteTemp: rootNode:
> was always sent to the TempVariableNode definingScope...
>
> But BlockNode>>#optimizedBlockHoistTempsInto:
> might already have moved the temporaries to next upper unoptimized BlockNode (definingBlock actualScope).
> This operation does not update the TempVariableNode definingScope (should it ?)
>
> Thus, only when definingScope temporaries does not include the TempVariableNode,
> should we attempt to remove it from actualScope temporaries....
>
> Note: this does not solve (EventSensor>>#eventTickler) decompileWithTemps
>
> =============== Diff against Compiler-nice.129 ===============
>
> Item was changed:
>  ----- Method: BlockNode>>addRemoteTemp:rootNode: (in category 'code generation (closures)') -----
>  addRemoteTemp: aTempVariableNode rootNode: rootNode "<MethodNode>"
>        "Add aTempVariableNode to my actualScope's sequence of
>         remote temps.  If I am an optimized block then the actual
>         scope is my actualScopeIfOptimized, otherwise it is myself."
>        remoteTempNode == nil ifTrue:
>                [remoteTempNode := RemoteTempVectorNode new
>                                                                name: self remoteTempNodeName
>                                                                index: arguments size + temporaries size
>                                                                type: LdTempType
>                                                                scope: 0.
>                 actualScopeIfOptimized
>                        ifNil:
>                                [self addTempNode: remoteTempNode.
>                                 remoteTempNode definingScope: self]
>                        ifNotNil: [actualScopeIfOptimized addHoistedTemps: { remoteTempNode }]].
>        remoteTempNode addRemoteTemp: aTempVariableNode encoder: rootNode encoder.
>        "use remove:ifAbsent: because the deferred analysis for optimized
>         loops can result in the temp has already been hoised into the root."
> +       self removeTempNode: aTempVariableNode ifAbsent: [
> +               self actualScope removeTempNode: aTempVariableNode ifAbsent: ["should not happen"]].
> -       self actualScope removeTempNode: aTempVariableNode ifAbsent: [].
>        ^remoteTempNode!
>
>
>