Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Unified Diff: src/compiler/js-typed-lowering.cc

Issue 799413002: [turbofan] Relax effects and context for JSToNumber(x:plain-primitive). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Don't always return Changed for plain-primitive inputs. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/js-typed-lowering.cc
diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
index 9094a662087ddb876fea4287a963d7e5ca462276..0aebb7fc626b0f9c57dfaa3c2b79f4c967a1f4fb 100644
--- a/src/compiler/js-typed-lowering.cc
+++ b/src/compiler/js-typed-lowering.cc
@@ -18,7 +18,6 @@ namespace compiler {
// TODO(turbofan): js-typed-lowering improvements possible
// - immediately put in type bounds for all new nodes
// - relax effects from generic but not-side-effecting operations
-// - relax effects for ToNumber(mixed)
// Relax the effects of {node} by immediately replacing effect uses of {node}
@@ -658,8 +657,6 @@ Reduction JSTypedLowering::ReduceJSToNumber(Node* node) {
}
Type* const input_type = NodeProperties::GetBounds(input).upper;
if (input_type->Is(Type::PlainPrimitive())) {
- // Converting a plain primitive to a number has no observable side effects.
- RelaxEffects(node);
if (input->opcode() == IrOpcode::kPhi) {
// JSToNumber(phi(x1,...,xn,control):plain-primitive,context)
// => phi(JSToNumber(x1,no-context),
@@ -671,6 +668,7 @@ Reduction JSTypedLowering::ReduceJSToNumber(Node* node) {
DCHECK(NodeProperties::IsControl(control));
DCHECK(NodeProperties::GetBounds(node).upper->Is(Type::Number()));
DCHECK(!NodeProperties::GetBounds(input).upper->Is(Type::Number()));
+ RelaxEffects(node);
node->set_op(common()->Phi(kMachAnyTagged, input_count));
for (int i = 0; i < input_count; ++i) {
Node* value = input->InputAt(i);
@@ -701,7 +699,9 @@ Reduction JSTypedLowering::ReduceJSToNumber(Node* node) {
node->AppendInput(graph()->zone(), control);
}
node->TrimInputCount(input_count + 1);
- } else if (input->opcode() == IrOpcode::kSelect) {
+ return Changed(node);
+ }
+ if (input->opcode() == IrOpcode::kSelect) {
// JSToNumber(select(c,x1,x2):plain-primitive,context)
// => select(c,JSToNumber(x1,no-context),JSToNumber(x2,no-context))
int const input_count = input->InputCount();
@@ -709,6 +709,7 @@ Reduction JSTypedLowering::ReduceJSToNumber(Node* node) {
DCHECK_EQ(3, input_count);
DCHECK(NodeProperties::GetBounds(node).upper->Is(Type::Number()));
DCHECK(!NodeProperties::GetBounds(input).upper->Is(Type::Number()));
+ RelaxEffects(node);
node->set_op(common()->Select(kMachAnyTagged, input_hint));
node->ReplaceInput(0, input->InputAt(0));
for (int i = 1; i < input_count; ++i) {
@@ -731,8 +732,15 @@ Reduction JSTypedLowering::ReduceJSToNumber(Node* node) {
node->ReplaceInput(i, value);
}
node->TrimInputCount(input_count);
+ return Changed(node);
+ }
+ if (node->InputAt(1) != jsgraph()->NoContextConstant() ||
+ node->InputAt(2) != graph()->start()) {
+ // JSToNumber(x:plain-primitive,context) => JSToNumber(x,no-context)
+ node->ReplaceInput(1, jsgraph()->NoContextConstant());
+ RelaxEffects(node);
+ return Changed(node);
}
- return Changed(node);
}
return NoChange();
}
« no previous file with comments | « no previous file | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698