Reviewers: Benedikt Meurer,
Description:
Fixed environment handling for LFlooringDivI on ARM.
Beautiful code... :-}
BUG=chromium:437765
LOG=y
Please review this at https://codereview.chromium.org/775613002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+32, -2 lines):
M src/arm/lithium-arm.cc
A test/mjsunit/regress/regress-437765.js
Index: src/arm/lithium-arm.cc
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
index
46897a3726c398786950fc78d20efe393ab1e30a..acb64f7c338dc536a0eddca0cccccf016f35fd4f
100644
--- a/src/arm/lithium-arm.cc
+++ b/src/arm/lithium-arm.cc
@@ -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;
}
Index: test/mjsunit/regress/regress-437765.js
diff --git a/test/mjsunit/regress/regress-437765.js
b/test/mjsunit/regress/regress-437765.js
new file mode 100644
index
0000000000000000000000000000000000000000..88d5388e6ee16e0ab832df39bce81c22a2b049f1
--- /dev/null
+++ b/test/mjsunit/regress/regress-437765.js
@@ -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();
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.