diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
index f587ee6..e934e3e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
@@ -225,10 +225,25 @@
       }
     }
 
-    // Ensure all blocks for users of the array are dominated by the last array-put's block.
+    // Ensure that the array-put assigning the highest index is dominated by all other array-puts.
     ArrayPut lastArrayPut = ArrayUtils.last(arrayValues.getArrayPutsByIndex());
     BasicBlock lastArrayPutBlock = lastArrayPut.getBlock();
     BasicBlock subgraphEntryBlock = arrayValue.definition.getBlock();
+    for (ArrayPut arrayPut : arrayValues.getArrayPutsByIndex()) {
+      if (arrayPut.getBlock() != lastArrayPut.getBlock()
+          && !DominatorChecker.check(subgraphEntryBlock, lastArrayPutBlock, arrayPut.getBlock())) {
+        return false;
+      }
+    }
+    for (Instruction instruction = lastArrayPut.getBlock().getLastInstruction();
+        instruction != lastArrayPut;
+        instruction = instruction.getPrev()) {
+      if (instruction.isArrayPut() && instruction.asArrayPut().array() == arrayValue) {
+        return false;
+      }
+    }
+
+    // Ensure all blocks for users of the array are dominated by the last array-put's block.
     for (BasicBlock usageBlock : usageBlocks) {
       if (!DominatorChecker.check(subgraphEntryBlock, usageBlock, lastArrayPutBlock)) {
         return false;
diff --git a/src/test/java/com/android/tools/r8/B391417819Repro.java b/src/test/java/com/android/tools/r8/B391417819Repro.java
index c7f0522..acac488 100644
--- a/src/test/java/com/android/tools/r8/B391417819Repro.java
+++ b/src/test/java/com/android/tools/r8/B391417819Repro.java
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-import static com.android.tools.r8.utils.codeinspector.AssertUtils.assertFailsCompilation;
-
 import java.util.Arrays;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -35,26 +33,22 @@
   @Test
   public void testD8() throws Exception {
     parameters.assumeDexRuntime();
-    assertFailsCompilation(
-        () ->
-            testForD8(parameters.getBackend())
-                .addInnerClasses(getClass())
-                .release()
-                .setMinApi(parameters)
-                .run(parameters.getRuntime(), TestClass.class)
-                .assertSuccessWithOutputLines("[0, 1]"));
+    testForD8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .release()
+        .setMinApi(parameters)
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutputLines("[0, 1]");
   }
 
   @Test
   public void testR8() throws Exception {
-    assertFailsCompilation(
-        () ->
-            testForR8(parameters.getBackend())
-                .addInnerClasses(getClass())
-                .addKeepMainRule(TestClass.class)
-                .setMinApi(parameters)
-                .run(parameters.getRuntime(), TestClass.class)
-                .assertSuccessWithOutputLines("[0, 1]"));
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .addKeepMainRule(TestClass.class)
+        .setMinApi(parameters)
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutputLines("[0, 1]");
   }
 
   static class TestClass {
