434d1ad014
In constructing the transfer between loop copies, we need to merge the backedges from all the previous copies of the given loop. The control reduction will work out which ones are really reachable. R=mstarzinger@chromium.org BUG= Review URL: https://codereview.chromium.org/1004993004 Cr-Commit-Position: refs/heads/master@{#27246}
79 lines
1.3 KiB
JavaScript
79 lines
1.3 KiB
JavaScript
// Copyright 2015 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: --use-osr --allow-natives-syntax --turbo-osr
|
|
|
|
var global_counter = 0;
|
|
|
|
function thrower() {
|
|
var x = global_counter++;
|
|
if (x == 5) %OptimizeOsr(thrower.caller);
|
|
if (x == 10) throw "terminate";
|
|
}
|
|
|
|
%NeverOptimizeFunction(thrower); // Don't want to inline the thrower.
|
|
%NeverOptimizeFunction(test); // Don't want to inline the func into test.
|
|
|
|
function test(func) {
|
|
for (var i = 0; i < 3; i++) {
|
|
global_counter = 0;
|
|
assertThrows(func);
|
|
}
|
|
}
|
|
|
|
function n1() {
|
|
while (true) thrower();
|
|
}
|
|
|
|
function n2() {
|
|
while (true) while (true) thrower();
|
|
}
|
|
|
|
function n3() {
|
|
while (true) while (true) while (true) thrower();
|
|
}
|
|
|
|
function n4() {
|
|
while (true) while (true) while (true) while (true) thrower();
|
|
}
|
|
|
|
function b1(a) {
|
|
while (true) {
|
|
thrower();
|
|
if (a) break
|
|
}
|
|
}
|
|
|
|
|
|
function b2(a) {
|
|
while (true) {
|
|
while (true) {
|
|
thrower();
|
|
if (a) break
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function b3(a) {
|
|
while (true) {
|
|
while (true) {
|
|
while (true) {
|
|
thrower();
|
|
if (a) break
|
|
}
|
|
if (a) break
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
test(n1);
|
|
test(n2);
|
|
test(n3);
|
|
test(n4);
|
|
test(b1);
|
|
test(b2);
|
|
test(b3);
|