Skip to content

Conversation

graalvmbot
Copy link
Collaborator

No description provided.

@oracle-contributor-agreement oracle-contributor-agreement bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Sep 25, 2025
eregon and others added 5 commits October 3, 2025 17:28
* Faster in interpreter and better footprint than DynamicObjectLibrary,
  because Truffle libraries do not support host inlining and have footprint overhead.
* Use a more optimized guard for set() with 2 Shapes.
* Only inline cache 1 Shape for GetShapeFlagsNode.
  * An extra read seems better than more control flow.
* Migrate SL to DynamicObject nodes.
* Check the old Shape Assumption in the @Specialization.assumptions
  * This avoids an extra call to putGeneric() for host inlining,
    and ensures the specialization gets removed if the oldShape becomes invalid.
* Use putFlags instead of cachedPutFlags to fold during host inlining.
  * This saves around 6 node cost for DynamicObject.PutFixedKeyNode.
  * It is only observable if multiple PutNode#put*() methods are used (= different put flags) in the native image.
* Remove calls to Location#isFinal(), it's always false.
* Link the replacement nodes in DynamicObjectLibrary.
* Remove {PutNode,PutFixedKeyNode}#putInt, it boxes anyway so there is no value
  * Also other variants like putDouble are missing.
* Use @fallback to avoid potential issues with a Shape becoming invalid concurrently.
* Remove KeyEqualsNode and just compare keys by identity
  * Reduces subTreeCost of SLReadPropertyNode.readSLObject from 307 to 245.
* Use the same Shape check both in guards and specialization body.
* Merge inline caches of PutNode and InlinedConstKey into one.
* Merge inline caches of {PutNode,PutFixedKeyNode} and PutCache into one.
* Handle invalid shapes without removing all cached specializations
  * Removing the specialization instance itself is fine, the problem is
    removing all cache specialization due to the `replaces` on doUncached.
* Add a property read micro benchmark for SL
* Port documentation from DynamicObjectLibrary to DynamicObject nodes
* Update docs, 16 bit are actually allowed for user Shape flags
* Migrate DynamicObjectBenchmark and DynamicObjectPartialEvaluationTest
* [EXPERIMENT] Manually inline ExtLocations.ObjectArrayLocation in GetNode
* [EXPERIMENT] Manually inline ExtLocations.IntArrayLocation in GetNode
* [EXPERIMENT] Manually inline ExtLocations.ObjectArrayLocation in PutNode
* Cache the Location instead of Property in DynamicObject nodes to avoid extra indirection in interpreter
* Add interpreter benchmarks for DynamicObject.{GetNode,PutNode}
* It is enough to check the new Shape Assumption in PutNode
  * If the old Shape Assumption is invalidated, it will also invalidate the new Shape Assumption.
  * Fix bug where doCached was used with an old obsolete shape
* [GR-69326] Avoid duplicate property lookup in DynamicObject.PutNode
* Extract reusePropertyLookup() and fix RemoveKeyNode
* Run all DynamicObject tests with the new DynamicObject nodes too.

Co-authored-by: Andreas Woess <[email protected]>
@graalvmbot graalvmbot force-pushed the bd/GR-36894-dynamicobjectnodes branch from 0b7275c to bd8ec2f Compare October 3, 2025 15:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
OCA Verified All contributors have signed the Oracle Contributor Agreement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants