Fix SplitBranch with invalid phi
-Regress Tivi size by 0.007%
Bug: b/343136777
Change-Id: Ie42724bf73b57ebbaa5145a054cce9e6bae06f56
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
index e72d7ec..c73dd4e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
@@ -179,7 +179,8 @@
if (isNumberAgainstConstNumberIf(theIf)
&& nonConstNumberOperand.isPhi()
&& nonConstNumberOperand.hasSingleUniqueUser()
- && !nonConstNumberOperand.hasPhiUsers()) {
+ && !nonConstNumberOperand.hasPhiUsers()
+ && nonConstNumberOperand.getBlock() == theIf.getBlock()) {
candidates.add(block);
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ifs/Regress343136777Test.java b/src/test/java/com/android/tools/r8/ir/optimize/ifs/Regress343136777Test.java
index 2adf213..1b8c4ce 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ifs/Regress343136777Test.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ifs/Regress343136777Test.java
@@ -4,9 +4,6 @@
package com.android.tools.r8.ir.optimize.ifs;
-import static org.junit.Assert.assertThrows;
-
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -45,32 +42,24 @@
@Test
public void testD8Release() throws Exception {
parameters.assumeDexRuntime();
- // TODO(b/343136777: This should not fail.
- assertThrows(
- CompilationFailedException.class,
- () ->
- testForD8(parameters.getBackend())
- .addProgramClasses(TestClass.class)
- .setMinApi(parameters)
- .release()
- .compile()
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(EXPECTED_OUTPUT));
+ testForD8(parameters.getBackend())
+ .addProgramClasses(TestClass.class)
+ .setMinApi(parameters)
+ .release()
+ .compile()
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
}
@Test
public void testR8() throws Exception {
- // TODO(b/343136777: This should not fail.
- assertThrows(
- CompilationFailedException.class,
- () ->
- testForR8(parameters.getBackend())
- .addProgramClasses(TestClass.class)
- .setMinApi(parameters)
- .addKeepMainRule(TestClass.class)
- .compile()
- .run(parameters.getRuntime(), TestClass.class)
- .assertSuccessWithOutput(EXPECTED_OUTPUT));
+ testForR8(parameters.getBackend())
+ .addProgramClasses(TestClass.class)
+ .setMinApi(parameters)
+ .addKeepMainRule(TestClass.class)
+ .compile()
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
}
static class TestClass {