[Vm-dev] VM Maker: VMMaker.oscog.seperateMarking-WoC.3298.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jan 12 13:13:18 UTC 2023


Tom Braun uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog.seperateMarking-WoC.3298.mcz

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

Name: VMMaker.oscog.seperateMarking-WoC.3298
Author: WoC
Time: 12 January 2023, 2:12:53.353326 pm
UUID: 5cc47dc5-7a97-4729-ad2f-2b93f218341d
Ancestors: VMMaker.oscog.seperateMarking-WoC.3297

slightly better error reporting for not inlineable functions (in which method did Slang try to inline them)

=============== Diff against VMMaker.oscog.seperateMarking-WoC.3297 ===============

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