Leverage Instruction.getAbstractValue() from Value.getAbstractValue()

Change-Id: I7cba428eaf454ad63be730ad5796d96a33a68e51
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
index d9f4e2d..0605623 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
@@ -109,7 +109,7 @@
       if (isConstantArrayThroughoutMethod(root, assumedNotToDependOnEnvironment)) {
         return false;
       }
-      if (root.getAbstractValue(appView).isSingleEnumValue()) {
+      if (root.getAbstractValue(appView, context).isSingleEnumValue()) {
         return false;
       }
       if (isNewInstanceWithoutEnvironmentDependentFields(root, assumedNotToDependOnEnvironment)) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index c7aeff1..f9ca31d 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DebugLocalInfo;
 import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.analysis.type.ClassTypeLatticeElement;
@@ -847,7 +846,7 @@
     return definition.isOutConstant() && !hasLocalInfo();
   }
 
-  public AbstractValue getAbstractValue(AppView<?> appView) {
+  public AbstractValue getAbstractValue(AppView<?> appView, DexType context) {
     if (!appView.enableWholeProgramOptimizations()) {
       return UnknownValue.getInstance();
     }
@@ -857,15 +856,7 @@
       return UnknownValue.getInstance();
     }
 
-    if (root.definition.isFieldGet()) {
-      FieldInstruction fieldGet = root.definition.asFieldInstruction();
-      DexEncodedField field = appView.appInfo().resolveField(fieldGet.getField());
-      if (field != null) {
-        return field.getOptimizationInfo().getAbstractValue();
-      }
-    }
-
-    return UnknownValue.getInstance();
+    return root.definition.getAbstractValue(appView, context);
   }
 
   public boolean isPhi() {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index e1c583d..2c04604 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -2542,9 +2542,10 @@
               }
             }
           } else {
-            AbstractValue abstractValue = lhs.getAbstractValue(appView);
+            DexType context = code.method.method.holder;
+            AbstractValue abstractValue = lhs.getAbstractValue(appView, context);
             if (abstractValue.isSingleEnumValue()) {
-              AbstractValue otherAbstractValue = rhs.getAbstractValue(appView);
+              AbstractValue otherAbstractValue = rhs.getAbstractValue(appView, context);
               if (abstractValue == otherAbstractValue) {
                 simplifyIfWithKnownCondition(code, block, theIf, 0);
               } else if (otherAbstractValue.isSingleEnumValue()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index f53d6d8..1382317 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -131,7 +131,7 @@
       }
       // Only canonicalize enum values. This is only OK if the instruction cannot have side effects.
       if (current.isStaticGet()) {
-        if (!current.outValue().getAbstractValue(appView).isSingleEnumValue()) {
+        if (!current.outValue().getAbstractValue(appView, context).isSingleEnumValue()) {
           continue;
         }
         if (current.instructionMayHaveSideEffects(appView, context)) {