Disable passthrough of DefaultInstanceInitializerCode for inlining

Change-Id: Iee38e16dd2597775ef8e4c07485d18e12c568561
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 66df280..b0e0aba 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -236,7 +236,8 @@
     return getMaxLocals(method);
   }
 
-  static DexMethod getParentConstructor(DexClassAndMethod method, DexItemFactory dexItemFactory) {
+  public static DexMethod getParentConstructor(
+      DexClassAndMethod method, DexItemFactory dexItemFactory) {
     return dexItemFactory.createInstanceInitializer(method.getHolder().getSuperType());
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 7b531fb..f695327 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -8,6 +8,8 @@
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.Code;
+import com.android.tools.r8.graph.DefaultInstanceInitializerCode;
+import com.android.tools.r8.graph.DexClassAndMethod;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProgramClass;
@@ -948,7 +950,19 @@
     }
     Code code = method.getDefinition().getCode();
     assert !code.isThrowNullCode();
-    return code.isDefaultInstanceInitializerCode();
+    if (code.isDefaultInstanceInitializerCode()) {
+      // Passthrough unless the parent constructor may be inlineable.
+      if (options.canInitNewInstanceUsingSuperclassConstructor()) {
+        DexMethod parentConstructorReference =
+            DefaultInstanceInitializerCode.getParentConstructor(method, appView.dexItemFactory());
+        DexClassAndMethod parentConstructor = appView.definitionFor(parentConstructorReference);
+        if (parentConstructor != null && parentConstructor.isProgramMethod()) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
   }
 
   // Compute optimization info summary for the current method unless it is pinned