MIPS: Fixed environment handling for LFlooringDivI.
authorpaul.lind <paul.lind@imgtec.com>
Thu, 4 Dec 2014 23:50:26 +0000 (15:50 -0800)
committerCommit bot <commit-bot@chromium.org>
Thu, 4 Dec 2014 23:50:41 +0000 (23:50 +0000)
Port c16b8f6cbbe295abf3fab2f6b9f4a4632db4cf6b

TEST=mjsunit/regress/regress-437765
BUG=

Review URL: https://codereview.chromium.org/750213003

Cr-Commit-Position: refs/heads/master@{#25671}

src/mips/lithium-mips.cc
src/mips64/lithium-mips64.cc

index 7d5ffad..47aac30 100644 (file)
@@ -1401,8 +1401,14 @@ LInstruction* LChunkBuilder::DoFlooringDivI(HMathFloorOfDiv* instr) {
   DCHECK(instr->right()->representation().Equals(instr->representation()));
   LOperand* dividend = UseRegister(instr->left());
   LOperand* divisor = UseRegister(instr->right());
-  LFlooringDivI* div = new(zone()) LFlooringDivI(dividend, divisor);
-  return AssignEnvironment(DefineAsRegister(div));
+  LInstruction* result =
+      DefineAsRegister(new (zone()) LFlooringDivI(dividend, divisor));
+  if (instr->CheckFlag(HValue::kCanBeDivByZero) ||
+      instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
+      (instr->CheckFlag(HValue::kCanOverflow))) {
+    result = AssignEnvironment(result);
+  }
+  return result;
 }
 
 
index 664fdd0..c219294 100644 (file)
@@ -1402,8 +1402,14 @@ LInstruction* LChunkBuilder::DoFlooringDivI(HMathFloorOfDiv* instr) {
   DCHECK(instr->right()->representation().Equals(instr->representation()));
   LOperand* dividend = UseRegister(instr->left());
   LOperand* divisor = UseRegister(instr->right());
-  LFlooringDivI* div = new(zone()) LFlooringDivI(dividend, divisor);
-  return AssignEnvironment(DefineAsRegister(div));
+  LInstruction* result =
+      DefineAsRegister(new (zone()) LFlooringDivI(dividend, divisor));
+  if (instr->CheckFlag(HValue::kCanBeDivByZero) ||
+      instr->CheckFlag(HValue::kBailoutOnMinusZero) ||
+      (instr->CheckFlag(HValue::kCanOverflow))) {
+    result = AssignEnvironment(result);
+  }
+  return result;
 }