[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