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

Side by Side Diff: src/hydrogen-gvn.cc

Issue 1016803002: Remove PropertyCell space (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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/hydrogen-gvn.h ('k') | src/hydrogen-instructions.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 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/hydrogen.h" 5 #include "src/hydrogen.h"
6 #include "src/hydrogen-gvn.h" 6 #include "src/hydrogen-gvn.h"
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 data_[i] = instr; 339 data_[i] = instr;
340 } 340 }
341 } 341 }
342 } 342 }
343 343
344 344
345 SideEffects SideEffectsTracker::ComputeChanges(HInstruction* instr) { 345 SideEffects SideEffectsTracker::ComputeChanges(HInstruction* instr) {
346 int index; 346 int index;
347 SideEffects result(instr->ChangesFlags()); 347 SideEffects result(instr->ChangesFlags());
348 if (result.ContainsFlag(kGlobalVars)) { 348 if (result.ContainsFlag(kGlobalVars)) {
349 if (instr->IsStoreGlobalCell() && 349 if (instr->IsStoreNamedField()) {
350 ComputeGlobalVar(HStoreGlobalCell::cast(instr)->cell(), &index)) { 350 HStoreNamedField* store = HStoreNamedField::cast(instr);
351 result.RemoveFlag(kGlobalVars); 351 HConstant* target = HConstant::cast(store->object());
352 result.AddSpecial(GlobalVar(index)); 352 if (ComputeGlobalVar(Unique<PropertyCell>::cast(target->GetUnique()),
353 } else { 353 &index)) {
354 for (index = 0; index < kNumberOfGlobalVars; ++index) { 354 result.RemoveFlag(kGlobalVars);
355 result.AddSpecial(GlobalVar(index)); 355 result.AddSpecial(GlobalVar(index));
356 return result;
356 } 357 }
357 } 358 }
358 } 359 for (index = 0; index < kNumberOfGlobalVars; ++index) {
359 if (result.ContainsFlag(kInobjectFields)) { 360 result.AddSpecial(GlobalVar(index));
361 }
362 } else if (result.ContainsFlag(kInobjectFields)) {
360 if (instr->IsStoreNamedField() && 363 if (instr->IsStoreNamedField() &&
361 ComputeInobjectField(HStoreNamedField::cast(instr)->access(), &index)) { 364 ComputeInobjectField(HStoreNamedField::cast(instr)->access(), &index)) {
362 result.RemoveFlag(kInobjectFields); 365 result.RemoveFlag(kInobjectFields);
363 result.AddSpecial(InobjectField(index)); 366 result.AddSpecial(InobjectField(index));
364 } else { 367 } else {
365 for (index = 0; index < kNumberOfInobjectFields; ++index) { 368 for (index = 0; index < kNumberOfInobjectFields; ++index) {
366 result.AddSpecial(InobjectField(index)); 369 result.AddSpecial(InobjectField(index));
367 } 370 }
368 } 371 }
369 } 372 }
370 return result; 373 return result;
371 } 374 }
372 375
373 376
374 SideEffects SideEffectsTracker::ComputeDependsOn(HInstruction* instr) { 377 SideEffects SideEffectsTracker::ComputeDependsOn(HInstruction* instr) {
375 int index; 378 int index;
376 SideEffects result(instr->DependsOnFlags()); 379 SideEffects result(instr->DependsOnFlags());
377 if (result.ContainsFlag(kGlobalVars)) { 380 if (result.ContainsFlag(kGlobalVars)) {
378 if (instr->IsLoadGlobalCell() && 381 if (instr->IsLoadNamedField()) {
379 ComputeGlobalVar(HLoadGlobalCell::cast(instr)->cell(), &index)) { 382 HLoadNamedField* load = HLoadNamedField::cast(instr);
380 result.RemoveFlag(kGlobalVars); 383 HConstant* target = HConstant::cast(load->object());
381 result.AddSpecial(GlobalVar(index)); 384 if (ComputeGlobalVar(Unique<PropertyCell>::cast(target->GetUnique()),
382 } else { 385 &index)) {
383 for (index = 0; index < kNumberOfGlobalVars; ++index) { 386 result.RemoveFlag(kGlobalVars);
384 result.AddSpecial(GlobalVar(index)); 387 result.AddSpecial(GlobalVar(index));
388 return result;
385 } 389 }
386 } 390 }
387 } 391 for (index = 0; index < kNumberOfGlobalVars; ++index) {
388 if (result.ContainsFlag(kInobjectFields)) { 392 result.AddSpecial(GlobalVar(index));
393 }
394 } else if (result.ContainsFlag(kInobjectFields)) {
389 if (instr->IsLoadNamedField() && 395 if (instr->IsLoadNamedField() &&
390 ComputeInobjectField(HLoadNamedField::cast(instr)->access(), &index)) { 396 ComputeInobjectField(HLoadNamedField::cast(instr)->access(), &index)) {
391 result.RemoveFlag(kInobjectFields); 397 result.RemoveFlag(kInobjectFields);
392 result.AddSpecial(InobjectField(index)); 398 result.AddSpecial(InobjectField(index));
393 } else { 399 } else {
394 for (index = 0; index < kNumberOfInobjectFields; ++index) { 400 for (index = 0; index < kNumberOfInobjectFields; ++index) {
395 result.AddSpecial(InobjectField(index)); 401 result.AddSpecial(InobjectField(index));
396 } 402 }
397 } 403 }
398 } 404 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 if (te.effects.ContainsSpecial(t->InobjectField(index))) { 438 if (te.effects.ContainsSpecial(t->InobjectField(index))) {
433 os << separator << t->inobject_fields_[index]; 439 os << separator << t->inobject_fields_[index];
434 separator = ", "; 440 separator = ", ";
435 } 441 }
436 } 442 }
437 os << "]"; 443 os << "]";
438 return os; 444 return os;
439 } 445 }
440 446
441 447
442 bool SideEffectsTracker::ComputeGlobalVar(Unique<Cell> cell, int* index) { 448 bool SideEffectsTracker::ComputeGlobalVar(Unique<PropertyCell> cell,
449 int* index) {
443 for (int i = 0; i < num_global_vars_; ++i) { 450 for (int i = 0; i < num_global_vars_; ++i) {
444 if (cell == global_vars_[i]) { 451 if (cell == global_vars_[i]) {
445 *index = i; 452 *index = i;
446 return true; 453 return true;
447 } 454 }
448 } 455 }
449 if (num_global_vars_ < kNumberOfGlobalVars) { 456 if (num_global_vars_ < kNumberOfGlobalVars) {
450 if (FLAG_trace_gvn) { 457 if (FLAG_trace_gvn) {
451 OFStream os(stdout); 458 OFStream os(stdout);
452 os << "Tracking global var [" << *cell.handle() << "] " 459 os << "Tracking global var [" << *cell.handle() << "] "
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 dominated); 888 dominated);
882 successor_map->Kill(side_effects_on_all_paths); 889 successor_map->Kill(side_effects_on_all_paths);
883 successor_dominators->Kill(side_effects_on_all_paths); 890 successor_dominators->Kill(side_effects_on_all_paths);
884 } 891 }
885 } 892 }
886 current = next; 893 current = next;
887 } 894 }
888 } 895 }
889 896
890 } } // namespace v8::internal 897 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen-gvn.h ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698