summaryrefslogtreecommitdiff
path: root/src/compiler/driver/compiler_driver.cc
diff options
context:
space:
mode:
author Anwar Ghuloum <anwarg@google.com> 2013-06-27 07:13:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2013-06-27 07:13:43 +0000
commite53ebbcf98d004f0e1f631a630d0344d104e3dc6 (patch)
tree6190aab5b5c6061a25df9931e1b0dbd6229d0a95 /src/compiler/driver/compiler_driver.cc
parenteac1880f791c4a2b18f1b197cc6289a28ec11252 (diff)
parent39f992750ac1eb7e51955d3e52bddc32b37c370f (diff)
Merge changes I3b33358e,I7467ee05 into dalvik-dev
* changes: Added wrapper functions for register acccess in Instruction. Added support for SEA IR.
Diffstat (limited to 'src/compiler/driver/compiler_driver.cc')
-rw-r--r--src/compiler/driver/compiler_driver.cc21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/compiler/driver/compiler_driver.cc b/src/compiler/driver/compiler_driver.cc
index 4a6eb962e3..122988aa5b 100644
--- a/src/compiler/driver/compiler_driver.cc
+++ b/src/compiler/driver/compiler_driver.cc
@@ -374,6 +374,11 @@ CompilerDriver::CompilerDriver(CompilerBackend compiler_backend, InstructionSet
dex_to_dex_compiler_ = FindFunction<CompilerFn>(compiler_so_name, compiler_library_, "ArtCompileDEX");
+ sea_ir_compiler_ = NULL;
+ if (Runtime::Current()->IsSeaIRMode()) {
+ sea_ir_compiler_ = FindFunction<CompilerFn>(compiler_so_name, compiler_library_, "SeaIrCompileMethod");
+ }
+
init_compiler_context(*this);
if (compiler_backend_ == kPortable) {
@@ -2149,10 +2154,22 @@ void CompilerDriver::CompileMethod(const DexFile::CodeItem* code_item, uint32_t
// Do compile small methods.
dont_compile = false;
}
-
if (!dont_compile) {
- compiled_method = (*compiler_)(*this, code_item, access_flags, invoke_type, class_def_idx,
+ bool use_sea = false;
+
+ if (Runtime::Current()->IsSeaIRMode()) {
+ use_sea = true;
+ }
+ if (use_sea) {
+ use_sea = (std::string::npos != PrettyMethod(method_idx, dex_file).find("fibonacci"));
+ }
+ if (!use_sea) {
+ compiled_method = (*compiler_)(*this, code_item, access_flags, invoke_type, class_def_idx,
method_idx, class_loader, dex_file);
+ } else {
+ compiled_method = (*sea_ir_compiler_)(*this, code_item, access_flags, invoke_type, class_def_idx,
+ method_idx, class_loader, dex_file);
+ }
CHECK(compiled_method != NULL) << PrettyMethod(method_idx, dex_file);
} else if (allow_dex_to_dex_compilation) {
// TODO: add a mode to disable DEX-to-DEX compilation ?