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

Side by Side Diff: src/lithium-allocator.cc

Issue 6378004: Move LOperand class to lithium.h and move implementations out of .h into .cc ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 11 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/lithium-allocator.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 static inline LifetimePosition Min(LifetimePosition a, LifetimePosition b) { 64 static inline LifetimePosition Min(LifetimePosition a, LifetimePosition b) {
65 return a.Value() < b.Value() ? a : b; 65 return a.Value() < b.Value() ? a : b;
66 } 66 }
67 67
68 68
69 static inline LifetimePosition Max(LifetimePosition a, LifetimePosition b) { 69 static inline LifetimePosition Max(LifetimePosition a, LifetimePosition b) {
70 return a.Value() > b.Value() ? a : b; 70 return a.Value() > b.Value() ? a : b;
71 } 71 }
72 72
73 73
74 void LOperand::PrintTo(StringStream* stream) { 74 UsePosition::UsePosition(LifetimePosition pos, LOperand* operand)
75 LUnallocated* unalloc = NULL; 75 : operand_(operand),
76 switch (kind()) { 76 hint_(NULL),
77 case INVALID: 77 pos_(pos),
78 break; 78 next_(NULL),
79 case UNALLOCATED: 79 requires_reg_(false),
80 unalloc = LUnallocated::cast(this); 80 register_beneficial_(true) {
81 stream->Add("v%d", unalloc->virtual_register()); 81 if (operand_ != NULL && operand_->IsUnallocated()) {
82 switch (unalloc->policy()) { 82 LUnallocated* unalloc = LUnallocated::cast(operand_);
83 case LUnallocated::NONE: 83 requires_reg_ = unalloc->HasRegisterPolicy();
84 break; 84 register_beneficial_ = !unalloc->HasAnyPolicy();
85 case LUnallocated::FIXED_REGISTER: {
86 const char* register_name =
87 Register::AllocationIndexToString(unalloc->fixed_index());
88 stream->Add("(=%s)", register_name);
89 break;
90 }
91 case LUnallocated::FIXED_DOUBLE_REGISTER: {
92 const char* double_register_name =
93 DoubleRegister::AllocationIndexToString(unalloc->fixed_index());
94 stream->Add("(=%s)", double_register_name);
95 break;
96 }
97 case LUnallocated::FIXED_SLOT:
98 stream->Add("(=%dS)", unalloc->fixed_index());
99 break;
100 case LUnallocated::MUST_HAVE_REGISTER:
101 stream->Add("(R)");
102 break;
103 case LUnallocated::WRITABLE_REGISTER:
104 stream->Add("(WR)");
105 break;
106 case LUnallocated::SAME_AS_FIRST_INPUT:
107 stream->Add("(1)");
108 break;
109 case LUnallocated::ANY:
110 stream->Add("(-)");
111 break;
112 case LUnallocated::IGNORE:
113 stream->Add("(0)");
114 break;
115 }
116 break;
117 case CONSTANT_OPERAND:
118 stream->Add("[constant:%d]", index());
119 break;
120 case STACK_SLOT:
121 stream->Add("[stack:%d]", index());
122 break;
123 case DOUBLE_STACK_SLOT:
124 stream->Add("[double_stack:%d]", index());
125 break;
126 case REGISTER:
127 stream->Add("[%s|R]", Register::AllocationIndexToString(index()));
128 break;
129 case DOUBLE_REGISTER:
130 stream->Add("[%s|R]", DoubleRegister::AllocationIndexToString(index()));
131 break;
132 case ARGUMENT:
133 stream->Add("[arg:%d]", index());
134 break;
135 } 85 }
136 } 86 ASSERT(pos_.IsValid());
137
138 int LOperand::VirtualRegister() {
139 LUnallocated* unalloc = LUnallocated::cast(this);
140 return unalloc->virtual_register();
141 } 87 }
142 88
143 89
90 bool UsePosition::HasHint() const {
91 return hint_ != NULL && !hint_->IsUnallocated();
92 }
93
94
144 bool UsePosition::RequiresRegister() const { 95 bool UsePosition::RequiresRegister() const {
145 return requires_reg_; 96 return requires_reg_;
146 } 97 }
147 98
148 99
149 bool UsePosition::RegisterIsBeneficial() const { 100 bool UsePosition::RegisterIsBeneficial() const {
150 return register_beneficial_; 101 return register_beneficial_;
151 } 102 }
152 103
153 104
(...skipping 29 matching lines...) Expand all
183 } 134 }
184 current_interval = current_interval->next(); 135 current_interval = current_interval->next();
185 } 136 }
186 return false; 137 return false;
187 } 138 }
188 139
189 140
190 #endif 141 #endif
191 142
192 143
144 LiveRange::LiveRange(int id)
145 : id_(id),
146 spilled_(false),
147 assigned_register_(kInvalidAssignment),
148 assigned_register_kind_(NONE),
149 last_interval_(NULL),
150 first_interval_(NULL),
151 first_pos_(NULL),
152 parent_(NULL),
153 next_(NULL),
154 current_interval_(NULL),
155 last_processed_use_(NULL),
156 spill_start_index_(kMaxInt) {
157 spill_operand_ = new LUnallocated(LUnallocated::IGNORE);
158 }
159
160
161 void LiveRange::set_assigned_register(int reg, RegisterKind register_kind) {
162 ASSERT(!HasRegisterAssigned() && !IsSpilled());
163 assigned_register_ = reg;
164 assigned_register_kind_ = register_kind;
165 ConvertOperands();
166 }
167
168
169 void LiveRange::MakeSpilled() {
170 ASSERT(!IsSpilled());
171 ASSERT(TopLevel()->HasAllocatedSpillOperand());
172 spilled_ = true;
173 assigned_register_ = kInvalidAssignment;
174 ConvertOperands();
175 }
176
177
178 bool LiveRange::HasAllocatedSpillOperand() const {
179 return spill_operand_ != NULL && !spill_operand_->IsUnallocated();
180 }
181
182
183 void LiveRange::SetSpillOperand(LOperand* operand) {
184 ASSERT(!operand->IsUnallocated());
185 ASSERT(spill_operand_ != NULL);
186 ASSERT(spill_operand_->IsUnallocated());
187 spill_operand_->ConvertTo(operand->kind(), operand->index());
188 }
189
190
193 UsePosition* LiveRange::NextUsePosition(LifetimePosition start) { 191 UsePosition* LiveRange::NextUsePosition(LifetimePosition start) {
194 UsePosition* use_pos = last_processed_use_; 192 UsePosition* use_pos = last_processed_use_;
195 if (use_pos == NULL) use_pos = first_pos(); 193 if (use_pos == NULL) use_pos = first_pos();
196 while (use_pos != NULL && use_pos->pos().Value() < start.Value()) { 194 while (use_pos != NULL && use_pos->pos().Value() < start.Value()) {
197 use_pos = use_pos->next(); 195 use_pos = use_pos->next();
198 } 196 }
199 last_processed_use_ = use_pos; 197 last_processed_use_ = use_pos;
200 return use_pos; 198 return use_pos;
201 } 199 }
202 200
(...skipping 1945 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 LiveRange* current = live_ranges()->at(i); 2146 LiveRange* current = live_ranges()->at(i);
2149 if (current != NULL) current->Verify(); 2147 if (current != NULL) current->Verify();
2150 } 2148 }
2151 } 2149 }
2152 2150
2153 2151
2154 #endif 2152 #endif
2155 2153
2156 2154
2157 } } // namespace v8::internal 2155 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/lithium-allocator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698