96b1fdb276
This turns on the existing --internalize_on_the_fly flag for the MEGAMORPHIC KeyedLoadIC to properly internalize strings before looking up the property. This avoids the otherwise taken runtime call to %KeyedGetProperty, which is definitely slower. Initially the --internalize_on_the_fly flag was turned off because internalizing strings on the fly causes too much traffic on the megamorphic stub cache. We avoid this problem here by not probing the stub cache in that case, which still gives the benefit of not having to go to the runtime. This improves the babylon test on the web-tooling-benchmark by around 2-3% and will probably also help with several tests (like React or Ember) on the Speedometer benchmark. If this CL causes trouble (i.e. tanks something important), we can just turn off the --internalize_on_the_fly flag again. Bug: v8:6936, v8:7026 Change-Id: If295ed3fd013f8b0ff031f9979e7df21dab817b6 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/751464 Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49093}
18 lines
363 B
JavaScript
18 lines
363 B
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
function foo(o, k) { return o[k]; }
|
|
|
|
const a = "a";
|
|
foo([1], 0);
|
|
foo({a:1}, a);
|
|
|
|
const p = new Proxy({}, {
|
|
get(target, name) {
|
|
return name;
|
|
}
|
|
});
|
|
|
|
assertEquals(a + "b", foo(p, a + "b"));
|