Reviewers: titzer,
https://codereview.chromium.org/523633002/diff/1/test/cctest/compiler/test-js-typed-lowering.cc
File test/cctest/compiler/test-js-typed-lowering.cc (right):
https://codereview.chromium.org/523633002/diff/1/test/cctest/compiler/test-js-typed-lowering.cc#newcode761
test/cctest/compiler/test-js-typed-lowering.cc:761:
IrOpcode::kJSToBoolean == r->opcode());
On 2014/08/29 15:49:38, titzer wrote:
Can you use a value use here?
Done.
https://codereview.chromium.org/523633002/diff/1/test/cctest/compiler/test-js-typed-lowering.cc#newcode1189
test/cctest/compiler/test-js-typed-lowering.cc:1189:
IrOpcode::kJSToBoolean == r->opcode());
On 2014/08/29 15:49:38, titzer wrote:
Can you push this condition down into the branch below?
Done.
Description:
Fix typed lowering of JSUnaryNot to work with graph reducer.
[email protected]
TEST=cctest/test-js-typed-lowering/UnaryNot[Effects]
Please review this at https://codereview.chromium.org/523633002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+25, -10 lines):
M src/compiler/js-generic-lowering.cc
M src/compiler/js-typed-lowering.cc
M test/cctest/compiler/test-js-typed-lowering.cc
Index: src/compiler/js-generic-lowering.cc
diff --git a/src/compiler/js-generic-lowering.cc
b/src/compiler/js-generic-lowering.cc
index
b8cf80389ca7d3c9b150da0e528fa8b93b36104a..49574f8754eea4e8c9286240173be40a82df1937
100644
--- a/src/compiler/js-generic-lowering.cc
+++ b/src/compiler/js-generic-lowering.cc
@@ -286,7 +286,6 @@ REPLACE_RUNTIME_CALL(JSCreateGlobalContext,
Runtime::kAbort)
UNIMPLEMENTED(); \
return node; \
}
-REPLACE_UNIMPLEMENTED(JSToString)
REPLACE_UNIMPLEMENTED(JSToName)
REPLACE_UNIMPLEMENTED(JSYield)
REPLACE_UNIMPLEMENTED(JSDebugger)
@@ -411,6 +410,12 @@ Node* JSGenericLowering::LowerJSToBoolean(Node* node) {
}
+Node* JSGenericLowering::LowerJSToString(Node* node) {
+ ReplaceWithBuiltinCall(node, Builtins::TO_STRING, 1);
+ return node;
+}
+
+
Node* JSGenericLowering::LowerJSToObject(Node* node) {
ReplaceWithBuiltinCall(node, Builtins::TO_OBJECT, 1);
return node;
Index: src/compiler/js-typed-lowering.cc
diff --git a/src/compiler/js-typed-lowering.cc
b/src/compiler/js-typed-lowering.cc
index
64663df9aec4d553d9ba8ae2fd018c08ec728b55..0cf53373f637645ce74f73cdd5a367e23c495d08
100644
--- a/src/compiler/js-typed-lowering.cc
+++ b/src/compiler/js-typed-lowering.cc
@@ -587,19 +587,19 @@ Reduction JSTypedLowering::Reduce(Node* node) {
Reduction result = ReduceJSToBooleanInput(node->InputAt(0));
Node* value;
if (result.Changed()) {
- // !x => BooleanNot(x)
+ // JSUnaryNot(x) => BooleanNot(x)
value =
graph()->NewNode(simplified()->BooleanNot(),
result.replacement());
NodeProperties::ReplaceWithValue(node, value);
return Changed(value);
} else {
- // !x => BooleanNot(JSToBoolean(x))
+ // JSUnaryNot(x) => BooleanNot(JSToBoolean(x))
value = graph()->NewNode(simplified()->BooleanNot(), node);
node->set_op(javascript()->ToBoolean());
NodeProperties::ReplaceWithValue(node, value, node);
// Note: ReplaceUses() smashes all uses, so smash it back here.
value->ReplaceInput(0, node);
- return ReplaceWith(value);
+ return Changed(node);
}
}
case IrOpcode::kJSToBoolean:
Index: test/cctest/compiler/test-js-typed-lowering.cc
diff --git a/test/cctest/compiler/test-js-typed-lowering.cc
b/test/cctest/compiler/test-js-typed-lowering.cc
index
6e9cb30933b82be10551c2fe409b92a5de2a9a61..08f65f08757d88195dba679003c015154fb8aeb0
100644
--- a/test/cctest/compiler/test-js-typed-lowering.cc
+++ b/test/cctest/compiler/test-js-typed-lowering.cc
@@ -755,9 +755,19 @@ TEST(UnaryNot) {
Operator* opnot = R.javascript.UnaryNot();
for (size_t i = 0; i < arraysize(kJSTypes); i++) {
- Node* r = R.ReduceUnop(opnot, kJSTypes[i]);
+ Node* orig = R.Unop(opnot, R.Parameter(kJSTypes[i]));
+ Node* use = R.graph.NewNode(R.common.Return(), orig);
+ Node* r = R.reduce(orig);
// TODO(titzer): test will break if/when js-typed-lowering constant
folds.
- CHECK_EQ(IrOpcode::kBooleanNot, r->opcode());
+ CHECK_EQ(IrOpcode::kBooleanNot, use->InputAt(0)->opcode());
+
+ if (r == orig && orig->opcode() == IrOpcode::kJSToBoolean) {
+ // The original node was turned into a ToBoolean, which has an
effect.
+ CHECK_EQ(IrOpcode::kJSToBoolean, r->opcode());
+ } else {
+ // effect should have been removed from this node.
+ CHECK_EQ(IrOpcode::kBooleanNot, r->opcode());
+ }
}
}
@@ -1184,16 +1194,16 @@ TEST(UnaryNotEffects) {
Node* value_use = R.graph.NewNode(R.common.Return(), orig);
Node* r = R.reduce(orig);
// TODO(titzer): test will break if/when js-typed-lowering constant
folds.
- CHECK_EQ(IrOpcode::kBooleanNot, r->opcode());
-
- CHECK_EQ(r, value_use->InputAt(0));
+ CHECK_EQ(IrOpcode::kBooleanNot, value_use->InputAt(0)->opcode());
- if (r->InputAt(0) == orig && orig->opcode() == IrOpcode::kJSToBoolean)
{
+ if (r == orig && orig->opcode() == IrOpcode::kJSToBoolean) {
// The original node was turned into a ToBoolean, which has an
effect.
+ CHECK_EQ(IrOpcode::kJSToBoolean, r->opcode());
R.CheckEffectInput(R.start(), orig);
R.CheckEffectInput(orig, effect_use);
} else {
// effect should have been removed from this node.
+ CHECK_EQ(IrOpcode::kBooleanNot, r->opcode());
R.CheckEffectInput(R.start(), effect_use);
}
}
--
--
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.