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

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

Issue 6660023: Initialize zone lists in the register allocator with more reasonable initial ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 9 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 | Annotate | Revision Log
« src/lithium-allocator.h ('K') | « 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 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 if (a == NULL || a->start().Value() > other->End().Value()) break; 518 if (a == NULL || a->start().Value() > other->End().Value()) break;
519 AdvanceLastProcessedMarker(a, advance_last_processed_up_to); 519 AdvanceLastProcessedMarker(a, advance_last_processed_up_to);
520 } else { 520 } else {
521 b = b->next(); 521 b = b->next();
522 } 522 }
523 } 523 }
524 return LifetimePosition::Invalid(); 524 return LifetimePosition::Invalid();
525 } 525 }
526 526
527 527
528 LAllocator::LAllocator(int num_values, HGraph* graph)
529 : chunk_(NULL),
530 live_in_sets_(graph->blocks()->length()),
531 live_ranges_(num_values * 2),
532 fixed_live_ranges_(NULL),
533 fixed_double_live_ranges_(NULL),
534 unhandled_live_ranges_(num_values * 2),
535 active_live_ranges_(8),
536 inactive_live_ranges_(8),
537 reusable_slots_(8),
538 next_virtual_register_(num_values),
539 first_artificial_register_(num_values),
540 mode_(NONE),
541 num_registers_(-1),
542 graph_(graph),
543 has_osr_entry_(false) {}
544
545
528 void LAllocator::InitializeLivenessAnalysis() { 546 void LAllocator::InitializeLivenessAnalysis() {
529 // Initialize the live_in sets for each block to NULL. 547 // Initialize the live_in sets for each block to NULL.
530 int block_count = graph_->blocks()->length(); 548 int block_count = graph_->blocks()->length();
531 live_in_sets_.Initialize(block_count); 549 live_in_sets_.Initialize(block_count);
532 live_in_sets_.AddBlock(NULL, block_count); 550 live_in_sets_.AddBlock(NULL, block_count);
533 } 551 }
534 552
535 553
536 BitVector* LAllocator::ComputeLiveOut(HBasicBlock* block) { 554 BitVector* LAllocator::ComputeLiveOut(HBasicBlock* block) {
537 // Compute live out for the given block, except not including backward 555 // Compute live out for the given block, except not including backward
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 LInstruction* instr = InstructionAt(pos); 629 LInstruction* instr = InstructionAt(pos);
612 if (instr->HasPointerMap()) { 630 if (instr->HasPointerMap()) {
613 instr->pointer_map()->RecordPointer(operand); 631 instr->pointer_map()->RecordPointer(operand);
614 } 632 }
615 } 633 }
616 return operand; 634 return operand;
617 } 635 }
618 636
619 637
620 LiveRange* LAllocator::FixedLiveRangeFor(int index) { 638 LiveRange* LAllocator::FixedLiveRangeFor(int index) {
621 if (index >= fixed_live_ranges_.length()) { 639 ASSERT(index < Register::kNumAllocatableRegisters);
622 fixed_live_ranges_.AddBlock(NULL,
623 index - fixed_live_ranges_.length() + 1);
624 }
625
626 LiveRange* result = fixed_live_ranges_[index]; 640 LiveRange* result = fixed_live_ranges_[index];
627 if (result == NULL) { 641 if (result == NULL) {
628 result = new LiveRange(FixedLiveRangeID(index)); 642 result = new LiveRange(FixedLiveRangeID(index));
629 ASSERT(result->IsFixed()); 643 ASSERT(result->IsFixed());
630 result->set_assigned_register(index, GENERAL_REGISTERS); 644 result->set_assigned_register(index, GENERAL_REGISTERS);
631 fixed_live_ranges_[index] = result; 645 fixed_live_ranges_[index] = result;
632 } 646 }
633 return result; 647 return result;
634 } 648 }
635 649
636 650
637 LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) { 651 LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
638 if (index >= fixed_double_live_ranges_.length()) { 652 ASSERT(index < DoubleRegister::kNumAllocatableRegisters);
639 fixed_double_live_ranges_.AddBlock(NULL,
640 index - fixed_double_live_ranges_.length() + 1);
641 }
642
643 LiveRange* result = fixed_double_live_ranges_[index]; 653 LiveRange* result = fixed_double_live_ranges_[index];
644 if (result == NULL) { 654 if (result == NULL) {
645 result = new LiveRange(FixedDoubleLiveRangeID(index)); 655 result = new LiveRange(FixedDoubleLiveRangeID(index));
646 ASSERT(result->IsFixed()); 656 ASSERT(result->IsFixed());
647 result->set_assigned_register(index, DOUBLE_REGISTERS); 657 result->set_assigned_register(index, DOUBLE_REGISTERS);
648 fixed_double_live_ranges_[index] = result; 658 fixed_double_live_ranges_[index] = result;
649 } 659 }
650 return result; 660 return result;
651 } 661 }
652 662
663
653 LiveRange* LAllocator::LiveRangeFor(int index) { 664 LiveRange* LAllocator::LiveRangeFor(int index) {
654 if (index >= live_ranges_.length()) { 665 if (index >= live_ranges_.length()) {
655 live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1); 666 live_ranges_.AddBlock(NULL, index - live_ranges_.length() + 1);
656 } 667 }
657 LiveRange* result = live_ranges_[index]; 668 LiveRange* result = live_ranges_[index];
658 if (result == NULL) { 669 if (result == NULL) {
659 result = new LiveRange(index); 670 result = new LiveRange(index);
660 live_ranges_[index] = result; 671 live_ranges_[index] = result;
661 } 672 }
662 return result; 673 return result;
(...skipping 1423 matching lines...) Expand 10 before | Expand all | Expand 10 after
2086 LiveRange* current = live_ranges()->at(i); 2097 LiveRange* current = live_ranges()->at(i);
2087 if (current != NULL) current->Verify(); 2098 if (current != NULL) current->Verify();
2088 } 2099 }
2089 } 2100 }
2090 2101
2091 2102
2092 #endif 2103 #endif
2093 2104
2094 2105
2095 } } // namespace v8::internal 2106 } } // namespace v8::internal
OLDNEW
« src/lithium-allocator.h ('K') | « src/lithium-allocator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698