forked from v8/v8
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[regalloc] Fix slot requirement for live ranges defined by a const
Live ranges defined by a constant operand normally don't require a spill slot since they can just rematerialize the value from the constant. In the attached issue however, deoptimization adds an explicit slot requirement for a range that is defined by a constant operand. This case is not expected in the register allocator and we eventually hit a DCHECK. This fix allocates a new stack slot during the MeetRegisterConstraints and adds the missing gap move. Drive-by: remove dead method LiveRange::NextSlotPosition. [email protected] CC=[email protected] Bug: chromium:1146880 Change-Id: I08fbb890f2f3d9574196989cf3e5ef6232433484 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2563689 Reviewed-by: Sigurd Schneider <[email protected]> Commit-Queue: Thibaud Michaud <[email protected]> Cr-Commit-Position: refs/heads/master@{#73510}
- Loading branch information
1 parent
0cfeb2c
commit 0ee6f90
Showing
3 changed files
with
63 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// 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: --allow-natives-syntax --assert-types | ||
|
||
function f(a,b) { | ||
let t = a >= b; | ||
while (t != 0) { | ||
a = a | (b - a); | ||
let unused = a >= b; | ||
t = a < b; | ||
} | ||
} | ||
function test() { | ||
f(Infinity,1); | ||
f(undefined, undefined); | ||
} | ||
|
||
// Trigger TurboFan compilation | ||
%PrepareFunctionForOptimization(test); | ||
%PrepareFunctionForOptimization(f); | ||
test(); | ||
test(); | ||
%OptimizeFunctionOnNextCall(test); | ||
test(); |