diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/DynamicTypeWithUpperBound.java b/src/main/java/com/android/tools/r8/ir/analysis/type/DynamicTypeWithUpperBound.java
index 57af3a5..fa985fa 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/DynamicTypeWithUpperBound.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/DynamicTypeWithUpperBound.java
@@ -38,15 +38,10 @@
 
   public static DynamicTypeWithUpperBound create(
       AppView<AppInfoWithLiveness> appView, TypeElement dynamicUpperBoundType) {
-    ClassTypeElement dynamicLowerBoundType = null;
-    if (dynamicUpperBoundType.isClassType()) {
-      ClassTypeElement dynamicUpperBoundClassType = dynamicUpperBoundType.asClassType();
-      DexClass dynamicUpperBoundClass =
-          appView.definitionFor(dynamicUpperBoundClassType.getClassType());
-      if (dynamicUpperBoundClass != null && dynamicUpperBoundClass.isEffectivelyFinal(appView)) {
-        dynamicLowerBoundType = dynamicUpperBoundClassType;
-      }
-    }
+    ClassTypeElement dynamicLowerBoundType =
+        isEffectivelyFinal(appView, dynamicUpperBoundType)
+            ? dynamicUpperBoundType.asClassType()
+            : null;
     return create(appView, dynamicUpperBoundType, dynamicLowerBoundType);
   }
 
@@ -86,6 +81,15 @@
     return create(appView, dynamicUpperBoundType, dynamicLowerBoundType);
   }
 
+  private static boolean isEffectivelyFinal(AppView<?> appView, TypeElement type) {
+    if (type.isClassType()) {
+      ClassTypeElement classType = type.asClassType();
+      DexClass clazz = appView.definitionFor(classType.getClassType());
+      return clazz != null && clazz.isEffectivelyFinal(appView);
+    }
+    return false;
+  }
+
   @Override
   public boolean hasDynamicUpperBoundType() {
     return true;
@@ -157,7 +161,10 @@
       AppView<AppInfoWithLiveness> appView, DynamicTypeWithUpperBound dynamicType) {
     TypeElement upperBoundType =
         getDynamicUpperBoundType().join(dynamicType.getDynamicUpperBoundType(), appView);
-    ClassTypeElement lowerBoundType = meetDynamicLowerBound(appView, dynamicType);
+    ClassTypeElement lowerBoundType =
+        isEffectivelyFinal(appView, upperBoundType)
+            ? upperBoundType.asClassType()
+            : meetDynamicLowerBound(appView, dynamicType);
     if (upperBoundType.equals(getDynamicUpperBoundType())
         && Objects.equals(lowerBoundType, getDynamicLowerBoundType())) {
       return this;
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
index e65e4b8..897aaa8 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.MethodCollection;
+import com.android.tools.r8.graph.PrunedItems;
 import com.android.tools.r8.graph.RewrittenPrototypeDescription;
 import com.android.tools.r8.graph.TreeFixerBase;
 import com.android.tools.r8.ir.optimize.info.MethodOptimizationInfoFixer;
@@ -100,6 +101,7 @@
   }
 
   private void fixupOptimizationInfos(ExecutorService executorService) throws ExecutionException {
+    PrunedItems prunedItems = PrunedItems.empty(appView.app());
     getSimpleFeedback()
         .fixupOptimizationInfos(
             appView,
@@ -116,7 +118,9 @@
                   DexEncodedMethod method, MutableMethodOptimizationInfo optimizationInfo) {
                 // Fixup the return value in case the method returns a field that had its signature
                 // changed.
-                optimizationInfo.fixupAbstractReturnValue(appView, graphLens);
+                optimizationInfo
+                    .fixupAbstractReturnValue(appView, graphLens)
+                    .fixupInstanceInitializerInfo(appView, graphLens, prunedItems);
 
                 // Rewrite the optimization info to account for method signature changes.
                 if (graphLens.hasPrototypeChanges(method.getReference())) {
