Commit 5f846240 authored by Mike Stanton's avatar Mike Stanton Committed by Commit Bot

[TurboFan] Broken effect chain in IsInstanceType reduction

We didn't correctly maintain the effect chain between the load of
the map and the load of the instance type from the map.

Bug: v8:6929
Change-Id: I970709fe74483c5cdef3d0cea36bb9e1dc98b40e
Reviewed-on: https://chromium-review.googlesource.com/725424Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Michael Stanton <mvstanton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48690}
parent 50ecc42c
...@@ -239,12 +239,15 @@ Reduction JSIntrinsicLowering::ReduceIsInstanceType( ...@@ -239,12 +239,15 @@ Reduction JSIntrinsicLowering::ReduceIsInstanceType(
Node* vtrue = jsgraph()->FalseConstant(); Node* vtrue = jsgraph()->FalseConstant();
Node* if_false = graph()->NewNode(common()->IfFalse(), branch); Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
Node* efalse = graph()->NewNode( Node* efalse = effect;
simplified()->LoadField(AccessBuilder::ForMapInstanceType()), Node* map = efalse =
graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()), value, graph()->NewNode(simplified()->LoadField(AccessBuilder::ForMap()), value,
effect, if_false), efalse, if_false);
effect, if_false); Node* map_instance_type = efalse = graph()->NewNode(
Node* vfalse = graph()->NewNode(simplified()->NumberEqual(), efalse, simplified()->LoadField(AccessBuilder::ForMapInstanceType()), map, efalse,
if_false);
Node* vfalse =
graph()->NewNode(simplified()->NumberEqual(), map_instance_type,
jsgraph()->Constant(instance_type)); jsgraph()->Constant(instance_type));
Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
......
...@@ -88,7 +88,7 @@ TEST_F(JSIntrinsicLoweringTest, InlineIsArray) { ...@@ -88,7 +88,7 @@ TEST_F(JSIntrinsicLoweringTest, InlineIsArray) {
IsNumberEqual(IsLoadField(AccessBuilder::ForMapInstanceType(), IsNumberEqual(IsLoadField(AccessBuilder::ForMapInstanceType(),
IsLoadField(AccessBuilder::ForMap(), input, IsLoadField(AccessBuilder::ForMap(), input,
effect, CaptureEq(&if_false)), effect, CaptureEq(&if_false)),
effect, _), _, _),
IsNumberConstant(JS_ARRAY_TYPE)), IsNumberConstant(JS_ARRAY_TYPE)),
IsMerge(IsIfTrue(AllOf(CaptureEq(&branch), IsMerge(IsIfTrue(AllOf(CaptureEq(&branch),
IsBranch(IsObjectIsSmi(input), control))), IsBranch(IsObjectIsSmi(input), control))),
...@@ -119,7 +119,7 @@ TEST_F(JSIntrinsicLoweringTest, InlineIsTypedArray) { ...@@ -119,7 +119,7 @@ TEST_F(JSIntrinsicLoweringTest, InlineIsTypedArray) {
IsNumberEqual(IsLoadField(AccessBuilder::ForMapInstanceType(), IsNumberEqual(IsLoadField(AccessBuilder::ForMapInstanceType(),
IsLoadField(AccessBuilder::ForMap(), input, IsLoadField(AccessBuilder::ForMap(), input,
effect, CaptureEq(&if_false)), effect, CaptureEq(&if_false)),
effect, _), _, _),
IsNumberConstant(JS_TYPED_ARRAY_TYPE)), IsNumberConstant(JS_TYPED_ARRAY_TYPE)),
IsMerge(IsIfTrue(AllOf(CaptureEq(&branch), IsMerge(IsIfTrue(AllOf(CaptureEq(&branch),
IsBranch(IsObjectIsSmi(input), control))), IsBranch(IsObjectIsSmi(input), control))),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment