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);
   }