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! |
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! > > > |
Free forum by Nabble | Edit this page |