Reviewers: Sven Panne,
Description:
Ensure LModByPowerOf2I only gets environment when it deopts.
[email protected]
TEST=mozilla (with new --always-opt)
Please review this at https://codereview.chromium.org/423093009/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+16, -9 lines):
M src/arm/lithium-arm.cc
M src/arm64/lithium-arm64.cc
M src/ia32/lithium-ia32.cc
M src/lithium-codegen.cc
M src/mips/lithium-mips.cc
M src/mips64/lithium-mips64.cc
M src/x64/lithium-x64.cc
M src/x87/lithium-x87.cc
Index: src/arm/lithium-arm.cc
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
index
f4fef13ccecd1a9786a4c9ee2716d0f4a72b9fe6..11f9fde0576e4765bb5ee8cd21735e30fa48aa5c
100644
--- a/src/arm/lithium-arm.cc
+++ b/src/arm/lithium-arm.cc
@@ -1417,7 +1417,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/arm64/lithium-arm64.cc
diff --git a/src/arm64/lithium-arm64.cc b/src/arm64/lithium-arm64.cc
index
ff224182601d97c4d883f286411a27e26aafe770..de54093074e6d5022aa732c45d551c8024c1c33a
100644
--- a/src/arm64/lithium-arm64.cc
+++ b/src/arm64/lithium-arm64.cc
@@ -1856,7 +1856,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/ia32/lithium-ia32.cc
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
index
3be96ed7289a436d79ff4bbbbe7af111f0e305e5..173ab7c5530552b9e1a1a7cba9a6243fd5e06eca
100644
--- a/src/ia32/lithium-ia32.cc
+++ b/src/ia32/lithium-ia32.cc
@@ -1465,7 +1465,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/lithium-codegen.cc
diff --git a/src/lithium-codegen.cc b/src/lithium-codegen.cc
index
0f7cc5a3015a6b0c13ddf94e296bdd73e8cfb643..b13458a6174eec3667179d7e31593961bba7e843
100644
--- a/src/lithium-codegen.cc
+++ b/src/lithium-codegen.cc
@@ -116,12 +116,12 @@ void LCodeGenBase::CheckEnvironmentUsage() {
HInstruction* hinstr = HInstruction::cast(hval);
if (!hinstr->CanDeoptimize() && instr->HasEnvironment()) {
- V8_Fatal(__FILE__, __LINE__, "CanDeoptimize is wrong for %s (%s)\n",
+ V8_Fatal(__FILE__, __LINE__, "CanDeoptimize is wrong for %s (%s)",
hinstr->Mnemonic(), instr->Mnemonic());
}
if (instr->HasEnvironment() && !instr->environment()->has_been_used())
{
- V8_Fatal(__FILE__, __LINE__, "unused environment for %s (%s)\n",
+ V8_Fatal(__FILE__, __LINE__, "unused environment for %s (%s)",
hinstr->Mnemonic(), instr->Mnemonic());
}
}
Index: src/mips/lithium-mips.cc
diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc
index
fcdc1e059cdeb0f293315e83dd10415a0c2e7b60..336103e5dc561f734f3a7c8b490d436a0ddf53df
100644
--- a/src/mips/lithium-mips.cc
+++ b/src/mips/lithium-mips.cc
@@ -1418,7 +1418,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/mips64/lithium-mips64.cc
diff --git a/src/mips64/lithium-mips64.cc b/src/mips64/lithium-mips64.cc
index
c2de853e199e297ee58bce29578fa9f62c0e5848..505383de396a68a9ece9243874a6cde13440c2c9
100644
--- a/src/mips64/lithium-mips64.cc
+++ b/src/mips64/lithium-mips64.cc
@@ -1420,7 +1420,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/x64/lithium-x64.cc
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
index
af57996bbea638e10da47be5b0d077e68d5df8c9..d73536e8629a019b8775104a6dc8430f95215188
100644
--- a/src/x64/lithium-x64.cc
+++ b/src/x64/lithium-x64.cc
@@ -1445,7 +1445,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
Index: src/x87/lithium-x87.cc
diff --git a/src/x87/lithium-x87.cc b/src/x87/lithium-x87.cc
index
361b20be0b2fd2ffc8feec862de0c6870b821949..a32e78ab50ea11d3ecc841264566e30a1363a8ce
100644
--- a/src/x87/lithium-x87.cc
+++ b/src/x87/lithium-x87.cc
@@ -1451,7 +1451,8 @@ LInstruction* LChunkBuilder::DoModByPowerOf2I(HMod*
instr) {
int32_t divisor = instr->right()->GetInteger32Constant();
LInstruction* result = DefineSameAsFirst(new(zone()) LModByPowerOf2I(
dividend, divisor));
- if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
+ if (instr->CheckFlag(HValue::kLeftCanBeNegative) &&
+ instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
result = AssignEnvironment(result);
}
return result;
--
--
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.