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

Side by Side Diff: src/feedback-slots.h

Issue 254623002: Simplify feedback vector creation and store in SharedFunctionInfo. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Code comments Created 6 years, 7 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/factory.cc ('k') | src/full-codegen.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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 17 matching lines...) Expand all
28 #ifndef V8_FEEDBACK_SLOTS_H_ 28 #ifndef V8_FEEDBACK_SLOTS_H_
29 #define V8_FEEDBACK_SLOTS_H_ 29 #define V8_FEEDBACK_SLOTS_H_
30 30
31 #include "v8.h" 31 #include "v8.h"
32 32
33 #include "isolate.h" 33 #include "isolate.h"
34 34
35 namespace v8 { 35 namespace v8 {
36 namespace internal { 36 namespace internal {
37 37
38 enum ComputablePhase {
39 DURING_PARSE,
40 AFTER_SCOPING
41 };
42
43
44 class FeedbackSlotInterface { 38 class FeedbackSlotInterface {
45 public: 39 public:
46 static const int kInvalidFeedbackSlot = -1; 40 static const int kInvalidFeedbackSlot = -1;
47 41
48 virtual ~FeedbackSlotInterface() {} 42 virtual ~FeedbackSlotInterface() {}
49 43
50 // When can we ask how many feedback slots are necessary? 44 virtual int ComputeFeedbackSlotCount() = 0;
51 virtual ComputablePhase GetComputablePhase() = 0;
52 virtual int ComputeFeedbackSlotCount(Isolate* isolate) = 0;
53 virtual void SetFirstFeedbackSlot(int slot) = 0; 45 virtual void SetFirstFeedbackSlot(int slot) = 0;
54 }; 46 };
55 47
56
57 class DeferredFeedbackSlotProcessor {
58 public:
59 DeferredFeedbackSlotProcessor()
60 : slot_nodes_(NULL),
61 slot_count_(0) { }
62
63 void add_slot_node(Zone* zone, FeedbackSlotInterface* slot) {
64 if (slot->GetComputablePhase() == DURING_PARSE) {
65 // No need to add to the list
66 int count = slot->ComputeFeedbackSlotCount(zone->isolate());
67 slot->SetFirstFeedbackSlot(slot_count_);
68 slot_count_ += count;
69 } else {
70 if (slot_nodes_ == NULL) {
71 slot_nodes_ = new(zone) ZoneList<FeedbackSlotInterface*>(10, zone);
72 }
73 slot_nodes_->Add(slot, zone);
74 }
75 }
76
77 void ProcessFeedbackSlots(Isolate* isolate) {
78 // Scope analysis must have been done.
79 if (slot_nodes_ == NULL) {
80 return;
81 }
82
83 int current_slot = slot_count_;
84 for (int i = 0; i < slot_nodes_->length(); i++) {
85 FeedbackSlotInterface* slot_interface = slot_nodes_->at(i);
86 int count = slot_interface->ComputeFeedbackSlotCount(isolate);
87 if (count > 0) {
88 slot_interface->SetFirstFeedbackSlot(current_slot);
89 current_slot += count;
90 }
91 }
92
93 slot_count_ = current_slot;
94 slot_nodes_->Clear();
95 }
96
97 int slot_count() {
98 ASSERT(slot_count_ >= 0);
99 return slot_count_;
100 }
101
102 private:
103 ZoneList<FeedbackSlotInterface*>* slot_nodes_;
104 int slot_count_;
105 };
106
107
108 } } // namespace v8::internal 48 } } // namespace v8::internal
109 49
110 #endif // V8_FEEDBACK_SLOTS_H_ 50 #endif // V8_FEEDBACK_SLOTS_H_
OLDNEW
« no previous file with comments | « src/factory.cc ('k') | src/full-codegen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698