summaryrefslogtreecommitdiff
path: root/compiler/optimizing/instruction_simplifier_arm64.h
diff options
context:
space:
mode:
author Alexandre Rames <alexandre.rames@linaro.org> 2015-10-19 10:10:41 +0100
committer Alexandre Rames <alexandre.rames@linaro.org> 2015-10-19 10:10:41 +0100
commite6dbf48d7a549e58a3d798bbbdc391e4d091b432 (patch)
treee9edbb884c0143a38e0b32350119999bc11b4dee /compiler/optimizing/instruction_simplifier_arm64.h
parent45513eb694fe55cf02ca6e8f0884621a6c3f6268 (diff)
ARM64: Instruction simplification for array accesses.
HArrayGet and HArraySet with variable indexes generate two instructions on arm64, like add temp, obj, #data_offset ldr out, [temp, index LSL #shift_amount] When we have multiple accesses to the same array, the initial `add` instruction is redundant. This patch introduces the first instruction simplification in the arm64-specific instruction simplification pass. It splits HArrayGet and HArraySet using the new arm64-specific IR HIntermediateAddress. After that we run GVN again to squash the multiple occurrences of HIntermediateAddress. Change-Id: I2e3d12fbb07fed07b2cb2f3f47f99f5a032f8312
Diffstat (limited to 'compiler/optimizing/instruction_simplifier_arm64.h')
-rw-r--r--compiler/optimizing/instruction_simplifier_arm64.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/optimizing/instruction_simplifier_arm64.h b/compiler/optimizing/instruction_simplifier_arm64.h
index d7f4eaee80..4b697dba0e 100644
--- a/compiler/optimizing/instruction_simplifier_arm64.h
+++ b/compiler/optimizing/instruction_simplifier_arm64.h
@@ -35,6 +35,14 @@ class InstructionSimplifierArm64Visitor : public HGraphVisitor {
}
}
+ void TryExtractArrayAccessAddress(HInstruction* access,
+ HInstruction* array,
+ HInstruction* index,
+ int access_size);
+
+ void VisitArrayGet(HArrayGet* instruction) OVERRIDE;
+ void VisitArraySet(HArraySet* instruction) OVERRIDE;
+
OptimizingCompilerStats* stats_;
};