Revision: 14617
Author:   [email protected]
Date:     Fri May 10 05:45:14 2013
Log: Robustification: Always assign an environment to LModI when a deopt is possible.

Currently things only work because of a very fragile interaction between minus
zero propagation and range analysis.

[email protected]

Review URL: https://codereview.chromium.org/14904008
http://code.google.com/p/v8/source/detail?r=14617

Modified:
 /branches/bleeding_edge/src/arm/lithium-arm.cc
 /branches/bleeding_edge/src/ia32/lithium-ia32.cc
 /branches/bleeding_edge/src/mips/lithium-mips.cc
 /branches/bleeding_edge/src/x64/lithium-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/lithium-arm.cc      Fri May 10 02:52:08 2013
+++ /branches/bleeding_edge/src/arm/lithium-arm.cc      Fri May 10 05:45:14 2013
@@ -1459,7 +1459,8 @@
     }

     if (instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
-        instr->CheckFlag(HValue::kCanBeDivByZero)) {
+        instr->CheckFlag(HValue::kCanBeDivByZero) ||
+        instr->CheckFlag(HValue::kCanOverflow)) {
       return AssignEnvironment(DefineAsRegister(mod));
     } else {
       return DefineAsRegister(mod);
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri May 10 02:52:08 2013 +++ /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri May 10 05:45:14 2013
@@ -1538,7 +1538,8 @@
     }

     return (instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
-            instr->CheckFlag(HValue::kCanBeDivByZero))
+            instr->CheckFlag(HValue::kCanBeDivByZero) ||
+            instr->CheckFlag(HValue::kCanOverflow))
         ? AssignEnvironment(result)
         : result;
   } else if (instr->representation().IsTagged()) {
=======================================
--- /branches/bleeding_edge/src/mips/lithium-mips.cc Fri May 10 02:52:08 2013 +++ /branches/bleeding_edge/src/mips/lithium-mips.cc Fri May 10 05:45:14 2013
@@ -1377,7 +1377,8 @@
     }

     if (instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
-        instr->CheckFlag(HValue::kCanBeDivByZero)) {
+        instr->CheckFlag(HValue::kCanBeDivByZero) ||
+        instr->CheckFlag(HValue::kCanOverflow)) {
       return AssignEnvironment(DefineAsRegister(mod));
     } else {
       return DefineAsRegister(mod);
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc      Fri May 10 02:52:08 2013
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc      Fri May 10 05:45:14 2013
@@ -1451,7 +1451,8 @@
     }

     return (instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
-            instr->CheckFlag(HValue::kCanBeDivByZero))
+            instr->CheckFlag(HValue::kCanBeDivByZero) ||
+            instr->CheckFlag(HValue::kCanOverflow))
         ? AssignEnvironment(result)
         : result;
   } else if (instr->representation().IsTagged()) {

--
--
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/groups/opt_out.


Reply via email to