[Vm-dev] VM Maker: VMMaker.oscog-eem.2707.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Feb 7 03:12:08 UTC 2020
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2707.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2707
Author: eem
Time: 6 February 2020, 7:11:51.600304 pm
UUID: a4344316-174b-4827-baa1-491549ea3e52
Ancestors: VMMaker.oscog-eem.2706
Slang: Eliminate one source of unused expressions, the expansions of literal block nodes not used for value with a trailing effectless expression.
Dual mapped zone:
Make assertValidDualZoneFrom:to: conditional on cppIf: #DUAL_MAPPED_CODE_ZONE
=============== Diff against VMMaker.oscog-eem.2706 ===============
Item was changed:
----- Method: Cogit>>assertValidDualZoneFrom:to: (in category 'debugging') -----
assertValidDualZoneFrom: startAddress to: endAddress
"{(self firstInvalidDualZoneAddressFrom: startAddress to: endAddress) hex. ((self firstInvalidDualZoneAddressFrom: startAddress to: endAddress) + codeToDataDelta) hex }"
"{self firstInvalidDualZoneAddress. self firstInvalidDualZoneAddress + codeToDataDelta }"
"{self firstInvalidDualZoneAddress hex. (self firstInvalidDualZoneAddress + codeToDataDelta) hex }"
"{(objectMemory longAt: self firstInvalidDualZoneAddress) hex. (objectMemory longAt: self firstInvalidDualZoneAddress + codeToDataDelta) hex }"
"self armDisassembleDualZoneAnomalies"
"self armPrintDualZoneAnomalies"
+ <inline: #always>
+ self cCode:
+ [self cppIf: #DUAL_MAPPED_CODE_ZONE
+ ifTrue:
+ [backEnd assertCoherentCodeAt: startAddress + cmNoCheckEntryOffset delta: codeToDataDelta]]
+ inSmalltalk:
+ [self assert: (self firstInvalidDualZoneAddressFrom: startAddress to: endAddress) isNil]!
- self cCode: ''
- inSmalltalk: [self assert: (self firstInvalidDualZoneAddressFrom: startAddress to: endAddress) isNil]!
Item was added:
+ ----- Method: TAssignmentNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^true!
Item was added:
+ ----- Method: TBraceCaseNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^cases anySatisfy: [:node| node hasEffect]!
Item was added:
+ ----- Method: TCaseStmtNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^expression hasEffect
+ or: [cases anySatisfy: [:node| node hasEffect]]!
Item was added:
+ ----- Method: TGoToNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^true!
Item was added:
+ ----- Method: TInlineNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^method hasEffect!
Item was added:
+ ----- Method: TLabeledCommentNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^true!
Item was added:
+ ----- Method: TMethod>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^parseTree hasEffect!
Item was added:
+ ----- Method: TParseNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^false!
Item was added:
+ ----- Method: TReturnNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^true!
Item was added:
+ ----- Method: TSendNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ (#(#+ #- #* #/ #// #\\ #= #== #~= #~~ not) includes: selector) ifTrue:
+ [^false].
+ (#(cCoerce:to: cCoerceSimple:to:) includes: selector) ifTrue:
+ [^arguments first hasEffect].
+ ^true!
Item was changed:
----- Method: TStmtListNode>>emitCCodeOn:prependToEnd:level:generator: (in category 'C code generation') -----
emitCCodeOn: aStream prependToEnd: aNodeOrNil level: level generator: aCodeGen
+ | statementToElide |
self emitCCommentOn: aStream level: level generator: aCodeGen.
+ (aNodeOrNil notNil or: [statements isEmpty or: [statements last hasEffect]]) ifFalse:
+ [statementToElide := statements last].
statements withIndexDo:
[:s :idx| | position |
s emitCCommentOn: aStream level: level generator: aCodeGen.
+ (s == statementToElide
+ or: [s isLeaf and: [s isLabel not and: [aNodeOrNil isNil or: [idx < statements size]]]]) ifFalse:
- (s isLeaf and: [s isLabel not and: [aNodeOrNil isNil or: [idx < statements size]]]) ifFalse:
[aStream peekLast ~~ Character tab ifTrue:
[aStream tab: level].
position := aStream position.
(aNodeOrNil notNil
and: [idx = statements size])
ifTrue:
[s emitCCodeOn: aStream prependToEnd: aNodeOrNil level: level generator: aCodeGen]
ifFalse:
[s emitCCodeOn: aStream level: level generator: aCodeGen].
aStream position > position ifTrue:
[(self stream: aStream endsWithAnyOf: '};') ifFalse:
[s needsTrailingSemicolon ifTrue:
[aStream nextPut: $;]].
aStream peekLast ~~ Character cr ifTrue:
[aStream cr]]]]!
Item was added:
+ ----- Method: TStmtListNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^(arguments anySatisfy: [:node| node hasEffect])
+ or: [statements anySatisfy: [:node| node hasEffect]]!
Item was added:
+ ----- Method: TSwitchStmtNode>>hasEffect (in category 'testing') -----
+ hasEffect
+ "Answer if this node has an effect on execution state (does something).
+ Statements that don't have any effect can be elided if their value is unused."
+ ^expression hasEffect
+ or: [(otherwiseOrNil notNil and: [otherwiseOrNil hasEffect])
+ or: [cases anySatisfy: [:node| node hasEffect]]]!
More information about the Vm-dev
mailing list