ART: Fix condition for StoreNeedsWriteBarrier
Codegen's StoreNeedsWriteBarrier assumed nulls are represented as
integer constants and generated a barrier when not needed. This patch
fixes the bug.
Change-Id: I79247f1009b1fe6f24dba0d57e846ecc55806d4d
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h
index 667f686..ecaa6f0 100644
--- a/compiler/optimizing/code_generator.h
+++ b/compiler/optimizing/code_generator.h
@@ -246,12 +246,9 @@
void EmitParallelMoves(Location from1, Location to1, Location from2, Location to2);
static bool StoreNeedsWriteBarrier(Primitive::Type type, HInstruction* value) {
- if (kIsDebugBuild) {
- if (type == Primitive::kPrimNot && value->IsIntConstant()) {
- CHECK_EQ(value->AsIntConstant()->GetValue(), 0);
- }
- }
- return type == Primitive::kPrimNot && !value->IsIntConstant();
+ // Check that null value is not represented as an integer constant.
+ DCHECK(type != Primitive::kPrimNot || !value->IsIntConstant());
+ return type == Primitive::kPrimNot && !value->IsNullConstant();
}
void AddAllocatedRegister(Location location) {