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.