OLD | NEW |
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 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1845 range->Spill(); | 1845 range->Spill(); |
1846 } | 1846 } |
1847 | 1847 |
1848 | 1848 |
1849 const ZoneVector<LiveRange*>& RegisterAllocator::GetFixedRegisters() const { | 1849 const ZoneVector<LiveRange*>& RegisterAllocator::GetFixedRegisters() const { |
1850 return mode() == DOUBLE_REGISTERS ? data()->fixed_double_live_ranges() | 1850 return mode() == DOUBLE_REGISTERS ? data()->fixed_double_live_ranges() |
1851 : data()->fixed_live_ranges(); | 1851 : data()->fixed_live_ranges(); |
1852 } | 1852 } |
1853 | 1853 |
1854 | 1854 |
| 1855 const char* RegisterAllocator::RegisterName(int allocation_index) const { |
| 1856 if (mode() == GENERAL_REGISTERS) { |
| 1857 return data()->config()->general_register_name(allocation_index); |
| 1858 } else { |
| 1859 return data()->config()->double_register_name(allocation_index); |
| 1860 } |
| 1861 } |
| 1862 |
| 1863 |
1855 LinearScanAllocator::LinearScanAllocator(RegisterAllocationData* data, | 1864 LinearScanAllocator::LinearScanAllocator(RegisterAllocationData* data, |
1856 RegisterKind kind, Zone* local_zone) | 1865 RegisterKind kind, Zone* local_zone) |
1857 : RegisterAllocator(data, kind), | 1866 : RegisterAllocator(data, kind), |
1858 unhandled_live_ranges_(local_zone), | 1867 unhandled_live_ranges_(local_zone), |
1859 active_live_ranges_(local_zone), | 1868 active_live_ranges_(local_zone), |
1860 inactive_live_ranges_(local_zone) { | 1869 inactive_live_ranges_(local_zone) { |
1861 unhandled_live_ranges().reserve( | 1870 unhandled_live_ranges().reserve( |
1862 static_cast<size_t>(code()->VirtualRegisterCount() * 2)); | 1871 static_cast<size_t>(code()->VirtualRegisterCount() * 2)); |
1863 active_live_ranges().reserve(8); | 1872 active_live_ranges().reserve(8); |
1864 inactive_live_ranges().reserve(8); | 1873 inactive_live_ranges().reserve(8); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1951 | 1960 |
1952 bool result = TryAllocateFreeReg(current); | 1961 bool result = TryAllocateFreeReg(current); |
1953 if (!result) AllocateBlockedReg(current); | 1962 if (!result) AllocateBlockedReg(current); |
1954 if (current->HasRegisterAssigned()) { | 1963 if (current->HasRegisterAssigned()) { |
1955 AddToActive(current); | 1964 AddToActive(current); |
1956 } | 1965 } |
1957 } | 1966 } |
1958 } | 1967 } |
1959 | 1968 |
1960 | 1969 |
1961 const char* LinearScanAllocator::RegisterName(int allocation_index) const { | |
1962 if (mode() == GENERAL_REGISTERS) { | |
1963 return data()->config()->general_register_name(allocation_index); | |
1964 } else { | |
1965 return data()->config()->double_register_name(allocation_index); | |
1966 } | |
1967 } | |
1968 | |
1969 | |
1970 void LinearScanAllocator::SetLiveRangeAssignedRegister(LiveRange* range, | 1970 void LinearScanAllocator::SetLiveRangeAssignedRegister(LiveRange* range, |
1971 int reg) { | 1971 int reg) { |
1972 data()->MarkAllocated(range->kind(), reg); | 1972 data()->MarkAllocated(range->kind(), reg); |
1973 range->set_assigned_register(reg); | 1973 range->set_assigned_register(reg); |
1974 range->SetUseHints(reg); | 1974 range->SetUseHints(reg); |
1975 if (range->is_phi()) { | 1975 if (range->is_phi()) { |
1976 data()->GetPhiMapValueFor(range->id())->set_assigned_register(reg); | 1976 data()->GetPhiMapValueFor(range->id())->set_assigned_register(reg); |
1977 } | 1977 } |
1978 } | 1978 } |
1979 | 1979 |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2861 auto eliminate = moves->PrepareInsertAfter(move); | 2861 auto eliminate = moves->PrepareInsertAfter(move); |
2862 to_insert.push_back(move); | 2862 to_insert.push_back(move); |
2863 if (eliminate != nullptr) to_eliminate.push_back(eliminate); | 2863 if (eliminate != nullptr) to_eliminate.push_back(eliminate); |
2864 } | 2864 } |
2865 } | 2865 } |
2866 | 2866 |
2867 | 2867 |
2868 } // namespace compiler | 2868 } // namespace compiler |
2869 } // namespace internal | 2869 } // namespace internal |
2870 } // namespace v8 | 2870 } // namespace v8 |
OLD | NEW |