diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/common_compiler_test.h | 19 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver_test.cc | 3 | ||||
| -rw-r--r-- | compiler/optimizing/inliner.cc | 6 | ||||
| -rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 26 |
4 files changed, 9 insertions, 45 deletions
diff --git a/compiler/common_compiler_test.h b/compiler/common_compiler_test.h index 98dcf20714..0683577ec5 100644 --- a/compiler/common_compiler_test.h +++ b/compiler/common_compiler_test.h @@ -117,25 +117,6 @@ class CommonCompilerTest : public CommonRuntimeTest { std::list<std::vector<uint8_t>> header_code_and_maps_chunks_; }; -// TODO: When read barrier works with all Optimizing back ends, get rid of this. -#define TEST_DISABLED_FOR_READ_BARRIER_WITH_OPTIMIZING_FOR_UNSUPPORTED_INSTRUCTION_SETS() \ - if (kUseReadBarrier && GetCompilerKind() == Compiler::kOptimizing) { \ - switch (GetInstructionSet()) { \ - case kArm64: \ - case kThumb2: \ - case kX86: \ - case kX86_64: \ - /* Instruction set has read barrier support. */ \ - break; \ - \ - default: \ - /* Instruction set does not have barrier support. */ \ - printf("WARNING: TEST DISABLED FOR READ BARRIER WITH OPTIMIZING " \ - "FOR THIS INSTRUCTION SET\n"); \ - return; \ - } \ - } - } // namespace art #endif // ART_COMPILER_COMMON_COMPILER_TEST_H_ diff --git a/compiler/driver/compiler_driver_test.cc b/compiler/driver/compiler_driver_test.cc index 35aa1eef2d..fa1b3a304a 100644 --- a/compiler/driver/compiler_driver_test.cc +++ b/compiler/driver/compiler_driver_test.cc @@ -148,7 +148,6 @@ TEST_F(CompilerDriverTest, DISABLED_LARGE_CompileDexLibCore) { } TEST_F(CompilerDriverTest, AbstractMethodErrorStub) { - TEST_DISABLED_FOR_READ_BARRIER_WITH_OPTIMIZING_FOR_UNSUPPORTED_INSTRUCTION_SETS(); jobject class_loader; { ScopedObjectAccess soa(Thread::Current()); @@ -191,7 +190,6 @@ class CompilerDriverMethodsTest : public CompilerDriverTest { }; TEST_F(CompilerDriverMethodsTest, Selection) { - TEST_DISABLED_FOR_READ_BARRIER_WITH_OPTIMIZING_FOR_UNSUPPORTED_INSTRUCTION_SETS(); Thread* self = Thread::Current(); jobject class_loader; { @@ -299,7 +297,6 @@ class CompilerDriverProfileTest : public CompilerDriverTest { }; TEST_F(CompilerDriverProfileTest, ProfileGuidedCompilation) { - TEST_DISABLED_FOR_READ_BARRIER_WITH_OPTIMIZING_FOR_UNSUPPORTED_INSTRUCTION_SETS(); Thread* self = Thread::Current(); jobject class_loader; { diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc index 79cd7048a5..298ae5c847 100644 --- a/compiler/optimizing/inliner.cc +++ b/compiler/optimizing/inliner.cc @@ -371,6 +371,12 @@ ArtMethod* HInliner::TryCHADevirtualization(ArtMethod* resolved_method) { // invoke-virtual because a proxy method doesn't have a real dex file. return nullptr; } + if (!single_impl->GetDeclaringClass()->IsResolved()) { + // There's a race with the class loading, which updates the CHA info + // before setting the class to resolved. So we just bail for this + // rare occurence. + return nullptr; + } return single_impl; } diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index eb88fdee84..e542cbbe37 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -449,17 +449,6 @@ static bool IsInstructionSetSupported(InstructionSet instruction_set) { || instruction_set == kX86_64; } -// Read barrier are supported on ARM, ARM64, x86 and x86-64 at the moment. -// TODO: Add support for other architectures and remove this function -static bool InstructionSetSupportsReadBarrier(InstructionSet instruction_set) { - return instruction_set == kArm64 - || instruction_set == kThumb2 - || instruction_set == kMips - || instruction_set == kMips64 - || instruction_set == kX86 - || instruction_set == kX86_64; -} - // Strip pass name suffix to get optimization name. static std::string ConvertPassNameToOptimizationName(const std::string& pass_name) { size_t pos = pass_name.find(kPassNameSeparator); @@ -914,12 +903,6 @@ CodeGenerator* OptimizingCompiler::TryCompile(ArenaAllocator* arena, return nullptr; } - // When read barriers are enabled, do not attempt to compile for - // instruction sets that have no read barrier support. - if (kEmitCompilerReadBarrier && !InstructionSetSupportsReadBarrier(instruction_set)) { - return nullptr; - } - if (Compiler::IsPathologicalCase(*code_item, method_idx, dex_file)) { MaybeRecordStat(MethodCompilationStat::kNotCompiledPathological); return nullptr; @@ -1110,13 +1093,10 @@ CompiledMethod* OptimizingCompiler::Compile(const DexFile::CodeItem* code_item, if (kIsDebugBuild && IsCompilingWithCoreImage() && - IsInstructionSetSupported(compiler_driver->GetInstructionSet()) && - (!kEmitCompilerReadBarrier || - InstructionSetSupportsReadBarrier(compiler_driver->GetInstructionSet()))) { + IsInstructionSetSupported(compiler_driver->GetInstructionSet())) { // For testing purposes, we put a special marker on method names - // that should be compiled with this compiler (when the the - // instruction set is supported -- and has support for read - // barriers, if they are enabled). This makes sure we're not + // that should be compiled with this compiler (when the + // instruction set is supported). This makes sure we're not // regressing. std::string method_name = dex_file.PrettyMethod(method_idx); bool shouldCompile = method_name.find("$opt$") != std::string::npos; |