summaryrefslogtreecommitdiff
path: root/compiler/optimizing/register_allocator.h
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-03-05 11:28:58 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2015-03-06 11:37:33 +0000
commitb4ba354cf8d22b261205494875cc014f18587b50 (patch)
treeb6ce1e89f56f4d5adf238188df5b02fd7e2c23ac /compiler/optimizing/register_allocator.h
parentaf8db2ea18135588b267fe9a0b2f7af734b906cc (diff)
[optimizing] Enable x86 long support.
Change-Id: I9006972a65a1f191c45691104a960366747f9d16
Diffstat (limited to 'compiler/optimizing/register_allocator.h')
-rw-r--r--compiler/optimizing/register_allocator.h24
1 files changed, 14 insertions, 10 deletions
diff --git a/compiler/optimizing/register_allocator.h b/compiler/optimizing/register_allocator.h
index 579f069f5e..fcc61128a6 100644
--- a/compiler/optimizing/register_allocator.h
+++ b/compiler/optimizing/register_allocator.h
@@ -66,13 +66,6 @@ class RegisterAllocator {
bool log_fatal_on_failure);
static bool CanAllocateRegistersFor(const HGraph& graph, InstructionSet instruction_set);
- static bool Supports(InstructionSet instruction_set) {
- return instruction_set == kArm
- || instruction_set == kArm64
- || instruction_set == kThumb2
- || instruction_set == kX86
- || instruction_set == kX86_64;
- }
size_t GetNumberOfSpillSlots() const {
return int_spill_slots_.Size()
@@ -121,12 +114,21 @@ class RegisterAllocator {
Location source,
Location destination) const;
void InsertMoveAfter(HInstruction* instruction, Location source, Location destination) const;
- void AddInputMoveFor(HInstruction* user, Location source, Location destination) const;
+ void AddInputMoveFor(HInstruction* input,
+ HInstruction* user,
+ Location source,
+ Location destination) const;
void InsertParallelMoveAt(size_t position,
HInstruction* instruction,
Location source,
Location destination) const;
+ void AddMove(HParallelMove* move,
+ Location source,
+ Location destination,
+ HInstruction* instruction,
+ Primitive::Type type) const;
+
// Helper methods.
void AllocateRegistersInternal();
void ProcessInstruction(HInstruction* instruction);
@@ -136,9 +138,11 @@ class RegisterAllocator {
int FindAvailableRegisterPair(size_t* next_use, size_t starting_at) const;
int FindAvailableRegister(size_t* next_use) const;
- // Try splitting an active non-pair interval at the given `position`.
+ // Try splitting an active non-pair or unaligned pair interval at the given `position`.
// Returns whether it was successful at finding such an interval.
- bool TrySplitNonPairIntervalAt(size_t position, size_t first_register_use, size_t* next_use);
+ bool TrySplitNonPairOrUnalignedPairIntervalAt(size_t position,
+ size_t first_register_use,
+ size_t* next_use);
ArenaAllocator* const allocator_;
CodeGenerator* const codegen_;