Reviewers: Igor Sheludko,
Message:
PTAL.
Description:
Remove FLAG_opt_safe_uint32_operations.
It has been turned on by default for a long time, and hydrogenized
BinaryOpStubs
actually depend on it being turned on.
BUG=v8:3487
LOG=n
Please review this at https://codereview.chromium.org/630023002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+12, -49 lines):
M src/arm/lithium-arm.cc
M src/arm64/lithium-arm64.cc
M src/flag-definitions.h
M src/hydrogen.cc
M src/ia32/lithium-ia32.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
M test/mjsunit/compiler/shift-shr.js
M test/mjsunit/mjsunit.status
Index: src/arm/lithium-arm.cc
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
index
c9462b4f8886310c298647e9fe7642f89e57410d..46897a3726c398786950fc78d20efe393ab1e30a
100644
--- a/src/arm/lithium-arm.cc
+++ b/src/arm/lithium-arm.cc
@@ -699,11 +699,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift
// by 0 and the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: src/arm64/lithium-arm64.cc
diff --git a/src/arm64/lithium-arm64.cc b/src/arm64/lithium-arm64.cc
index
83cf52b550cdf028f02f578c2bc8e2243e87a1ea..241bc4b20bfe705aaaa06580c473e367df521fae
100644
--- a/src/arm64/lithium-arm64.cc
+++ b/src/arm64/lithium-arm64.cc
@@ -2236,11 +2236,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
(JSShiftAmountFromHConstant(instr->right()) ==
0);
bool can_deopt = false;
if ((op == Token::SHR) && right_can_be_zero) {
- if (FLAG_opt_safe_uint32_operations) {
- can_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- can_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ can_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result;
Index: src/flag-definitions.h
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index
bfa2dca5c2741b9e3c174ab165a8167801e6ea43..6fd33a50a077a2b56250567b5e713286f8493d45
100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -307,9 +307,6 @@ DEFINE_INT(escape_analysis_iterations, 2,
"maximum number of escape analysis fix-point iterations")
DEFINE_BOOL(optimize_for_in, true, "optimize functions containing for-in
loops")
-DEFINE_BOOL(opt_safe_uint32_operations, true,
- "allow uint32 values on optimize frames if they are used only
in "
- "safe operations")
DEFINE_BOOL(concurrent_recompilation, true,
"optimizing hot functions asynchronously on a separate thread")
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index
54adfea6c06b2b470bf65c5eb09e535669a51f93..2c4435cc4cb2d1c89917ee5f11e701b7f737cfac
100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -2686,9 +2686,8 @@ HInstruction* HGraphBuilder::AddElementAccess(
DCHECK(val == NULL);
HLoadKeyed* load = Add<HLoadKeyed>(
elements, checked_key, dependency, elements_kind, load_mode);
- if (FLAG_opt_safe_uint32_operations &&
- (elements_kind == EXTERNAL_UINT32_ELEMENTS ||
- elements_kind == UINT32_ELEMENTS)) {
+ if (elements_kind == EXTERNAL_UINT32_ELEMENTS ||
+ elements_kind == UINT32_ELEMENTS) {
graph()->RecordUint32Instruction(load);
}
return load;
@@ -4400,7 +4399,7 @@ bool HGraph::Optimize(BailoutReason* bailout_reason) {
// Must be performed before canonicalization to ensure that Canonicalize
// will not remove semantically meaningful ToInt32 operations e.g.
BIT_OR with
// zero.
- if (FLAG_opt_safe_uint32_operations) Run<HUint32AnalysisPhase>();
+ Run<HUint32AnalysisPhase>();
if (FLAG_use_canonicalizing) Run<HCanonicalizePhase>();
@@ -10456,8 +10455,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
break;
case Token::SHR:
instr = AddUncasted<HShr>(left, right);
- if (FLAG_opt_safe_uint32_operations && instr->IsShr() &&
- CanBeZero(right)) {
+ if (instr->IsShr() && CanBeZero(right)) {
graph()->RecordUint32Instruction(instr);
}
break;
Index: src/ia32/lithium-ia32.cc
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
index
c9a23fd22868f928df88ac0474cadae1bdb6341d..8b20e86c70a60c6f5d73a49991873354d7cfdb34
100644
--- a/src/ia32/lithium-ia32.cc
+++ b/src/ia32/lithium-ia32.cc
@@ -739,11 +739,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift by 0
and
// the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: src/mips/lithium-mips.cc
diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc
index
7002ca4c08a57788645de759a85e8909ba10c654..c7f3517a8e13e157cf6c75c85aafa83df42ebddf
100644
--- a/src/mips/lithium-mips.cc
+++ b/src/mips/lithium-mips.cc
@@ -706,11 +706,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift
// by 0 and the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: src/mips64/lithium-mips64.cc
diff --git a/src/mips64/lithium-mips64.cc b/src/mips64/lithium-mips64.cc
index
9ebe74e058a83127e7c84c46e829f1cab3aae2d0..664fdd0846f017e12ecf010d5d792713fc481730
100644
--- a/src/mips64/lithium-mips64.cc
+++ b/src/mips64/lithium-mips64.cc
@@ -706,11 +706,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift
// by 0 and the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: src/x64/lithium-x64.cc
diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
index
9572a33ad87772595ef0f5f5d0d7e61f8071d15a..541d37ad6e66c3c48d262514bc8249eadecc821b
100644
--- a/src/x64/lithium-x64.cc
+++ b/src/x64/lithium-x64.cc
@@ -722,11 +722,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift by 0
and
// the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: src/x87/lithium-x87.cc
diff --git a/src/x87/lithium-x87.cc b/src/x87/lithium-x87.cc
index
3169a864538272ce5ebaa67db5dabd4fcdec1724..c23bce4e98bf298a1d1b7d1a33d62fc2a7e64f0d
100644
--- a/src/x87/lithium-x87.cc
+++ b/src/x87/lithium-x87.cc
@@ -736,11 +736,7 @@ LInstruction* LChunkBuilder::DoShift(Token::Value op,
// Shift operations can only deoptimize if we do a logical shift by 0
and
// the result cannot be truncated to int32.
if (op == Token::SHR && constant_value == 0) {
- if (FLAG_opt_safe_uint32_operations) {
- does_deopt = !instr->CheckFlag(HInstruction::kUint32);
- } else {
- does_deopt = !instr->CheckUsesForFlag(HValue::kTruncatingToInt32);
- }
+ does_deopt = !instr->CheckFlag(HInstruction::kUint32);
}
LInstruction* result =
Index: test/mjsunit/compiler/shift-shr.js
diff --git a/test/mjsunit/compiler/shift-shr.js
b/test/mjsunit/compiler/shift-shr.js
index
a300b2a5c98dd253c521d8a4097de8576af81c24..52cd370e427161d1bce33431647245c12300ad25
100644
--- a/test/mjsunit/compiler/shift-shr.js
+++ b/test/mjsunit/compiler/shift-shr.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --allow-natives-syntax --noopt-safe-uint32-operations
+// Flags: --allow-natives-syntax
// Check the results of `left >>> right`. The result is always unsigned
(and
// therefore positive).
Index: test/mjsunit/mjsunit.status
diff --git a/test/mjsunit/mjsunit.status b/test/mjsunit/mjsunit.status
index
aad4573af5aa343e3a6acc7a83188da2d509c36c..4a10f823cf25f89cb7c1e864b23858518662fa41
100644
--- a/test/mjsunit/mjsunit.status
+++ b/test/mjsunit/mjsunit.status
@@ -51,10 +51,6 @@
# Issue 3389: deopt_every_n_garbage_collections is unsafe
'regress/regress-2653': [SKIP],
- # This test relies on --noopt-safe-uint32-operations, which is broken.
See
- # issue 3487 for details.
- 'compiler/shift-shr': [SKIP],
-
##############################################################################
# TurboFan compiler failures.
--
--
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.