summaryrefslogtreecommitdiff
path: root/compiler
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 /compiler
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
Diffstat (limited to 'compiler')
-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);
}