diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
index 8542763..f689576 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeValueState.java
@@ -182,4 +182,8 @@
     dynamicType = widenedDynamicType;
     return !dynamicType.equals(oldDynamicType);
   }
+
+  public ConcreteClassTypeValueState withDynamicType(DynamicType dynamicType) {
+    return new ConcreteClassTypeValueState(abstractValue, dynamicType, copyInFlow());
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
index 894ad96..2d73c7b 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteReceiverValueState.java
@@ -62,7 +62,7 @@
 
   @Override
   public Nullability getNullability() {
-    return getDynamicType().getNullability();
+    return Nullability.definitelyNotNull();
   }
 
   @Override
@@ -140,4 +140,8 @@
     }
     return !dynamicType.equals(oldDynamicType);
   }
+
+  public ConcreteReceiverValueState withDynamicType(DynamicType dynamicType) {
+    return new ConcreteReceiverValueState(dynamicType, copyInFlow());
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InFlowPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InFlowPropagator.java
index 1a26af0..4404d74 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InFlowPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/InFlowPropagator.java
@@ -193,6 +193,7 @@
   }
 
   private NonEmptyValueState narrowUnknownState(FlowGraphNode node, FlowGraphNode successorNode) {
+    assert node.isUnknown();
     boolean applyNarrowing =
         node.getStaticType().isReferenceType()
             && node.getStaticType().isNotIdenticalTo(successorNode.getStaticType());
@@ -226,11 +227,13 @@
       ConcreteValueState state,
       Set<AbstractFunction> transferFunctions,
       Deque<FlowGraphNode> worklist) {
+    ConcreteValueState stateToPropagate = narrowConcreteState(node, successorNode, state);
     assert !successorNode.isUnknown();
     for (AbstractFunction transferFunction : transferFunctions) {
       FlowGraphStateProvider flowGraphStateProvider =
           FlowGraphStateProvider.create(flowGraph, transferFunction);
-      ValueState transferState = transferFunction.apply(appView, flowGraphStateProvider, state);
+      ValueState transferState =
+          transferFunction.apply(appView, flowGraphStateProvider, stateToPropagate);
       if (transferState.isBottom()) {
         // Nothing to propagate.
       } else if (transferState.isUnknown()) {
@@ -254,6 +257,29 @@
     return false;
   }
 
+  private ConcreteValueState narrowConcreteState(
+      FlowGraphNode node, FlowGraphNode successorNode, ConcreteValueState state) {
+    boolean applyNarrowing =
+        node.getStaticType().isReferenceType()
+            && node.getStaticType().isNotIdenticalTo(successorNode.getStaticType());
+    if (!applyNarrowing) {
+      return state;
+    }
+    if (state.isArrayState()) {
+      // We don't track the dynamic type of array types, currently.
+      return state;
+    }
+    Nullability nullabilityToPropagate = state.asReferenceState().getNullability();
+    TypeElement typeToPropagate =
+        node.getStaticType().toTypeElement(appView, nullabilityToPropagate);
+    DynamicType dynamicTypeToPropagate = DynamicType.create(appView, typeToPropagate);
+    if (state.isClassState()) {
+      return state.asClassState().withDynamicType(dynamicTypeToPropagate);
+    } else {
+      return state.asReceiverState().withDynamicType(dynamicTypeToPropagate);
+    }
+  }
+
   private void postProcessMethodStates(ExecutorService executorService) throws ExecutionException {
     ThreadUtils.processItems(
         appView.appInfo().classes(),
