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

Side by Side Diff: src/crankshaft/hydrogen-load-elimination.cc

Issue 1694643004: [crankshaft] TODO bankruptcy. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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/crankshaft/hydrogen-instructions.cc ('k') | src/crankshaft/hydrogen-store-elimination.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen-load-elimination.h" 5 #include "src/crankshaft/hydrogen-load-elimination.h"
6 6
7 #include "src/crankshaft/hydrogen-alias-analysis.h" 7 #include "src/crankshaft/hydrogen-alias-analysis.h"
8 #include "src/crankshaft/hydrogen-flow-engine.h" 8 #include "src/crankshaft/hydrogen-flow-engine.h"
9 #include "src/crankshaft/hydrogen-instructions.h" 9 #include "src/crankshaft/hydrogen-instructions.h"
10 10
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 236
237 int field = FieldOf(instr->access()); 237 int field = FieldOf(instr->access());
238 if (field < 0) return KillIfMisaligned(instr); 238 if (field < 0) return KillIfMisaligned(instr);
239 239
240 HValue* object = instr->object()->ActualValue(); 240 HValue* object = instr->object()->ActualValue();
241 HValue* value = instr->value(); 241 HValue* value = instr->value();
242 242
243 if (instr->has_transition()) { 243 if (instr->has_transition()) {
244 // A transition introduces a new field and alters the map of the object. 244 // A transition introduces a new field and alters the map of the object.
245 // Since the field in the object is new, it cannot alias existing entries. 245 // Since the field in the object is new, it cannot alias existing entries.
246 // TODO(titzer): introduce a constant for the new map and remember it.
247 KillFieldInternal(object, FieldOf(JSObject::kMapOffset), NULL); 246 KillFieldInternal(object, FieldOf(JSObject::kMapOffset), NULL);
248 } else { 247 } else {
249 // Kill non-equivalent may-alias entries. 248 // Kill non-equivalent may-alias entries.
250 KillFieldInternal(object, field, value); 249 KillFieldInternal(object, field, value);
251 } 250 }
252 HFieldApproximation* approx = FindOrCreate(object, field); 251 HFieldApproximation* approx = FindOrCreate(object, field);
253 252
254 if (Equal(approx->last_value_, value)) { 253 if (Equal(approx->last_value_, value)) {
255 // The store is redundant because the field already has this value. 254 // The store is redundant because the field already has this value.
256 return NULL; 255 return NULL;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 } 394 }
396 395
397 // Compute the field index for the given object access; -1 if not tracked. 396 // Compute the field index for the given object access; -1 if not tracked.
398 int FieldOf(HObjectAccess access) { 397 int FieldOf(HObjectAccess access) {
399 return access.IsInobject() ? FieldOf(access.offset()) : -1; 398 return access.IsInobject() ? FieldOf(access.offset()) : -1;
400 } 399 }
401 400
402 // Compute the field index for the given in-object offset; -1 if not tracked. 401 // Compute the field index for the given in-object offset; -1 if not tracked.
403 int FieldOf(int offset) { 402 int FieldOf(int offset) {
404 if (offset >= kMaxTrackedFields * kPointerSize) return -1; 403 if (offset >= kMaxTrackedFields * kPointerSize) return -1;
405 // TODO(titzer): track misaligned loads in a separate list?
406 if ((offset % kPointerSize) != 0) return -1; // Ignore misaligned accesses. 404 if ((offset % kPointerSize) != 0) return -1; // Ignore misaligned accesses.
407 return offset / kPointerSize; 405 return offset / kPointerSize;
408 } 406 }
409 407
410 // Ensure internal storage for the given number of fields. 408 // Ensure internal storage for the given number of fields.
411 void EnsureFields(int num_fields) { 409 void EnsureFields(int num_fields) {
412 if (fields_.length() < num_fields) { 410 if (fields_.length() < num_fields) {
413 fields_.AddBlock(NULL, num_fields - fields_.length(), zone_); 411 fields_.AddBlock(NULL, num_fields - fields_.length(), zone_);
414 } 412 }
415 } 413 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 // Perform only local analysis. 502 // Perform only local analysis.
505 for (int i = 0; i < graph()->blocks()->length(); i++) { 503 for (int i = 0; i < graph()->blocks()->length(); i++) {
506 table->Kill(); 504 table->Kill();
507 engine.AnalyzeOneBlock(graph()->blocks()->at(i), table); 505 engine.AnalyzeOneBlock(graph()->blocks()->at(i), table);
508 } 506 }
509 } 507 }
510 } 508 }
511 509
512 } // namespace internal 510 } // namespace internal
513 } // namespace v8 511 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen-instructions.cc ('k') | src/crankshaft/hydrogen-store-elimination.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698