Binop rewriter only used when relevant Bug: b/284304606 Change-Id: I2fbb2123bcbdc8d1309a8f9985af1a3ab70a67b8
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java index a84c292..70c64f1 100644 --- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java +++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
@@ -245,7 +245,9 @@ @Override protected boolean shouldRewriteCode(IRCode code) { - return options.testing.enableBinopOptimization && !isDebugMode(code.context()); + return options.testing.enableBinopOptimization + && !isDebugMode(code.context()) + && code.metadata().mayHaveArithmeticOrLogicalBinop(); } @Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java index 2238b82..96b52dc 100644 --- a/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java +++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/NaturalIntLoopRemover.java
@@ -58,7 +58,8 @@ @Override protected boolean shouldRewriteCode(IRCode code) { - return appView.options().enableLoopUnrolling; + // This is relevant only if a loop may be present, which implies at least 4 blocks. + return appView.options().enableLoopUnrolling && code.getBlocks().size() >= 4; } private boolean isComparisonBlock(BasicBlock comparisonBlockCandidate) {
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 e4bac3e..2defd76 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
@@ -40,7 +40,8 @@ @Override protected boolean shouldRewriteCode(IRCode code) { - return true; + // This is relevant only if there is a diamond followed by an if which is a minimum of 6 blocks. + return code.getBlocks().size() >= 6; } /**