b967c0d138
If a register is used for both input and output by a SAME_INPUT_OUTPUT operand, then it represents a different virtual register for the end use-position of an instruction (since that will become the output's virtual register). It therefore can't be used to represent the input virtual register for any input operands that are USED_AT_END. BUG=chromium:1163715,v8:9684 Change-Id: I8dc0008ba81d5f1d0e38091b6dc013725c62b1b4 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2632700 Reviewed-by: Santiago Aboy Solanes <solanes@chromium.org> Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#72149}
28 lines
553 B
JavaScript
28 lines
553 B
JavaScript
// Copyright 2021 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: --turboprop --allow-natives-syntax
|
|
|
|
let last_value;
|
|
let throwFunc;
|
|
|
|
function foo(count) {
|
|
let val = 1;
|
|
for (let i = 16; i < count; ++i) {
|
|
try {
|
|
throwFunc();
|
|
} catch (e) {
|
|
}
|
|
val *= 2;
|
|
last_value = val;
|
|
}
|
|
}
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
foo(20);
|
|
foo(21);
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
foo(47);
|
|
assertEquals(2147483648, last_value);
|