summaryrefslogtreecommitdiff
path: root/compiler/optimizing/write_barrier_elimination.cc
diff options
context:
space:
mode:
author Santiago Aboy Solanes <solanes@google.com> 2024-01-23 13:55:50 +0000
committer Santiago Aboy Solanes <solanes@google.com> 2024-01-24 13:33:33 +0000
commit1be176f5a78750e2f0e32470f8c83e3d1643954d (patch)
tree5b6ba41dc94cebac7f65a2bb97355398094964b3 /compiler/optimizing/write_barrier_elimination.cc
parent6799d71854007cb1efe2bb4dcceda9f0f4f0e0a3 (diff)
Revert^5 "Disable write-barrier elimination pass"
This reverts commit 31b949bc4a76e5c6d00a8e18c346f123b5321a1c. Reason for revert: PS1 is reland as-is PS2 has two fixes: * Missed poisoning heap references in a code path * Removed incorrect DCHECK Change-Id: I81b317ddc704dbd8a173f5d5c624dbc69e2d9e60 Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b Test: art/test/testrunner/testrunner.py --target --64 --optimizing -b Both commnands with `export ART_HEAP_POISONING=true` Bug: 301833859 Bug: 310755375 Bug: 260843353
Diffstat (limited to 'compiler/optimizing/write_barrier_elimination.cc')
-rw-r--r--compiler/optimizing/write_barrier_elimination.cc11
1 files changed, 5 insertions, 6 deletions
diff --git a/compiler/optimizing/write_barrier_elimination.cc b/compiler/optimizing/write_barrier_elimination.cc
index 6182125b74..27348cd87d 100644
--- a/compiler/optimizing/write_barrier_elimination.cc
+++ b/compiler/optimizing/write_barrier_elimination.cc
@@ -21,8 +21,8 @@
#include "base/scoped_arena_containers.h"
#include "optimizing/nodes.h"
-// TODO(b/310755375, solanes): Disable WBE while we investigate crashes.
-constexpr bool kWBEEnabled = false;
+// TODO(b/310755375, solanes): Enable WBE with the fixes.
+constexpr bool kWBEEnabled = true;
namespace art HIDDEN {
@@ -58,7 +58,7 @@ class WBEVisitor final : public HGraphVisitor {
DCHECK(it->second->AsInstanceFieldSet()->GetWriteBarrierKind() !=
WriteBarrierKind::kDontEmit);
DCHECK_EQ(it->second->GetBlock(), instruction->GetBlock());
- it->second->AsInstanceFieldSet()->SetWriteBarrierKind(WriteBarrierKind::kEmitNoNullCheck);
+ it->second->AsInstanceFieldSet()->SetWriteBarrierKind(WriteBarrierKind::kEmitBeingReliedOn);
instruction->SetWriteBarrierKind(WriteBarrierKind::kDontEmit);
MaybeRecordStat(stats_, MethodCompilationStat::kRemovedWriteBarrier);
} else {
@@ -84,7 +84,7 @@ class WBEVisitor final : public HGraphVisitor {
DCHECK(it->second->IsStaticFieldSet());
DCHECK(it->second->AsStaticFieldSet()->GetWriteBarrierKind() != WriteBarrierKind::kDontEmit);
DCHECK_EQ(it->second->GetBlock(), instruction->GetBlock());
- it->second->AsStaticFieldSet()->SetWriteBarrierKind(WriteBarrierKind::kEmitNoNullCheck);
+ it->second->AsStaticFieldSet()->SetWriteBarrierKind(WriteBarrierKind::kEmitBeingReliedOn);
instruction->SetWriteBarrierKind(WriteBarrierKind::kDontEmit);
MaybeRecordStat(stats_, MethodCompilationStat::kRemovedWriteBarrier);
} else {
@@ -112,8 +112,7 @@ class WBEVisitor final : public HGraphVisitor {
DCHECK(it->second->IsArraySet());
DCHECK(it->second->AsArraySet()->GetWriteBarrierKind() != WriteBarrierKind::kDontEmit);
DCHECK_EQ(it->second->GetBlock(), instruction->GetBlock());
- // We never skip the null check in ArraySets so that value is already set.
- DCHECK(it->second->AsArraySet()->GetWriteBarrierKind() == WriteBarrierKind::kEmitNoNullCheck);
+ it->second->AsArraySet()->SetWriteBarrierKind(WriteBarrierKind::kEmitBeingReliedOn);
instruction->SetWriteBarrierKind(WriteBarrierKind::kDontEmit);
MaybeRecordStat(stats_, MethodCompilationStat::kRemovedWriteBarrier);
} else {