-
Jakob Gruber authored
This CL enables a first batch of feedback-based optimizations in NCI code. Specifically, optimizations based on unary, binary, compare, for-in-next, and for-in-prepare feedback are now enabled. This has two main implications: 1. NCI code can now deopt. Deoptimized code is currently thrown away permanently and cannot be reused. Now that shared/cached NCI code can deopt, this leads to an interesting question of what should happen with deoptimized NCI code. The answer in this CL is to remove the cache entry (it may later be re-added). 2. Tiering up from NCI to TF still requires feedback; since NCI code, starting with this CL, no longer collects full feedback, feedback must be created in some other way. This is solved by sharing a context-independent encoding of feedback across native contexts. Feedback is shared through a new SerializedFeedback object type, essentially a byte array of serialized feedback. Currently, only smi-based feedback is shared, but map-based feedback will be added in the future. SerializedFeedback is kept in the NCI cache alongside NCI Code objects. It is created on NCI cache insertion, and deserialized upon NCI cache hits. Bug: v8:8888 Change-Id: Ic0d5fbea3aa4d3b0a165624dab9d0283b07dcee7 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2531775Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Mythri Alle <mythria@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#71224}
3599cce1