Reviewers: Michael Starzinger,

Message:
Hi Michael,
PTAL, thanks :)
--Michael

Description:
Vector ICs: Additional Turbofan support

Lowering of stores need the vector and slot if --vector-stores is true.

BUG=

Please review this at https://codereview.chromium.org/1193313002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+38, -11 lines):
  M src/compiler/ast-graph-builder.cc
  M src/compiler/js-generic-lowering.cc
  M src/compiler/js-operator.cc
  M test/unittests/compiler/js-typed-lowering-unittest.cc


Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc index 22ef8518249f825d5abf93fc5518c535b61af302..ec8cbe2d4e83876b32b99bc1f704a46c1fdfd359 100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -3513,6 +3513,11 @@ Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, const ResolvedFeedbackSlot& feedback,
                                        TypeFeedbackId id) {
const Operator* op = javascript()->StoreProperty(language_mode(), feedback);
+  if (FLAG_vector_stores) {
+    Node* node = NewNode(op, object, key, value, GetFeedbackVector());
+    return Record(js_type_feedback_, node, feedback.slot());
+  }
+
   return Record(js_type_feedback_, NewNode(op, object, key, value), id);
 }

@@ -3523,6 +3528,11 @@ Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name,
                                        TypeFeedbackId id) {
   const Operator* op =
javascript()->StoreNamed(language_mode(), MakeUnique(name), feedback);
+  if (FLAG_vector_stores) {
+    Node* node = NewNode(op, object, value, GetFeedbackVector());
+    return Record(js_type_feedback_, node, feedback.slot());
+  }
+
   return Record(js_type_feedback_, NewNode(op, object, value), id);
 }

Index: src/compiler/js-generic-lowering.cc
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc index 9132a3987b506dfb231b812eba862f060f1fc056..48219ca069871cd84d7e1e1632c776d0f73aa208 100644
--- a/src/compiler/js-generic-lowering.cc
+++ b/src/compiler/js-generic-lowering.cc
@@ -334,9 +334,14 @@ void JSGenericLowering::LowerJSLoadNamed(Node* node) {

 void JSGenericLowering::LowerJSStoreProperty(Node* node) {
   CallDescriptor::Flags flags = AdjustFrameStatesForCall(node);
+  const StorePropertyParameters& p = StorePropertyParametersOf(node->op());
   LanguageMode language_mode = OpParameter<LanguageMode>(node);
   Callable callable = CodeFactory::KeyedStoreICInOptimizedCode(
       isolate(), language_mode, UNINITIALIZED);
+  if (FLAG_vector_stores) {
+    DCHECK(p.feedback().index() != -1);
+ node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index()));
+  }
   ReplaceWithStubCall(node, callable,
                       CallDescriptor::kPatchableCallSite | flags);
 }
@@ -347,6 +352,10 @@ void JSGenericLowering::LowerJSStoreNamed(Node* node) {
   const StoreNamedParameters& p = StoreNamedParametersOf(node->op());
   Callable callable = CodeFactory::StoreIC(isolate(), p.language_mode());
   node->InsertInput(zone(), 1, jsgraph()->HeapConstant(p.name()));
+  if (FLAG_vector_stores) {
+    DCHECK(p.feedback().index() != -1);
+ node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index()));
+  }
   ReplaceWithStubCall(node, callable,
                       CallDescriptor::kPatchableCallSite | flags);
 }
Index: src/compiler/js-operator.cc
diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc
index f73bd0e71002088c1b6fcd86f431468dd075f0a1..578f34fd116d862bee764b97174eaf965b829b12 100644
--- a/src/compiler/js-operator.cc
+++ b/src/compiler/js-operator.cc
@@ -513,10 +513,11 @@ const Operator* JSOperatorBuilder::StoreNamed(
     LanguageMode language_mode, const Unique<Name>& name,
     const ResolvedFeedbackSlot& feedback) {
   StoreNamedParameters parameters(language_mode, feedback, name);
+  int inputs = FLAG_vector_stores ? 3 : 2;
   return new (zone()) Operator1<StoreNamedParameters>(   // --
       IrOpcode::kJSStoreNamed, Operator::kNoProperties,  // opcode
       "JSStoreNamed",                                    // name
-      2, 1, 1, 0, 1, 2,                                  // counts
+      inputs, 1, 1, 0, 1, 2,                             // counts
       parameters);                                       // parameter
 }

@@ -524,10 +525,11 @@ const Operator* JSOperatorBuilder::StoreNamed(
 const Operator* JSOperatorBuilder::StoreProperty(
     LanguageMode language_mode, const ResolvedFeedbackSlot& feedback) {
   StorePropertyParameters parameters(language_mode, feedback);
+  int inputs = FLAG_vector_stores ? 4 : 3;
   return new (zone()) Operator1<StorePropertyParameters>(   // --
       IrOpcode::kJSStoreProperty, Operator::kNoProperties,  // opcode
       "JSStoreProperty",                                    // name
-      3, 1, 1, 0, 1, 2,                                     // counts
+      inputs, 1, 1, 0, 1, 2,                                // counts
       parameters);                                          // parameter
 }

Index: test/unittests/compiler/js-typed-lowering-unittest.cc
diff --git a/test/unittests/compiler/js-typed-lowering-unittest.cc b/test/unittests/compiler/js-typed-lowering-unittest.cc index 9ff652c03626fa26042bd0c930e1b40501809be1..0289e37960909b2c548e8db2af56774c4b668aca 100644
--- a/test/unittests/compiler/js-typed-lowering-unittest.cc
+++ b/test/unittests/compiler/js-typed-lowering-unittest.cc
@@ -736,13 +736,15 @@ TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArray) {
       Node* base = HeapConstant(array);
       Node* value =
           Parameter(AccessBuilder::ForTypedArrayElement(type, true).type);
+      Node* vector = UndefinedConstant();
       Node* context = UndefinedConstant();
       Node* effect = graph()->start();
       Node* control = graph()->start();
       ResolvedFeedbackSlot slot;
-      Node* node =
- graph()->NewNode(javascript()->StoreProperty(language_mode, slot),
-                           base, key, value, context);
+ const Operator* op = javascript()->StoreProperty(language_mode, slot);
+      Node* node = FLAG_vector_stores
+ ? graph()->NewNode(op, base, key, value, vector, context)
+                       : graph()->NewNode(op, base, key, value, context);
       for (int i = 0;
i < OperatorProperties::GetFrameStateInputCount(node->op()); i++) {
         node->AppendInput(zone(), EmptyFrameState());
@@ -784,13 +786,15 @@ TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArrayWithConversion) { Type::Range(kMinInt / element_size, kMaxInt / element_size, zone()));
       Node* base = HeapConstant(array);
       Node* value = Parameter(Type::Any());
+      Node* vector = UndefinedConstant();
       Node* context = UndefinedConstant();
       Node* effect = graph()->start();
       Node* control = graph()->start();
       ResolvedFeedbackSlot slot;
-      Node* node =
- graph()->NewNode(javascript()->StoreProperty(language_mode, slot),
-                           base, key, value, context);
+ const Operator* op = javascript()->StoreProperty(language_mode, slot);
+      Node* node = FLAG_vector_stores
+ ? graph()->NewNode(op, base, key, value, vector, context)
+                       : graph()->NewNode(op, base, key, value, context);
       for (int i = 0;
i < OperatorProperties::GetFrameStateInputCount(node->op()); i++) {
         node->AppendInput(zone(), EmptyFrameState());
@@ -845,13 +849,15 @@ TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArrayWithSafeKey) {
       Node* key = Parameter(Type::Range(min, max, zone()));
       Node* base = HeapConstant(array);
       Node* value = Parameter(access.type);
+      Node* vector = UndefinedConstant();
       Node* context = UndefinedConstant();
       Node* effect = graph()->start();
       Node* control = graph()->start();
       ResolvedFeedbackSlot slot;
-      Node* node =
- graph()->NewNode(javascript()->StoreProperty(language_mode, slot),
-                           base, key, value, context);
+ const Operator* op = javascript()->StoreProperty(language_mode, slot);
+      Node* node = FLAG_vector_stores
+ ? graph()->NewNode(op, base, key, value, vector, context)
+                       : graph()->NewNode(op, base, key, value, context);
       for (int i = 0;
i < OperatorProperties::GetFrameStateInputCount(node->op()); i++) {
         node->AppendInput(zone(), EmptyFrameState());


--
--
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