Do not record in-flow for already unknown method paramters

Change-Id: Ibd8b9dbf25c0b8a5f4bcf0118229ffcca6569010
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index 421271a..8fe8d8c 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -102,6 +102,24 @@
     return virtualRootMethods.get(method.getReference());
   }
 
+  boolean isMethodParameterAlreadyUnknown(MethodParameter methodParameter, ProgramMethod method) {
+    MethodState methodState =
+        methodStates.get(
+            method.getDefinition().belongsToDirectPool() || isMonomorphicVirtualMethod(method)
+                ? method.getReference()
+                : getVirtualRootMethod(method));
+    if (methodState.isPolymorphic()) {
+      methodState = methodState.asPolymorphic().getMethodStateForBounds(DynamicType.unknown());
+    }
+    if (methodState.isMonomorphic()) {
+      ParameterState parameterState =
+          methodState.asMonomorphic().getParameterState(methodParameter.getIndex());
+      return parameterState.isUnknown();
+    }
+    assert methodState.isBottom() || methodState.isUnknown();
+    return methodState.isUnknown();
+  }
+
   boolean isMonomorphicVirtualMethod(ProgramMethod method) {
     boolean isMonomorphicVirtualMethod = monomorphicVirtualMethods.contains(method.getReference());
     assert method.getDefinition().belongsToVirtualPool() || !isMonomorphicVirtualMethod;
@@ -425,6 +443,9 @@
       MethodParameter forwardedParameter =
           methodParameterFactory.create(
               context, argumentRoot.getDefinition().asArgument().getIndex());
+      if (isMethodParameterAlreadyUnknown(forwardedParameter, context)) {
+        return ParameterState.unknown();
+      }
       if (parameterTypeElement.isClassType()) {
         return new ConcreteClassTypeParameterState(forwardedParameter);
       } else if (parameterTypeElement.isArrayType()) {