diff options
author | Alexandre Rames <alexandre.rames@linaro.org> | 2015-08-19 15:39:06 +0100 |
---|---|---|
committer | Alexandre Rames <alexandre.rames@linaro.org> | 2015-08-19 15:39:06 +0100 |
commit | 44b9cf937836bb33139123e15ca8b586b5853268 (patch) | |
tree | a4fe52cb53133522069f41083d118fb6abca9336 /compiler/optimizing/optimizing_compiler.cc | |
parent | 32f264e67afa8654a5570d38b627515fb73fc333 (diff) |
Put in place the ARM64 instruction simplification framework.
This commit introduces and runs the empty InstructionSimplifierArm64
pass. Further commits will introduce arm64-specific transformations in
that pass.
Change-Id: I458f8a2b15470297b87fc1f7ff85bd52155d93ef
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 6a50b7d4a4..866e71705f 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -19,6 +19,10 @@ #include <fstream> #include <stdint.h> +#ifdef ART_ENABLE_CODEGEN_arm64 +#include "instruction_simplifier_arm64.h" +#endif + #include "art_method-inl.h" #include "base/arena_allocator.h" #include "base/dumpable.h" @@ -399,6 +403,32 @@ static void MaybeRunInliner(HGraph* graph, RunOptimizations(optimizations, arraysize(optimizations), pass_observer); } +static void RunArchOptimizations(InstructionSet instruction_set, + HGraph* graph, + OptimizingCompilerStats* stats, + PassObserver* pass_observer) { + ArenaAllocator* arena = graph->GetArena(); + switch (instruction_set) { +#ifdef ART_ENABLE_CODEGEN_arm64 + case kArm64: { + arm64::InstructionSimplifierArm64* simplifier = + new (arena) arm64::InstructionSimplifierArm64(graph, stats); + SideEffectsAnalysis* side_effects = new (arena) SideEffectsAnalysis(graph); + GVNOptimization* gvn = new (arena) GVNOptimization(graph, *side_effects, "GVN_after_arch"); + HOptimization* arm64_optimizations[] = { + simplifier, + side_effects, + gvn + }; + RunOptimizations(arm64_optimizations, arraysize(arm64_optimizations), pass_observer); + break; + } +#endif + default: + break; + } +} + static void RunOptimizations(HGraph* graph, CompilerDriver* driver, OptimizingCompilerStats* stats, @@ -460,6 +490,8 @@ static void RunOptimizations(HGraph* graph, }; RunOptimizations(optimizations2, arraysize(optimizations2), pass_observer); + + RunArchOptimizations(driver->GetInstructionSet(), graph, stats, pass_observer); } // The stack map we generate must be 4-byte aligned on ARM. Since existing |