summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r--compiler/optimizing/code_generator.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index 404a42771f..80c0f84d6e 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -142,6 +142,22 @@ static bool CheckTypeConsistency(HInstruction* instruction) {
return true;
}
+bool CodeGenerator::EmitReadBarrier() const {
+ return GetCompilerOptions().EmitReadBarrier();
+}
+
+bool CodeGenerator::EmitBakerReadBarrier() const {
+ return kUseBakerReadBarrier && GetCompilerOptions().EmitReadBarrier();
+}
+
+bool CodeGenerator::EmitNonBakerReadBarrier() const {
+ return !kUseBakerReadBarrier && GetCompilerOptions().EmitReadBarrier();
+}
+
+ReadBarrierOption CodeGenerator::GetCompilerReadBarrierOption() const {
+ return EmitReadBarrier() ? kWithReadBarrier : kWithoutReadBarrier;
+}
+
ScopedArenaAllocator* CodeGenerator::GetScopedAllocator() {
DCHECK(code_generation_data_ != nullptr);
return code_generation_data_->GetScopedAllocator();
@@ -1624,8 +1640,7 @@ void CodeGenerator::ValidateInvokeRuntime(QuickEntrypointEnum entrypoint,
// When (non-Baker) read barriers are enabled, some instructions
// use a slow path to emit a read barrier, which does not trigger
// GC.
- (gUseReadBarrier &&
- !kUseBakerReadBarrier &&
+ (EmitNonBakerReadBarrier() &&
(instruction->IsInstanceFieldGet() ||
instruction->IsPredicatedInstanceFieldGet() ||
instruction->IsStaticFieldGet() ||