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.

Reply via email to