summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2025-01-17 15:48:21 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2025-01-20 02:36:50 -0800
commitbd36a3bcd6f81ffad4a62cacd0a54711e33fc5f2 (patch)
tree473d7967434e65c3fe6555504005a67426916b0d
parent38f8f04fdc1fda3ab73639ea7409b186a78204b1 (diff)
Set no write barrier for primitive types.
Initialize the value properly, to not rely on an optimization to do it. Helps investigating performance when disabling optimizations in baseline compiler. Test: test.py Change-Id: If3c5d7cd85dd905a10d29081f571c78baae2888c
-rw-r--r--compiler/optimizing/nodes.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index c209ef5450..094bcfa876 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -6146,7 +6146,10 @@ class HInstanceFieldSet final : public HExpression<2> {
declaring_class_def_index,
dex_file) {
SetPackedFlag<kFlagValueCanBeNull>(true);
- SetPackedField<WriteBarrierKindField>(WriteBarrierKind::kEmitNotBeingReliedOn);
+ SetPackedField<WriteBarrierKindField>(
+ field_type == DataType::Type::kReference
+ ? WriteBarrierKind::kEmitNotBeingReliedOn
+ : WriteBarrierKind::kDontEmit);
SetRawInputAt(0, object);
SetRawInputAt(1, value);
}
@@ -6313,7 +6316,10 @@ class HArraySet final : public HExpression<3> {
SetPackedFlag<kFlagNeedsTypeCheck>(value->GetType() == DataType::Type::kReference);
SetPackedFlag<kFlagValueCanBeNull>(true);
SetPackedFlag<kFlagStaticTypeOfArrayIsObjectArray>(false);
- SetPackedField<WriteBarrierKindField>(WriteBarrierKind::kEmitNotBeingReliedOn);
+ SetPackedField<WriteBarrierKindField>(
+ value->GetType() == DataType::Type::kReference
+ ? WriteBarrierKind::kEmitNotBeingReliedOn
+ : WriteBarrierKind::kDontEmit);
SetRawInputAt(0, array);
SetRawInputAt(1, index);
SetRawInputAt(2, value);
@@ -7272,7 +7278,10 @@ class HStaticFieldSet final : public HExpression<2> {
declaring_class_def_index,
dex_file) {
SetPackedFlag<kFlagValueCanBeNull>(true);
- SetPackedField<WriteBarrierKindField>(WriteBarrierKind::kEmitNotBeingReliedOn);
+ SetPackedField<WriteBarrierKindField>(
+ field_type == DataType::Type::kReference
+ ? WriteBarrierKind::kEmitNotBeingReliedOn
+ : WriteBarrierKind::kDontEmit);
SetRawInputAt(0, cls);
SetRawInputAt(1, value);
}