Fix redundant field load elimination invoke direct field put

Change-Id: I0a6f3727a35c86879ea48d37848558ea3b20a166
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
index eb6bddd..ae47cc2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
@@ -372,13 +372,22 @@
                 invoke.getArgument(info.asArgumentInitializationInfo().getArgumentIndex());
             Value object = invoke.getReceiver().getAliasedValue();
             FieldAndObject fieldAndObject = new FieldAndObject(field.field, object);
-            activeState.putNonFinalInstanceField(fieldAndObject, new ExistingValue(value));
+            if (field.isFinal()) {
+              activeState.putFinalInstanceField(fieldAndObject, new ExistingValue(value));
+            } else {
+              activeState.putNonFinalInstanceField(fieldAndObject, new ExistingValue(value));
+            }
           } else if (info.isSingleValue()) {
             SingleValue value = info.asSingleValue();
             if (value.isMaterializableInContext(appView.withLiveness(), method)) {
               Value object = invoke.getReceiver().getAliasedValue();
               FieldAndObject fieldAndObject = new FieldAndObject(field.field, object);
-              activeState.putNonFinalInstanceField(fieldAndObject, new MaterializableValue(value));
+              if (field.isFinal()) {
+                activeState.putFinalInstanceField(fieldAndObject, new MaterializableValue(value));
+              } else {
+                activeState.putNonFinalInstanceField(
+                    fieldAndObject, new MaterializableValue(value));
+              }
             }
           } else {
             assert info.isTypeInitializationInfo();