diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2016-11-14 12:40:52 +0000 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2016-11-14 12:40:52 +0000 |
commit | 3395fbc20bcd20948bec8958db91b304c17cacd8 (patch) | |
tree | e0d00b412961e2aaa0dff91317a9f4168189e5fb /compiler/optimizing/optimizing_compiler.cc | |
parent | 75afcdd3503a8a8518e5b23d21b6e73306ce39ce (diff) |
Revert "Revert "Revert "JIT root tables."""
libcore failures:
dalvikvm32 F 11-14 03:04:06 14870 14870 jit_code_cache.cc:310] Check failed: new_string != nullptr
This reverts commit 75afcdd3503a8a8518e5b23d21b6e73306ce39ce.
Change-Id: I5a6b6b48aa79a763d1ff1ba4d85d63811254787d
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 1add660f1b..6f84cdcc4f 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -117,7 +117,6 @@ class CodeVectorAllocator FINAL : public CodeAllocator { size_t GetSize() const { return size_; } const ArenaVector<uint8_t>& GetMemory() const { return memory_; } - uint8_t* GetData() { return memory_.data(); } private: ArenaVector<uint8_t> memory_; @@ -1127,7 +1126,7 @@ bool OptimizingCompiler::JitCompile(Thread* self, jit::JitCodeCache* code_cache, ArtMethod* method, bool osr) { - StackHandleScope<3> hs(self); + StackHandleScope<2> hs(self); Handle<mirror::ClassLoader> class_loader(hs.NewHandle( method->GetDeclaringClass()->GetClassLoader())); Handle<mirror::DexCache> dex_cache(hs.NewHandle(method->GetDexCache())); @@ -1173,43 +1172,22 @@ bool OptimizingCompiler::JitCompile(Thread* self, } size_t stack_map_size = codegen->ComputeStackMapsSize(); - size_t number_of_roots = codegen->GetNumberOfJitRoots(); - ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); - // We allocate an object array to ensure the JIT roots that we will collect in EmitJitRoots - // will be visible by the GC between EmitLiterals and CommitCode. Once CommitCode is - // executed, this array is not needed. - Handle<mirror::ObjectArray<mirror::Object>> roots( - hs.NewHandle(mirror::ObjectArray<mirror::Object>::Alloc( - self, class_linker->GetClassRoot(ClassLinker::kObjectArrayClass), number_of_roots))); - if (roots.Get() == nullptr) { - // Out of memory, just clear the exception to avoid any Java exception uncaught problems. - DCHECK(self->IsExceptionPending()); - self->ClearException(); - return false; - } - uint8_t* stack_map_data = nullptr; - uint8_t* roots_data = nullptr; - code_cache->ReserveData( - self, stack_map_size, number_of_roots, method, &stack_map_data, &roots_data); - if (stack_map_data == nullptr || roots_data == nullptr) { + uint8_t* stack_map_data = code_cache->ReserveData(self, stack_map_size, method); + if (stack_map_data == nullptr) { return false; } MaybeRecordStat(MethodCompilationStat::kCompiled); codegen->BuildStackMaps(MemoryRegion(stack_map_data, stack_map_size), *code_item); - codegen->EmitJitRoots(code_allocator.GetData(), roots, roots_data, dex_cache); - const void* code = code_cache->CommitCode( self, method, stack_map_data, - roots_data, codegen->HasEmptyFrame() ? 0 : codegen->GetFrameSize(), codegen->GetCoreSpillMask(), codegen->GetFpuSpillMask(), code_allocator.GetMemory().data(), code_allocator.GetSize(), - osr, - roots); + osr); if (code == nullptr) { code_cache->ClearData(self, stack_map_data); |