Index: src/compiler/js-generic-lowering.cc |
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc |
index 17b1597edbe0f3af9d0bf514849fbee45dac55af..ad783c1cbaa2851c7f9aee63415e2bde8a8ddd01 100644 |
--- a/src/compiler/js-generic-lowering.cc |
+++ b/src/compiler/js-generic-lowering.cc |
@@ -359,11 +359,22 @@ 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); |
+ InlineCacheState state = FLAG_vector_stores && p.feedback().index() == -1 |
Michael Starzinger
2015/07/24 11:51:30
Can we restructure this a little to be more readab
mvstanton
2015/07/24 12:24:58
Most wise, thanks!
|
+ ? MEGAMORPHIC |
+ : UNINITIALIZED; |
+ Callable callable = |
+ CodeFactory::KeyedStoreICInOptimizedCode(isolate(), language_mode, state); |
if (FLAG_vector_stores) { |
- DCHECK(p.feedback().index() != -1); |
- node->InsertInput(zone(), 3, jsgraph()->SmiConstant(p.feedback().index())); |
+ if (state == MEGAMORPHIC) { |
+ // We have a special case where we do keyed stores but don't have a type |
+ // feedback vector slot allocated to support it. In this case, install |
+ // the megamorphic keyed store stub which needs neither vector nor slot. |
+ node->RemoveInput(3); |
+ } else { |
+ DCHECK(p.feedback().index() != -1); |
+ node->InsertInput(zone(), 3, |
+ jsgraph()->SmiConstant(p.feedback().index())); |
+ } |
} else { |
node->RemoveInput(3); |
} |