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

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

Issue 2471533002: [Turbofan] Make fixed live ranges all double when aliasing is simple. (Closed)
Patch Set: Simpler ZoneVector initialization. Created 4 years, 1 month 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 | « no previous file | 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/base/adapters.h" 5 #include "src/base/adapters.h"
6 #include "src/compiler/linkage.h" 6 #include "src/compiler/linkage.h"
7 #include "src/compiler/register-allocator.h" 7 #include "src/compiler/register-allocator.h"
8 #include "src/string-stream.h" 8 #include "src/string-stream.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 1342 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 code_(code), 1353 code_(code),
1354 debug_name_(debug_name), 1354 debug_name_(debug_name),
1355 config_(config), 1355 config_(config),
1356 phi_map_(allocation_zone()), 1356 phi_map_(allocation_zone()),
1357 live_in_sets_(code->InstructionBlockCount(), nullptr, allocation_zone()), 1357 live_in_sets_(code->InstructionBlockCount(), nullptr, allocation_zone()),
1358 live_out_sets_(code->InstructionBlockCount(), nullptr, allocation_zone()), 1358 live_out_sets_(code->InstructionBlockCount(), nullptr, allocation_zone()),
1359 live_ranges_(code->VirtualRegisterCount() * 2, nullptr, 1359 live_ranges_(code->VirtualRegisterCount() * 2, nullptr,
1360 allocation_zone()), 1360 allocation_zone()),
1361 fixed_live_ranges_(this->config()->num_general_registers(), nullptr, 1361 fixed_live_ranges_(this->config()->num_general_registers(), nullptr,
1362 allocation_zone()), 1362 allocation_zone()),
1363 fixed_float_live_ranges_(this->config()->num_float_registers(), nullptr, 1363 fixed_float_live_ranges_(allocation_zone()),
1364 allocation_zone()),
1365 fixed_double_live_ranges_(this->config()->num_double_registers(), nullptr, 1364 fixed_double_live_ranges_(this->config()->num_double_registers(), nullptr,
1366 allocation_zone()), 1365 allocation_zone()),
1367 fixed_simd128_live_ranges_(this->config()->num_simd128_registers(), 1366 fixed_simd128_live_ranges_(allocation_zone()),
1368 nullptr, allocation_zone()),
1369 spill_ranges_(code->VirtualRegisterCount(), nullptr, allocation_zone()), 1367 spill_ranges_(code->VirtualRegisterCount(), nullptr, allocation_zone()),
1370 delayed_references_(allocation_zone()), 1368 delayed_references_(allocation_zone()),
1371 assigned_registers_(nullptr), 1369 assigned_registers_(nullptr),
1372 assigned_double_registers_(nullptr), 1370 assigned_double_registers_(nullptr),
1373 virtual_register_count_(code->VirtualRegisterCount()), 1371 virtual_register_count_(code->VirtualRegisterCount()),
1374 preassigned_slot_ranges_(zone) { 1372 preassigned_slot_ranges_(zone) {
1373 if (!kSimpleFPAliasing) {
1374 fixed_float_live_ranges_.resize(this->config()->num_float_registers(),
1375 nullptr);
1376 fixed_simd128_live_ranges_.resize(this->config()->num_simd128_registers(),
1377 nullptr);
1378 }
1379
1375 assigned_registers_ = new (code_zone()) 1380 assigned_registers_ = new (code_zone())
1376 BitVector(this->config()->num_general_registers(), code_zone()); 1381 BitVector(this->config()->num_general_registers(), code_zone());
1377 assigned_double_registers_ = new (code_zone()) 1382 assigned_double_registers_ = new (code_zone())
1378 BitVector(this->config()->num_double_registers(), code_zone()); 1383 BitVector(this->config()->num_double_registers(), code_zone());
1379 this->frame()->SetAllocatedRegisters(assigned_registers_); 1384 this->frame()->SetAllocatedRegisters(assigned_registers_);
1380 this->frame()->SetAllocatedDoubleRegisters(assigned_double_registers_); 1385 this->frame()->SetAllocatedDoubleRegisters(assigned_double_registers_);
1381 } 1386 }
1382 1387
1383 1388
1384 MoveOperands* RegisterAllocationData::AddGapMove( 1389 MoveOperands* RegisterAllocationData::AddGapMove(
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 DCHECK(result->IsFixed()); 1913 DCHECK(result->IsFixed());
1909 result->set_assigned_register(index); 1914 result->set_assigned_register(index);
1910 data()->MarkAllocated(rep, index); 1915 data()->MarkAllocated(rep, index);
1911 data()->fixed_live_ranges()[index] = result; 1916 data()->fixed_live_ranges()[index] = result;
1912 } 1917 }
1913 return result; 1918 return result;
1914 } 1919 }
1915 1920
1916 TopLevelLiveRange* LiveRangeBuilder::FixedFPLiveRangeFor( 1921 TopLevelLiveRange* LiveRangeBuilder::FixedFPLiveRangeFor(
1917 int index, MachineRepresentation rep) { 1922 int index, MachineRepresentation rep) {
1918 int num_regs = -1; 1923 int num_regs = config()->num_double_registers();
1919 ZoneVector<TopLevelLiveRange*>* live_ranges = nullptr; 1924 ZoneVector<TopLevelLiveRange*>* live_ranges =
1920 switch (rep) { 1925 &data()->fixed_double_live_ranges();
1921 case MachineRepresentation::kFloat32: 1926 if (!kSimpleFPAliasing) {
1922 num_regs = config()->num_float_registers(); 1927 switch (rep) {
1923 live_ranges = &data()->fixed_float_live_ranges(); 1928 case MachineRepresentation::kFloat32:
1924 break; 1929 num_regs = config()->num_float_registers();
1925 case MachineRepresentation::kFloat64: 1930 live_ranges = &data()->fixed_float_live_ranges();
1926 num_regs = config()->num_double_registers(); 1931 break;
1927 live_ranges = &data()->fixed_double_live_ranges(); 1932 case MachineRepresentation::kSimd128:
1928 break; 1933 num_regs = config()->num_simd128_registers();
1929 case MachineRepresentation::kSimd128: 1934 live_ranges = &data()->fixed_simd128_live_ranges();
1930 num_regs = config()->num_simd128_registers(); 1935 break;
1931 live_ranges = &data()->fixed_simd128_live_ranges(); 1936 default:
1932 break; 1937 break;
1933 default: 1938 }
1934 UNREACHABLE();
1935 break;
1936 } 1939 }
1937 1940
1938 DCHECK(index < num_regs); 1941 DCHECK(index < num_regs);
1939 TopLevelLiveRange* result = (*live_ranges)[index]; 1942 TopLevelLiveRange* result = (*live_ranges)[index];
1940 if (result == nullptr) { 1943 if (result == nullptr) {
1941 result = data()->NewLiveRange(FixedFPLiveRangeID(index, rep), rep); 1944 result = data()->NewLiveRange(FixedFPLiveRangeID(index, rep), rep);
1942 DCHECK(result->IsFixed()); 1945 DCHECK(result->IsFixed());
1943 result->set_assigned_register(index); 1946 result->set_assigned_register(index);
1944 data()->MarkAllocated(rep, index); 1947 data()->MarkAllocated(rep, index);
1945 (*live_ranges)[index] = result; 1948 (*live_ranges)[index] = result;
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
2733 } 2736 }
2734 } 2737 }
2735 SortUnhandled(); 2738 SortUnhandled();
2736 DCHECK(UnhandledIsSorted()); 2739 DCHECK(UnhandledIsSorted());
2737 2740
2738 if (mode() == GENERAL_REGISTERS) { 2741 if (mode() == GENERAL_REGISTERS) {
2739 for (TopLevelLiveRange* current : data()->fixed_live_ranges()) { 2742 for (TopLevelLiveRange* current : data()->fixed_live_ranges()) {
2740 if (current != nullptr) AddToInactive(current); 2743 if (current != nullptr) AddToInactive(current);
2741 } 2744 }
2742 } else { 2745 } else {
2743 for (TopLevelLiveRange* current : data()->fixed_float_live_ranges()) {
2744 if (current != nullptr) AddToInactive(current);
2745 }
2746 for (TopLevelLiveRange* current : data()->fixed_double_live_ranges()) { 2746 for (TopLevelLiveRange* current : data()->fixed_double_live_ranges()) {
2747 if (current != nullptr) AddToInactive(current); 2747 if (current != nullptr) AddToInactive(current);
2748 } 2748 }
2749 for (TopLevelLiveRange* current : data()->fixed_simd128_live_ranges()) { 2749 if (!kSimpleFPAliasing) {
2750 if (current != nullptr) AddToInactive(current); 2750 for (TopLevelLiveRange* current : data()->fixed_float_live_ranges()) {
2751 if (current != nullptr) AddToInactive(current);
2752 }
2753 for (TopLevelLiveRange* current : data()->fixed_simd128_live_ranges()) {
2754 if (current != nullptr) AddToInactive(current);
2755 }
2751 } 2756 }
2752 } 2757 }
2753 2758
2754 while (!unhandled_live_ranges().empty()) { 2759 while (!unhandled_live_ranges().empty()) {
2755 DCHECK(UnhandledIsSorted()); 2760 DCHECK(UnhandledIsSorted());
2756 LiveRange* current = unhandled_live_ranges().back(); 2761 LiveRange* current = unhandled_live_ranges().back();
2757 unhandled_live_ranges().pop_back(); 2762 unhandled_live_ranges().pop_back();
2758 DCHECK(UnhandledIsSorted()); 2763 DCHECK(UnhandledIsSorted());
2759 LifetimePosition position = current->Start(); 2764 LifetimePosition position = current->Start();
2760 #ifdef DEBUG 2765 #ifdef DEBUG
(...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after
3950 } 3955 }
3951 } 3956 }
3952 } 3957 }
3953 } 3958 }
3954 } 3959 }
3955 3960
3956 3961
3957 } // namespace compiler 3962 } // namespace compiler
3958 } // namespace internal 3963 } // namespace internal
3959 } // namespace v8 3964 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698