summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimizing_compiler.cc
diff options
context:
space:
mode:
authorAlexandre Rames <alexandre.rames@linaro.org>2015-08-19 15:39:06 +0100
committerAlexandre Rames <alexandre.rames@linaro.org>2015-08-19 15:39:06 +0100
commit44b9cf937836bb33139123e15ca8b586b5853268 (patch)
treea4fe52cb53133522069f41083d118fb6abca9336 /compiler/optimizing/optimizing_compiler.cc
parent32f264e67afa8654a5570d38b627515fb73fc333 (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.cc32
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