GVN final fields even with side effects.
Two accesses of a final field can be GVN'ed even if there are
side effects between them.
Change-Id: I04495ae83c7858f4216b083ad1c29851954320ad
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 3fe23e1..51c68e9 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -2993,8 +2993,10 @@
HInstanceFieldGet(HInstruction* value,
Primitive::Type field_type,
MemberOffset field_offset,
+ bool is_final,
bool is_volatile)
- : HExpression(field_type, SideEffects::DependsOnSomething()),
+ : HExpression(field_type,
+ is_final ? SideEffects::None() : SideEffects::DependsOnSomething()),
field_info_(field_offset, field_type, is_volatile) {
SetRawInputAt(0, value);
}
@@ -3404,8 +3406,10 @@
HStaticFieldGet(HInstruction* cls,
Primitive::Type field_type,
MemberOffset field_offset,
+ bool is_final,
bool is_volatile)
- : HExpression(field_type, SideEffects::DependsOnSomething()),
+ : HExpression(field_type,
+ is_final ? SideEffects::None() : SideEffects::DependsOnSomething()),
field_info_(field_offset, field_type, is_volatile) {
SetRawInputAt(0, cls);
}