Reviewers: Michael Starzinger,
Message:
Hi Michael, here it is for Crankshaft
Description:
VectorICs: support converting keyed loads into named loads in crankshaft.
This was a TODO for a while in crankshaft, now ready to address.
BUG=
[email protected]
Please review this at https://codereview.chromium.org/1093413002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+18, -6 lines):
M src/hydrogen.cc
Index: src/hydrogen.cc
diff --git a/src/hydrogen.cc b/src/hydrogen.cc
index
7b91d9846188f52732ef538ef0c57175c421d7f8..ef9901593d5085ac0dc82f8928836126b1cb9eb0
100644
--- a/src/hydrogen.cc
+++ b/src/hydrogen.cc
@@ -6968,15 +6968,29 @@ HInstruction*
HOptimizedGraphBuilder::BuildNamedGeneric(
Deoptimizer::SOFT);
}
if (access_type == LOAD) {
- HLoadNamedGeneric* result =
- New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC);
if (FLAG_vector_ics) {
Handle<TypeFeedbackVector> vector =
handle(current_feedback_vector(), isolate());
FeedbackVectorICSlot slot =
expr->AsProperty()->PropertyFeedbackSlot();
+
+ if (!expr->AsProperty()->key()->IsPropertyName()) {
+ // It's possible that a keyed load of a constant string was
converted
+ // to a named load. Here, at the last minute, we need to make sure
to
+ // use a generic Keyed Load if we are using the type vector,
because
+ // it has to share information with full code.
+ HConstant* key = Add<HConstant>(name);
+ HLoadKeyedGeneric* result =
+ New<HLoadKeyedGeneric>(object, key, PREMONOMORPHIC);
+ result->SetVectorAndSlot(vector, slot);
+ return result;
+ }
+
+ HLoadNamedGeneric* result =
+ New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC);
result->SetVectorAndSlot(vector, slot);
+ return result;
}
- return result;
+ return New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC);
} else {
return New<HStoreNamedGeneric>(object, name, value,
function_language_mode(),
PREMONOMORPHIC);
@@ -7279,9 +7293,7 @@ HValue*
HOptimizedGraphBuilder::HandleKeyedElementAccess(
HValue* obj, HValue* key, HValue* val, Expression* expr, BailoutId
ast_id,
BailoutId return_id, PropertyAccessType access_type,
bool* has_side_effects) {
- // TODO(mvstanton): This optimization causes trouble for vector-based
- // KeyedLoadICs, turn it off for now.
- if (!FLAG_vector_ics && key->ActualValue()->IsConstant()) {
+ if (key->ActualValue()->IsConstant()) {
Handle<Object> constant =
HConstant::cast(key->ActualValue())->handle(isolate());
uint32_t array_index;
--
--
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.