Enable retargeting of constructor calls after constructor shrinking

Bug: b/274739439
Change-Id: I963292139bbbb60833761ba8c8e59cad190ada48
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
index df58e45..c290822 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalOptions.java
@@ -16,7 +16,7 @@
 
   private final InternalOptions options;
 
-  private boolean enableRetargetingOfConstructorBridgeCalls = false;
+  private boolean enableRetargetingOfConstructorBridgeCalls = true;
   private Set<DexType> noConstructorShrinkingHierarchies;
 
   public RedundantBridgeRemovalOptions(InternalOptions options) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index 93836c1..82ef602 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -56,6 +56,8 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Streams;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
@@ -211,19 +213,26 @@
     assertThat(simpleWithThrowingGetter, isAbsent());
 
     // TODO(b/143389508): add support for lazy init in singleton instance getter.
+    List<String> expectedReferencesInTestSimpleWithLazyInit = new ArrayList<>();
+    if (!parameters.canHaveNonReboundConstructorInvoke()) {
+      Collections.addAll(
+          expectedReferencesInTestSimpleWithLazyInit,
+          "DIRECT: void SimpleWithLazyInit.<init>()",
+          "DIRECT: void SimpleWithLazyInit.<init>()");
+    }
+    Collections.addAll(
+        expectedReferencesInTestSimpleWithLazyInit,
+        "STATIC: String SimpleWithLazyInit.bar(String)",
+        "STATIC: String SimpleWithLazyInit.foo()",
+        "STATIC: String TrivialTestClass.next()",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
+        "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE");
     assertEquals(
-        Lists.newArrayList(
-            "DIRECT: void SimpleWithLazyInit.<init>()",
-            "DIRECT: void SimpleWithLazyInit.<init>()",
-            "STATIC: String SimpleWithLazyInit.bar(String)",
-            "STATIC: String SimpleWithLazyInit.foo()",
-            "STATIC: String TrivialTestClass.next()",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE",
-            "SimpleWithLazyInit SimpleWithLazyInit.INSTANCE"),
+        expectedReferencesInTestSimpleWithLazyInit,
         references(clazz, "testSimpleWithLazyInit", "void"));
 
     ClassSubject simpleWithLazyInit = inspector.clazz(SimpleWithLazyInit.class);
@@ -330,13 +339,19 @@
     assertThat(inspector.clazz(HostConflictMethod.class), isPresent());
     assertThat(inspector.clazz(CandidateConflictMethod.class), isPresent());
 
+    List<String> expectedReferencesInTestConflictField = new ArrayList<>();
+    if (!parameters.canHaveNonReboundConstructorInvoke()) {
+      Collections.addAll(
+          expectedReferencesInTestConflictField,
+          "DIRECT: void movetohost.HostConflictField.<init>()");
+    }
+    Collections.addAll(
+        expectedReferencesInTestConflictField,
+        "STATIC: String movetohost.CandidateConflictField.bar(String)",
+        "STATIC: String movetohost.CandidateConflictField.foo()",
+        "STATIC: String movetohost.MoveToHostTestClass.next()");
     assertEquals(
-        Lists.newArrayList(
-            "DIRECT: void movetohost.HostConflictField.<init>()",
-            "STATIC: String movetohost.CandidateConflictField.bar(String)",
-            "STATIC: String movetohost.CandidateConflictField.foo()",
-            "STATIC: String movetohost.MoveToHostTestClass.next()"),
-        references(clazz, "testConflictField", "void"));
+        expectedReferencesInTestConflictField, references(clazz, "testConflictField", "void"));
 
     assertThat(inspector.clazz(CandidateConflictMethod.class), isPresent());
   }