Fixed environment handling for LFlooringDivI on ARM.
Beautiful code... :-} BUG=chromium:437765 LOG=y Review URL: https://codereview.chromium.org/775613002 Cr-Commit-Position: refs/heads/master@{#25613}
This commit is contained in:
parent
d3c217674f
commit
c16b8f6cbb
@ -1397,8 +1397,16 @@ LInstruction* LChunkBuilder::DoFlooringDivI(HMathFloorOfDiv* instr) {
|
||||
LOperand* divisor = UseRegister(instr->right());
|
||||
LOperand* temp =
|
||||
CpuFeatures::IsSupported(SUDIV) ? NULL : TempDoubleRegister();
|
||||
LFlooringDivI* div = new(zone()) LFlooringDivI(dividend, divisor, temp);
|
||||
return AssignEnvironment(DefineAsRegister(div));
|
||||
LInstruction* result =
|
||||
DefineAsRegister(new (zone()) LFlooringDivI(dividend, divisor, temp));
|
||||
if (instr->CheckFlag(HValue::kCanBeDivByZero) ||
|
||||
instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
|
||||
(instr->CheckFlag(HValue::kCanOverflow) &&
|
||||
(!CpuFeatures::IsSupported(SUDIV) ||
|
||||
!instr->CheckFlag(HValue::kAllUsesTruncatingToInt32)))) {
|
||||
result = AssignEnvironment(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
22
test/mjsunit/regress/regress-437765.js
Normal file
22
test/mjsunit/regress/regress-437765.js
Normal file
@ -0,0 +1,22 @@
|
||||
// Copyright 2014 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 --no-fold-constants
|
||||
|
||||
function foo(x, y) {
|
||||
return Math.floor(x / y);
|
||||
}
|
||||
|
||||
function bar(x, y) {
|
||||
return foo(x + 1, y + 1);
|
||||
}
|
||||
|
||||
function baz() {
|
||||
bar(64, 2);
|
||||
}
|
||||
|
||||
baz();
|
||||
baz();
|
||||
%OptimizeFunctionOnNextCall(baz);
|
||||
baz();
|
Loading…
Reference in New Issue
Block a user