92c6af8a2d
The CloneObject bytecode was only able to handle objects, null and undefined, and explicit bytecode had to be generated to perform the ToObject outside the bytecode (unlike the other IC bytecodes that just perform the ToObject implicitly). That means the simplest possible object cloning would also generate a sequence of 5 bytecodes (at least): ``` Mov <register>, a0 JumpIfNull @1 JumpIfUndefined @1 ToObject <register> 1: CloneObject <register> ``` That is quite wasteful and unnecessary, since the core logic in the runtime already does the ToObject properly anyways. This change refactors the CloneObjectIC slightly to behave more like the other ICs and do the ToObject implicitly when necessary. Bug: v8:7611, v8:9114, v8:9183, v8:9343 Change-Id: I11973e90bf875f154a5a7739287bee17041e4a7a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1649554 Reviewed-by: Mythri Alle <mythria@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Auto-Submit: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#62064} |
||
---|---|---|
.. | ||
regress | ||
object-rest-basic.js | ||
object-spread-basic.js | ||
object-spread-ic-dontenum-transition.js | ||
object-spread-ic-multiple-transitions.js | ||
object-spread-ic.js | ||
regexp-lookbehind.js | ||
template-escapes.js |