[Vm-dev] VM Maker: VMMaker.oscog-eem.3289.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jan 12 19:12:36 UTC 2023


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3289.mcz

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

Name: VMMaker.oscog-eem.3289
Author: eem
Time: 12 January 2023, 11:12:13.125301 am
UUID: 9307c38e-b2fb-4e92-af64-d991d3caf7a7
Ancestors: VMMaker.oscog-eem.3288

Repair the damage after the previous commit, which was due to my not having implemented file out from an MCPatchTool correctly before Monticello-eem.785.

So properly merge VMMaker.oscog.seperateMarking-WoC.3298 & VMMaker.oscog.seperateMarking-WoC.3299.

=============== Diff against VMMaker.oscog-eem.3288 ===============

Item was removed:
- ----- Method: StackInterpreter>>checkForRequiredInlinability (in category 'stack bytecodes') -----
- checkForRequiredInlinability
- 	"This is used in methods answering inlinability.
- 	 Always answer false.  But if the receiver is marked as something that must be inlined (inline == #always) raise an error."
- 	(inline == #always and: [complete]) ifTrue:
- 		[self error: 'cannot inline method ', selector, ' marked as <inline: #always>'].
- 	^false!!TMethod methodsFor: #testing stamp: 'WoC 1/12/2023 12:48'!

Item was removed:
- ----- Method: StackInterpreter>>checkForRequiredInlinabilityIn: (in category 'stack bytecodes') -----
- checkForRequiredInlinabilityIn: aMethod
- 	"This is used in methods answering inlinability.
- 	 Always answer false.  But if the receiver is marked as something that must be inlined (inline == #always) raise an error."
- 	(inline == #always and: [complete]) ifTrue:
- 		[self error: 'cannot inline method ', selector, ' marked as <inline: #always> into: ', aMethod asString].
- 	^false!!TMethod methodsFor: #inlining stamp: 'WoC 1/12/2023 12:47'!

Item was changed:
  ----- Method: StackInterpreter>>extPushFullClosureBytecode (in category 'stack bytecodes') -----
  extPushFullClosureBytecode
  	"255		11111111	xxxxxxxx	siyyyyyy	
  		push Closure Compiled block literal index xxxxxxxx (+ Extend A * 256) 
  		numCopied yyyyyy 
  		receiverOnStack: s = 1 
  		ignoreOuterContext: i = 1
  	 The compiler has pushed the values to be copied, if any. The receiver has been pushed on stack before if specified. 
  	 Create a Closure with space for the copiedValues and pop numCopied values off the stack into the closure.
  	 Sets outerContext, compiledBlock, numArgs and receiver as specified.."
  	| compiledBlockLiteralIndex compiledBlock byte numArgs numCopied receiverIsOnStack ignoreContext |
  	compiledBlockLiteralIndex := self fetchByte + (extA << 8).
  	extA := 0.
  	compiledBlock := objectMemory followMaybeForwarded: (self literal: compiledBlockLiteralIndex).
  	self assert: (objectMemory isOopCompiledMethod: compiledBlock).
  	numArgs := self argumentCountOf: compiledBlock.
  	byte := self fetchByte.
  	numCopied := byte bitAnd: 1<< 6 - 1.
  	receiverIsOnStack := byte anyMask: 1 << 7.
  	ignoreContext := byte anyMask: 1 << 6.
+ 	self pushFullClosureNumArgs: numArgs copiedValues: numCopied compiledBlock: compiledBlock receiverIsOnStack: receiverIsOnStack ignoreContext: ignoreContext!
- 	self pushFullClosureNumArgs: numArgs copiedValues: numCopied compiledBlock: compiledBlock receiverIsOnStack: receiverIsOnStack ignoreContext: ignoreContext!!TMethod methodsFor: #testing stamp: 'eem 12/15/2016 09:32'!

Item was removed:
- ----- Method: TMethod>>checkForRequiredInlinability (in category 'testing') -----
- checkForRequiredInlinability
- 	"This is used in methods answering inlinability.
- 	 Always answer false.  But if the receiver is marked as something that must be inlined (inline == #always) raise an error."
- 	(inline == #always and: [complete]) ifTrue:
- 		[self error: 'cannot inline method ', selector, ' marked as <inline: #always>'].
- 	^false!

Item was added:
+ ----- Method: TMethod>>checkForRequiredInlinabilityIn: (in category 'testing') -----
+ checkForRequiredInlinabilityIn: aMethod
+ 	"This is used in methods answering inlinability.
+ 	 Always answer false.  But if the receiver is marked as something that must be inlined (inline == #always) raise an error."
+ 	(inline == #always and: [complete]) ifTrue:
+ 		[self error: 'cannot inline method ', selector, ' marked as <inline: #always> into: ', aMethod asString].
+ 	^false!

Item was changed:
  ----- Method: TMethod>>inlineableFunctionCall:in: (in category 'inlining') -----
  inlineableFunctionCall: aNode in: aCodeGen
  	"Answer if the given send node is a call to a 'functional' method--a method whose body is a single return statement of some expression and whose actual parameters can all be directly substituted."
  
  	aCodeGen maybeBreakForTestToInline: aNode in: self.
  	aNode isSend ifFalse:
  		[^false].
  	((aCodeGen shouldGenerateAsInterpreterProxySend: aNode)
  	 or: [aCodeGen isStructSend: aNode]) ifTrue:
  		[^false].
  	^(aCodeGen methodNamed: aNode selector)
  		ifNil:
  			[aNode asTransformedConstantPerform
  				ifNil: [self isInlineableConditional: aNode in: aCodeGen]
  				ifNotNil: [:n| self inlineableFunctionCall: n in: aCodeGen]]
  		ifNotNil:
  			[:m|
  			 (m ~~ self
  			  and: [((m isFunctionalIn: aCodeGen) or: [m mustBeInlined and: [m isComplete]])
  			  and: [m mayBeInlined
  			  and: [(aCodeGen mayInline: m selector)
  			  and: [aNode args allSatisfy: [:a| self isSubstitutableNode: a intoMethod: m in: aCodeGen]]]]])
+ 			 or: [m checkForRequiredInlinabilityIn: self]]!
- 			 or: [m checkForRequiredInlinability]]!

Item was changed:
  ----- Method: TMethod>>inlineableSend:in: (in category 'inlining') -----
  inlineableSend: aNode in: aCodeGen
  	"Answer if the given send node is a call to a method that can be inlined."
  
  	| m |
  	aCodeGen maybeBreakForTestToInline: aNode in: self.
  	aNode isSend ifFalse: [^false].
  	m := aCodeGen methodNamed: aNode selector.  "nil if builtin or external function"
+ 	
  	^m ~= nil
  	 and: [m ~~ self
+ 	 and: [m unmodifiedSelector ~= self unmodifiedSelector
  	 and: [m mayBeInlined
  	 and: [(m isComplete and: [aCodeGen mayInline: m selector])
+ 		or: [m checkForRequiredInlinabilityIn: self]]]]]!
- 		or: [m checkForRequiredInlinability]]]]!



More information about the Vm-dev mailing list