Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Side by Side Diff: src/ic/ic-compiler.cc

Issue 648703002: Fix type feedback for name-keyed stores (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ic/ic-compiler.h ('k') | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/ic/handler-compiler.h" 7 #include "src/ic/handler-compiler.h"
8 #include "src/ic/ic-inl.h" 8 #include "src/ic/ic-inl.h"
9 #include "src/ic/ic-compiler.h" 9 #include "src/ic/ic-compiler.h"
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 Code::Kind kind, Handle<Name> name, Handle<HeapType> type, 50 Code::Kind kind, Handle<Name> name, Handle<HeapType> type,
51 Handle<Code> handler, ExtraICState extra_ic_state) { 51 Handle<Code> handler, ExtraICState extra_ic_state) {
52 Isolate* isolate = name->GetIsolate(); 52 Isolate* isolate = name->GetIsolate();
53 if (handler.is_identical_to(isolate->builtins()->LoadIC_Normal()) || 53 if (handler.is_identical_to(isolate->builtins()->LoadIC_Normal()) ||
54 handler.is_identical_to(isolate->builtins()->StoreIC_Normal())) { 54 handler.is_identical_to(isolate->builtins()->StoreIC_Normal())) {
55 name = isolate->factory()->normal_ic_symbol(); 55 name = isolate->factory()->normal_ic_symbol();
56 } 56 }
57 57
58 CacheHolderFlag flag; 58 CacheHolderFlag flag;
59 Handle<Map> stub_holder = IC::GetICCacheHolder(*type, isolate, &flag); 59 Handle<Map> stub_holder = IC::GetICCacheHolder(*type, isolate, &flag);
60 if (kind == Code::KEYED_STORE_IC) {
61 // Always set the "property" bit.
62 extra_ic_state =
63 KeyedStoreIC::IcCheckTypeField::update(extra_ic_state, PROPERTY);
64 DCHECK(STANDARD_STORE ==
65 KeyedStoreIC::GetKeyedAccessStoreMode(extra_ic_state));
66 }
60 67
61 Handle<Code> ic; 68 Handle<Code> ic;
62 // There are multiple string maps that all use the same prototype. That 69 // There are multiple string maps that all use the same prototype. That
63 // prototype cannot hold multiple handlers, one for each of the string maps, 70 // prototype cannot hold multiple handlers, one for each of the string maps,
64 // for a single name. Hence, turn off caching of the IC. 71 // for a single name. Hence, turn off caching of the IC.
65 bool can_be_cached = !type->Is(HeapType::String()); 72 bool can_be_cached = !type->Is(HeapType::String());
66 if (can_be_cached) { 73 if (can_be_cached) {
67 ic = Find(name, stub_holder, kind, extra_ic_state, flag); 74 ic = Find(name, stub_holder, kind, extra_ic_state, flag);
68 if (!ic.is_null()) return ic; 75 if (!ic.is_null()) return ic;
69 } 76 }
70 77
71 #ifdef DEBUG
72 if (kind == Code::KEYED_STORE_IC) {
73 DCHECK(STANDARD_STORE ==
74 KeyedStoreIC::GetKeyedAccessStoreMode(extra_ic_state));
75 }
76 #endif
77
78 PropertyICCompiler ic_compiler(isolate, kind, extra_ic_state, flag); 78 PropertyICCompiler ic_compiler(isolate, kind, extra_ic_state, flag);
79 ic = ic_compiler.CompileMonomorphic(type, handler, name, PROPERTY); 79 ic = ic_compiler.CompileMonomorphic(type, handler, name, PROPERTY);
80 80
81 if (can_be_cached) Map::UpdateCodeCache(stub_holder, name, ic); 81 if (can_be_cached) Map::UpdateCodeCache(stub_holder, name, ic);
82 return ic; 82 return ic;
83 } 83 }
84 84
85 85
86 Handle<Code> PropertyICCompiler::ComputeKeyedLoadMonomorphic( 86 Handle<Code> PropertyICCompiler::ComputeKeyedLoadMonomorphic(
87 Handle<Map> receiver_map) { 87 Handle<Map> receiver_map) {
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 438
439 TailCallBuiltin(masm(), Builtins::kKeyedStoreIC_Miss); 439 TailCallBuiltin(masm(), Builtins::kKeyedStoreIC_Miss);
440 440
441 return GetCode(kind(), Code::NORMAL, factory()->empty_string()); 441 return GetCode(kind(), Code::NORMAL, factory()->empty_string());
442 } 442 }
443 443
444 444
445 #undef __ 445 #undef __
446 } 446 }
447 } // namespace v8::internal 447 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic/ic-compiler.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698