v8/test/mjsunit/compiler/serializer-dead-after-jump.js
Maya Lekova 874cd773ef [turbofan] Keep sharing when merging into dead environment
Also make return and unconditional jumps kill the environment instead
of clearing it. This was still leftover from before we introduced
liveness and prevented sharing as well.

Bug: v8:7790
Change-Id: Ic79d64c9eaedf608d26e3265d4b27d21f7f3dfe1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1948710
Auto-Submit: Georg Neis <neis@chromium.org>
Commit-Queue: Maya Lekova <mslekova@chromium.org>
Reviewed-by: Maya Lekova <mslekova@chromium.org>
Reviewed-by: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65345}
2019-12-05 12:00:29 +00:00

38 lines
762 B
JavaScript

// Copyright 2019 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.
// Flags: --allow-natives-syntax --opt --no-always-opt
function f(x) {
%TurbofanStaticAssert(x.foo === 42);
return %IsBeingInterpreted();
}
function main(b, ret) {
const x = new Object();
const y = x;
if (b) {
return ret;
} else {
x.foo = 42;
return f(y);
}
}
%PrepareFunctionForOptimization(f);
%PrepareFunctionForOptimization(main);
f({a: 1});
f({b: 1});
f({c: 1});
f({d: 1});
assertTrue(main(true, true));
assertTrue(main(true, true));
assertTrue(main(false, true));
assertTrue(main(false, true));
%OptimizeFunctionOnNextCall(main);
assertFalse(main(false));