diff options
Diffstat (limited to 'compiler/dex/frontend.cc')
| -rw-r--r-- | compiler/dex/frontend.cc | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/compiler/dex/frontend.cc b/compiler/dex/frontend.cc index 414d51412e..72990b4be0 100644 --- a/compiler/dex/frontend.cc +++ b/compiler/dex/frontend.cc @@ -114,19 +114,20 @@ CompilationUnit::~CompilationUnit() { void CompilationUnit::StartTimingSplit(const char* label) { if (compiler_driver->GetDumpPasses()) { - timings.StartSplit(label); + timings.StartTiming(label); } } void CompilationUnit::NewTimingSplit(const char* label) { if (compiler_driver->GetDumpPasses()) { - timings.NewSplit(label); + timings.EndTiming(); + timings.StartTiming(label); } } void CompilationUnit::EndTiming() { if (compiler_driver->GetDumpPasses()) { - timings.EndSplit(); + timings.EndTiming(); if (enable_debug & (1 << kDebugTimings)) { LOG(INFO) << "TIMINGS " << PrettyMethod(method_idx, *dex_file); LOG(INFO) << Dumpable<TimingLogger>(timings); @@ -783,10 +784,11 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, uint16_t class_def_idx, uint32_t method_idx, jobject class_loader, const DexFile& dex_file, void* llvm_compilation_unit) { - VLOG(compiler) << "Compiling " << PrettyMethod(method_idx, dex_file) << "..."; + std::string method_name = PrettyMethod(method_idx, dex_file); + VLOG(compiler) << "Compiling " << method_name << "..."; if (code_item->insns_size_in_code_units_ >= 0x10000) { LOG(INFO) << "Method size exceeds compiler limits: " << code_item->insns_size_in_code_units_ - << " in " << PrettyMethod(method_idx, dex_file); + << " in " << method_name; return NULL; } @@ -818,8 +820,7 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, cu.compiler_flip_match = false; bool use_match = !cu.compiler_method_match.empty(); bool match = use_match && (cu.compiler_flip_match ^ - (PrettyMethod(method_idx, dex_file).find(cu.compiler_method_match) != - std::string::npos)); + (method_name.find(cu.compiler_method_match) != std::string::npos)); if (!use_match || match) { cu.disable_opt = kCompilerOptimizerDisableFlags; cu.enable_debug = kCompilerDebugFlags; @@ -830,7 +831,7 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, if (gVerboseMethods.size() != 0) { cu.verbose = false; for (size_t i = 0; i < gVerboseMethods.size(); ++i) { - if (PrettyMethod(method_idx, dex_file).find(gVerboseMethods[i]) + if (method_name.find(gVerboseMethods[i]) != std::string::npos) { cu.verbose = true; break; @@ -864,7 +865,9 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, (1 << kPromoteCompilerTemps)); } else if (cu.instruction_set == kX86_64) { // TODO(X86_64): enable optimizations once backend is mature enough. - cu.disable_opt = ~(uint32_t)0; + cu.disable_opt |= ( + (1 << kLoadStoreElimination) | + (1 << kPromoteRegs)); } else if (cu.instruction_set == kArm64) { // TODO(Arm64): enable optimizations once backend is mature enough. cu.disable_opt = ~(uint32_t)0; @@ -885,22 +888,13 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, cu.mir_graph->EnableOpcodeCounting(); } - // Check early if we should skip this compilation if the profiler is enabled. - if (cu.compiler_driver->ProfilePresent()) { - std::string methodname = PrettyMethod(method_idx, dex_file); - if (cu.mir_graph->SkipCompilationByName(methodname)) { - return nullptr; - } - } - /* Build the raw MIR graph */ cu.mir_graph->InlineMethod(code_item, access_flags, invoke_type, class_def_idx, method_idx, class_loader, dex_file); // TODO(Arm64): Remove this when we are able to compile everything. if (!CanCompileMethod(method_idx, dex_file, cu)) { - VLOG(compiler) << cu.instruction_set << ": Cannot compile method : " - << PrettyMethod(method_idx, dex_file); + VLOG(compiler) << cu.instruction_set << ": Cannot compile method : " << method_name; return nullptr; } @@ -908,7 +902,7 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, std::string skip_message; if (cu.mir_graph->SkipCompilation(&skip_message)) { VLOG(compiler) << cu.instruction_set << ": Skipping method : " - << PrettyMethod(method_idx, dex_file) << " Reason = " << skip_message; + << method_name << " Reason = " << skip_message; return nullptr; } @@ -916,6 +910,13 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, PassDriverMEOpts pass_driver(&cu); pass_driver.Launch(); + /* For non-leaf methods check if we should skip compilation when the profiler is enabled. */ + if (cu.compiler_driver->ProfilePresent() + && !cu.mir_graph->MethodIsLeaf() + && cu.mir_graph->SkipCompilationByName(method_name)) { + return nullptr; + } + if (cu.enable_debug & (1 << kDebugDumpCheckStats)) { cu.mir_graph->DumpCheckStats(); } @@ -931,7 +932,7 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, if (cu.enable_debug & (1 << kDebugShowMemoryUsage)) { if (cu.arena_stack.PeakBytesAllocated() > 256 * 1024) { MemStats stack_stats(cu.arena_stack.GetPeakStats()); - LOG(INFO) << PrettyMethod(method_idx, dex_file) << " " << Dumpable<MemStats>(stack_stats); + LOG(INFO) << method_name << " " << Dumpable<MemStats>(stack_stats); } } cu.arena_stack.Reset(); @@ -939,8 +940,7 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, CompiledMethod* result = NULL; if (cu.mir_graph->PuntToInterpreter()) { - VLOG(compiler) << cu.instruction_set << ": Punted method to interpreter: " - << PrettyMethod(method_idx, dex_file); + VLOG(compiler) << cu.instruction_set << ": Punted method to interpreter: " << method_name; return nullptr; } @@ -951,21 +951,21 @@ static CompiledMethod* CompileMethod(CompilerDriver& driver, cu.NewTimingSplit("Cleanup"); if (result) { - VLOG(compiler) << cu.instruction_set << ": Compiled " << PrettyMethod(method_idx, dex_file); + VLOG(compiler) << cu.instruction_set << ": Compiled " << method_name; } else { - VLOG(compiler) << cu.instruction_set << ": Deferred " << PrettyMethod(method_idx, dex_file); + VLOG(compiler) << cu.instruction_set << ": Deferred " << method_name; } if (cu.enable_debug & (1 << kDebugShowMemoryUsage)) { if (cu.arena.BytesAllocated() > (1 * 1024 *1024)) { MemStats mem_stats(cu.arena.GetMemStats()); - LOG(INFO) << PrettyMethod(method_idx, dex_file) << " " << Dumpable<MemStats>(mem_stats); + LOG(INFO) << method_name << " " << Dumpable<MemStats>(mem_stats); } } if (cu.enable_debug & (1 << kDebugShowSummaryMemoryUsage)) { LOG(INFO) << "MEMINFO " << cu.arena.BytesAllocated() << " " << cu.mir_graph->GetNumBlocks() - << " " << PrettyMethod(method_idx, dex_file); + << " " << method_name; } cu.EndTiming(); |