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

Side by Side Diff: src/type-feedback-vector.h

Issue 1014793003: Feedback vector: ASAN found memory leaks during AST Numbering pass. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Minor fixes. Created 5 years, 9 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
« no previous file with comments | « src/heap/heap.cc ('k') | src/type-feedback-vector.cc » ('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 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_ 5 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_
6 #define V8_TYPE_FEEDBACK_VECTOR_H_ 6 #define V8_TYPE_FEEDBACK_VECTOR_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "src/checks.h" 10 #include "src/checks.h"
11 #include "src/elements-kind.h" 11 #include "src/elements-kind.h"
12 #include "src/heap/heap.h" 12 #include "src/heap/heap.h"
13 #include "src/isolate.h" 13 #include "src/isolate.h"
14 #include "src/objects.h" 14 #include "src/objects.h"
15 #include "src/zone-containers.h"
15 16
16 namespace v8 { 17 namespace v8 {
17 namespace internal { 18 namespace internal {
18 19
19 class FeedbackVectorSpec { 20 class FeedbackVectorSpec {
20 public: 21 public:
21 FeedbackVectorSpec() : slots_(0), ic_slots_(0) {} 22 FeedbackVectorSpec() : slots_(0), has_ic_slot_(false) {}
22 FeedbackVectorSpec(int slots, int ic_slots) 23 explicit FeedbackVectorSpec(int slots) : slots_(slots), has_ic_slot_(false) {}
23 : slots_(slots), ic_slots_(ic_slots) { 24 FeedbackVectorSpec(int slots, Code::Kind ic_slot_kind)
24 if (FLAG_vector_ics) ic_slot_kinds_.resize(ic_slots); 25 : slots_(slots), has_ic_slot_(true), ic_kind_(ic_slot_kind) {}
26
27 int slots() const { return slots_; }
28
29 int ic_slots() const { return has_ic_slot_ ? 1 : 0; }
30
31 Code::Kind GetKind(int ic_slot) const {
32 DCHECK(FLAG_vector_ics && has_ic_slot_ && ic_slot == 0);
33 return ic_kind_;
25 } 34 }
26 35
36 private:
37 int slots_;
38 bool has_ic_slot_;
39 Code::Kind ic_kind_;
40 };
41
42
43 class ZoneFeedbackVectorSpec {
44 public:
45 explicit ZoneFeedbackVectorSpec(Zone* zone)
46 : slots_(0), ic_slots_(0), ic_slot_kinds_(zone) {}
47
48 ZoneFeedbackVectorSpec(Zone* zone, int slots, int ic_slots)
49 : slots_(slots),
50 ic_slots_(ic_slots),
51 ic_slot_kinds_(FLAG_vector_ics ? ic_slots : 0, zone) {}
52
27 int slots() const { return slots_; } 53 int slots() const { return slots_; }
28 void increase_slots(int count) { slots_ += count; } 54 void increase_slots(int count) { slots_ += count; }
29 55
30 int ic_slots() const { return ic_slots_; } 56 int ic_slots() const { return ic_slots_; }
31 void increase_ic_slots(int count) { 57 void increase_ic_slots(int count) {
32 ic_slots_ += count; 58 ic_slots_ += count;
33 if (FLAG_vector_ics) ic_slot_kinds_.resize(ic_slots_); 59 if (FLAG_vector_ics) ic_slot_kinds_.resize(ic_slots_);
34 } 60 }
35 61
36 void SetKind(int ic_slot, Code::Kind kind) { 62 void SetKind(int ic_slot, Code::Kind kind) {
37 DCHECK(FLAG_vector_ics); 63 DCHECK(FLAG_vector_ics);
38 ic_slot_kinds_[ic_slot] = kind; 64 ic_slot_kinds_[ic_slot] = kind;
39 } 65 }
40 66
41 Code::Kind GetKind(int ic_slot) const { 67 Code::Kind GetKind(int ic_slot) const {
42 DCHECK(FLAG_vector_ics); 68 DCHECK(FLAG_vector_ics);
43 return static_cast<Code::Kind>(ic_slot_kinds_.at(ic_slot)); 69 return static_cast<Code::Kind>(ic_slot_kinds_.at(ic_slot));
44 } 70 }
45 71
46 private: 72 private:
47 int slots_; 73 int slots_;
48 int ic_slots_; 74 int ic_slots_;
49 std::vector<unsigned char> ic_slot_kinds_; 75 ZoneVector<unsigned char> ic_slot_kinds_;
50 }; 76 };
51 77
52 78
53 // The shape of the TypeFeedbackVector is an array with: 79 // The shape of the TypeFeedbackVector is an array with:
54 // 0: first_ic_slot_index (== length() if no ic slots are present) 80 // 0: first_ic_slot_index (== length() if no ic slots are present)
55 // 1: ics_with_types 81 // 1: ics_with_types
56 // 2: ics_with_generic_info 82 // 2: ics_with_generic_info
57 // 3: type information for ic slots, if any 83 // 3: type information for ic slots, if any
58 // ... 84 // ...
59 // N: first feedback slot (N >= 3) 85 // N: first feedback slot (N >= 3)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 180
155 Object* Get(FeedbackVectorICSlot slot) const { return get(GetIndex(slot)); } 181 Object* Get(FeedbackVectorICSlot slot) const { return get(GetIndex(slot)); }
156 void Set(FeedbackVectorICSlot slot, Object* value, 182 void Set(FeedbackVectorICSlot slot, Object* value,
157 WriteBarrierMode mode = UPDATE_WRITE_BARRIER) { 183 WriteBarrierMode mode = UPDATE_WRITE_BARRIER) {
158 set(GetIndex(slot), value, mode); 184 set(GetIndex(slot), value, mode);
159 } 185 }
160 186
161 // IC slots need metadata to recognize the type of IC. 187 // IC slots need metadata to recognize the type of IC.
162 Code::Kind GetKind(FeedbackVectorICSlot slot) const; 188 Code::Kind GetKind(FeedbackVectorICSlot slot) const;
163 189
190 template <typename Spec>
164 static Handle<TypeFeedbackVector> Allocate(Isolate* isolate, 191 static Handle<TypeFeedbackVector> Allocate(Isolate* isolate,
165 const FeedbackVectorSpec& spec); 192 const Spec* spec);
166 193
167 static Handle<TypeFeedbackVector> Copy(Isolate* isolate, 194 static Handle<TypeFeedbackVector> Copy(Isolate* isolate,
168 Handle<TypeFeedbackVector> vector); 195 Handle<TypeFeedbackVector> vector);
169 196
170 // Clears the vector slots and the vector ic slots. 197 // Clears the vector slots and the vector ic slots.
171 void ClearSlots(SharedFunctionInfo* shared); 198 void ClearSlots(SharedFunctionInfo* shared);
172 void ClearICSlots(SharedFunctionInfo* shared) { 199 void ClearICSlots(SharedFunctionInfo* shared) {
173 ClearICSlotsImpl(shared, true); 200 ClearICSlotsImpl(shared, true);
174 } 201 }
175 void ClearICSlotsAtGCTime(SharedFunctionInfo* shared) { 202 void ClearICSlotsAtGCTime(SharedFunctionInfo* shared) {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, 396 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps,
370 CodeHandleList* handlers); 397 CodeHandleList* handlers);
371 398
372 InlineCacheState StateFromFeedback() const OVERRIDE; 399 InlineCacheState StateFromFeedback() const OVERRIDE;
373 Name* FindFirstName() const OVERRIDE; 400 Name* FindFirstName() const OVERRIDE;
374 }; 401 };
375 } 402 }
376 } // namespace v8::internal 403 } // namespace v8::internal
377 404
378 #endif // V8_TRANSITIONS_H_ 405 #endif // V8_TRANSITIONS_H_
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/type-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698