From 581550137ee3a068a14224870e71aeee924a0646 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Wed, 19 Aug 2015 12:49:41 +0000 Subject: Revert "Revert "Optimizing: Better invoke-static/-direct dispatch."" Fixed kCallArtMethod to use correct callee location for kRecursive. This combination is used when compiling with debuggable flag set. This reverts commit b2c431e80e92eb6437788cc544cee6c88c3156df. Change-Id: Idee0f2a794199ebdf24892c60f8a5dcf057db01c --- compiler/optimizing/optimizing_compiler.cc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'compiler/optimizing/optimizing_compiler.cc') diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 6a50b7d4a4..b18c921b2c 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -488,6 +488,19 @@ static void AllocateRegisters(HGraph* graph, } } +static ArenaVector EmitAndSortLinkerPatches(CodeGenerator* codegen) { + ArenaVector linker_patches(codegen->GetGraph()->GetArena()->Adapter()); + codegen->EmitLinkerPatches(&linker_patches); + + // Sort patches by literal offset. Required for .oat_patches encoding. + std::sort(linker_patches.begin(), linker_patches.end(), + [](const LinkerPatch& lhs, const LinkerPatch& rhs) { + return lhs.LiteralOffset() < rhs.LiteralOffset(); + }); + + return linker_patches; +} + CompiledMethod* OptimizingCompiler::CompileOptimized(HGraph* graph, CodeGenerator* codegen, CompilerDriver* compiler_driver, @@ -502,6 +515,8 @@ CompiledMethod* OptimizingCompiler::CompileOptimized(HGraph* graph, CodeVectorAllocator allocator; codegen->CompileOptimized(&allocator); + ArenaVector linker_patches = EmitAndSortLinkerPatches(codegen); + DefaultSrcMap src_mapping_table; if (compiler_driver->GetCompilerOptions().GetGenerateDebugInfo()) { codegen->BuildSourceMap(&src_mapping_table); @@ -527,7 +542,7 @@ CompiledMethod* OptimizingCompiler::CompileOptimized(HGraph* graph, ArrayRef(stack_map), ArrayRef(), // native_gc_map. ArrayRef(*codegen->GetAssembler()->cfi().data()), - ArrayRef()); + ArrayRef(linker_patches)); pass_observer->DumpDisassembly(); return compiled_method; } @@ -540,6 +555,8 @@ CompiledMethod* OptimizingCompiler::CompileBaseline( CodeVectorAllocator allocator; codegen->CompileBaseline(&allocator); + ArenaVector linker_patches = EmitAndSortLinkerPatches(codegen); + std::vector mapping_table; codegen->BuildMappingTable(&mapping_table); DefaultSrcMap src_mapping_table; @@ -567,7 +584,7 @@ CompiledMethod* OptimizingCompiler::CompileBaseline( AlignVectorSize(vmap_table), AlignVectorSize(gc_map), ArrayRef(*codegen->GetAssembler()->cfi().data()), - ArrayRef()); + ArrayRef(linker_patches)); pass_observer->DumpDisassembly(); return compiled_method; } -- cgit v1.2.3-59-g8ed1b