Reviewers: titzer,
Description:
Fix missing visitation of effect inputs to loads and stores.
[email protected]
Please review this at https://codereview.chromium.org/533773002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+11, -0 lines):
M src/compiler/simplified-lowering.cc
Index: src/compiler/simplified-lowering.cc
diff --git a/src/compiler/simplified-lowering.cc
b/src/compiler/simplified-lowering.cc
index
06df207149cccaf3d71405360b3695cf8fd093d0..3c3e47e0c08b3d5b62a0d93f81a30cd55e6f865b
100644
--- a/src/compiler/simplified-lowering.cc
+++ b/src/compiler/simplified-lowering.cc
@@ -188,6 +188,11 @@ class RepresentationSelector {
}
}
+ void ProcessEffect(Node* node) {
+ DCHECK_EQ(1, OperatorProperties::GetEffectInputCount(node->op()));
+ Enqueue(NodeProperties::GetEffectInput(node)); // Effect input: just
visit
+ }
+
// The default, most general visitation case. For {node}, process all
value,
// context, effect, and control inputs, assuming that value inputs
should have
// {kRepTagged} representation and can observe all output values
{kTypeAny}.
@@ -529,6 +534,7 @@ class RepresentationSelector {
case IrOpcode::kLoadField: {
FieldAccess access = FieldAccessOf(node->op());
ProcessInput(node, 0, changer_->TypeForBasePointer(access));
+ ProcessEffect(node);
SetOutput(node, access.machine_type);
if (lower()) lowering->DoLoadField(node);
break;
@@ -537,6 +543,7 @@ class RepresentationSelector {
FieldAccess access = FieldAccessOf(node->op());
ProcessInput(node, 0, changer_->TypeForBasePointer(access));
ProcessInput(node, 1, access.machine_type);
+ ProcessEffect(node);
SetOutput(node, 0);
if (lower()) lowering->DoStoreField(node);
break;
@@ -545,6 +552,7 @@ class RepresentationSelector {
ElementAccess access = ElementAccessOf(node->op());
ProcessInput(node, 0, changer_->TypeForBasePointer(access));
ProcessInput(node, 1, kMachInt32); // element index
+ ProcessEffect(node);
SetOutput(node, access.machine_type);
if (lower()) lowering->DoLoadElement(node);
break;
@@ -554,6 +562,7 @@ class RepresentationSelector {
ProcessInput(node, 0, changer_->TypeForBasePointer(access));
ProcessInput(node, 1, kMachInt32); // element index
ProcessInput(node, 2, access.machine_type);
+ ProcessEffect(node);
SetOutput(node, 0);
if (lower()) lowering->DoStoreElement(node);
break;
@@ -568,6 +577,7 @@ class RepresentationSelector {
MachineType machine_type = OpParameter<MachineType>(node);
ProcessInput(node, 0, tBase); // pointer or object
ProcessInput(node, 1, kMachInt32); // index
+ ProcessEffect(node);
SetOutput(node, machine_type);
break;
}
@@ -578,6 +588,7 @@ class RepresentationSelector {
ProcessInput(node, 0, tBase); // pointer or object
ProcessInput(node, 1, kMachInt32); // index
ProcessInput(node, 2, rep.machine_type);
+ ProcessEffect(node);
SetOutput(node, 0);
break;
}
--
--
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.