Add flag for disabling 2addr hints for logical binop Change-Id: I1e62174f361474a6de03f540b3514e4aadaba45f
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java index 95a44fb..4e57d1c 100644 --- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java +++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -1464,7 +1464,11 @@ return; } Value value = unhandledInterval.getValue(); - if (value.isDefinedByInstructionSatisfying(i -> i.isArithmeticBinop() || i.isLogicalBinop())) { + if (value.isDefinedByInstructionSatisfying( + i -> + i.isArithmeticBinop() + || (options().getTestingOptions().enable2AddrHintsForLogicalBinop + && i.isLogicalBinop()))) { Binop binop = value.getDefinition().asBinop(); Value left = binop.leftValue(); if (left.getLiveIntervals() != null && !left.getLiveIntervals().overlaps(unhandledInterval)) {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java index a33e4a9..e08186d 100644 --- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java +++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -2378,6 +2378,9 @@ public boolean enableBranchDiamondInverter = SystemPropertyUtils.parseSystemPropertyOrDefault( "com.android.tools.r8.enableBranchDiamondInverter", true); + public boolean enable2AddrHintsForLogicalBinop = + SystemPropertyUtils.parseSystemPropertyOrDefault( + "com.android.tools.r8.enable2AddrHintsForLogicalBinop", true); public boolean enableClassToDexDistributionRefinement(InternalOptions options) { if (options.debug && !enableClassToDexDistributionRefinementInDebugMode) {