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

Side by Side Diff: src/compiler/register-allocator.cc

Issue 795043003: [turbofan] commit allocated registers early (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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/compiler/register-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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/linkage.h" 5 #include "src/compiler/linkage.h"
6 #include "src/compiler/register-allocator.h" 6 #include "src/compiler/register-allocator.h"
7 #include "src/string-stream.h" 7 #include "src/string-stream.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 next_(nullptr), 128 next_(nullptr),
129 current_interval_(nullptr), 129 current_interval_(nullptr),
130 last_processed_use_(nullptr), 130 last_processed_use_(nullptr),
131 current_hint_operand_(nullptr), 131 current_hint_operand_(nullptr),
132 spill_start_index_(kMaxInt), 132 spill_start_index_(kMaxInt),
133 spill_type_(SpillType::kNoSpillType), 133 spill_type_(SpillType::kNoSpillType),
134 spill_operand_(nullptr), 134 spill_operand_(nullptr),
135 spills_at_definition_(nullptr) {} 135 spills_at_definition_(nullptr) {}
136 136
137 137
138 void LiveRange::set_assigned_register(int reg) { 138 void LiveRange::set_assigned_register(int reg, Zone* zone) {
139 DCHECK(!HasRegisterAssigned() && !IsSpilled()); 139 DCHECK(!HasRegisterAssigned() && !IsSpilled());
140 assigned_register_ = reg; 140 assigned_register_ = reg;
141 // TODO(dcarney): stop aliasing hint operands.
142 ConvertUsesToOperand(CreateAssignedOperand(zone));
Benedikt Meurer 2014/12/11 11:45:32 Urghs...
141 } 143 }
142 144
143 145
144 void LiveRange::MakeSpilled() { 146 void LiveRange::MakeSpilled() {
145 DCHECK(!IsSpilled()); 147 DCHECK(!IsSpilled());
146 DCHECK(!TopLevel()->HasNoSpillType()); 148 DCHECK(!TopLevel()->HasNoSpillType());
147 spilled_ = true; 149 spilled_ = true;
148 assigned_register_ = kInvalidAssignment; 150 assigned_register_ = kInvalidAssignment;
149 } 151 }
150 152
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 : InstructionOperand::STACK_SLOT; 936 : InstructionOperand::STACK_SLOT;
935 auto op = new (code_zone()) InstructionOperand(op_kind, index); 937 auto op = new (code_zone()) InstructionOperand(op_kind, index);
936 range->SetOperand(op); 938 range->SetOperand(op);
937 } 939 }
938 } 940 }
939 941
940 942
941 void RegisterAllocator::CommitAssignment() { 943 void RegisterAllocator::CommitAssignment() {
942 for (auto range : live_ranges()) { 944 for (auto range : live_ranges()) {
943 if (range == nullptr || range->IsEmpty()) continue; 945 if (range == nullptr || range->IsEmpty()) continue;
946 // Register assignments were committed in set_assigned_register.
947 if (range->HasRegisterAssigned()) continue;
944 auto assigned = range->CreateAssignedOperand(code_zone()); 948 auto assigned = range->CreateAssignedOperand(code_zone());
945 range->ConvertUsesToOperand(assigned); 949 range->ConvertUsesToOperand(assigned);
946 if (range->IsSpilled()) { 950 if (range->IsSpilled()) {
947 range->CommitSpillsAtDefinition(code(), assigned); 951 range->CommitSpillsAtDefinition(code(), assigned);
948 } 952 }
949 } 953 }
950 } 954 }
951 955
952 956
953 SpillRange* RegisterAllocator::AssignSpillRangeToLiveRange(LiveRange* range) { 957 SpillRange* RegisterAllocator::AssignSpillRangeToLiveRange(LiveRange* range) {
(...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after
2540 2544
2541 2545
2542 void RegisterAllocator::SetLiveRangeAssignedRegister(LiveRange* range, 2546 void RegisterAllocator::SetLiveRangeAssignedRegister(LiveRange* range,
2543 int reg) { 2547 int reg) {
2544 if (range->Kind() == DOUBLE_REGISTERS) { 2548 if (range->Kind() == DOUBLE_REGISTERS) {
2545 assigned_double_registers_->Add(reg); 2549 assigned_double_registers_->Add(reg);
2546 } else { 2550 } else {
2547 DCHECK(range->Kind() == GENERAL_REGISTERS); 2551 DCHECK(range->Kind() == GENERAL_REGISTERS);
2548 assigned_registers_->Add(reg); 2552 assigned_registers_->Add(reg);
2549 } 2553 }
2550 range->set_assigned_register(reg); 2554 range->set_assigned_register(reg, code_zone());
2551 } 2555 }
2552 2556
2553 } // namespace compiler 2557 } // namespace compiler
2554 } // namespace internal 2558 } // namespace internal
2555 } // namespace v8 2559 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/register-allocator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698