Revert "Minor cleanup of simple inlining constraints"
This reverts commit 1aa636e0211e3546cd05cbdc17699b155b6db604.
Reason for revert: Breakages
Change-Id: I3b4080ca65f4c022a5ba40f8a2d45455e5a9b480
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanFalseSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanFalseSimpleInliningConstraint.java
new file mode 100644
index 0000000..2c88a60
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanFalseSimpleInliningConstraint.java
@@ -0,0 +1,48 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.analysis.inlining;
+
+import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.Value;
+import it.unimi.dsi.fastutil.ints.IntList;
+
+/** Constraint that is satisfied if a specific argument is always false. */
+public class BooleanFalseSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
+
+ private BooleanFalseSimpleInliningConstraint(int argumentIndex) {
+ super(argumentIndex);
+ }
+
+ static BooleanFalseSimpleInliningConstraint create(
+ int argumentIndex, SimpleInliningConstraintFactory witness) {
+ assert witness != null;
+ return new BooleanFalseSimpleInliningConstraint(argumentIndex);
+ }
+
+ @Override
+ public boolean isBooleanFalse() {
+ return true;
+ }
+
+ @Override
+ public boolean isSatisfied(InvokeMethod invoke) {
+ Value argument = getArgument(invoke);
+ assert argument.getType().isInt();
+ return argument.isConstBoolean(false);
+ }
+
+ @Override
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createBooleanFalseConstraint(getArgumentIndex() - 1);
+ }
+
+ @Override
+ public SimpleInliningConstraint rewrittenWithUnboxedArguments(
+ IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
+ return this;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanTrueSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanTrueSimpleInliningConstraint.java
new file mode 100644
index 0000000..46c29b0
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/BooleanTrueSimpleInliningConstraint.java
@@ -0,0 +1,48 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.analysis.inlining;
+
+import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.Value;
+import it.unimi.dsi.fastutil.ints.IntList;
+
+/** Constraint that is satisfied if a specific argument is always true. */
+public class BooleanTrueSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
+
+ private BooleanTrueSimpleInliningConstraint(int argumentIndex) {
+ super(argumentIndex);
+ }
+
+ static BooleanTrueSimpleInliningConstraint create(
+ int argumentIndex, SimpleInliningConstraintFactory witness) {
+ assert witness != null;
+ return new BooleanTrueSimpleInliningConstraint(argumentIndex);
+ }
+
+ @Override
+ public boolean isBooleanTrue() {
+ return true;
+ }
+
+ @Override
+ public boolean isSatisfied(InvokeMethod invoke) {
+ Value argument = getArgument(invoke);
+ assert argument.getType().isInt();
+ return argument.isConstBoolean(true);
+ }
+
+ @Override
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createBooleanTrueConstraint(getArgumentIndex() - 1);
+ }
+
+ @Override
+ public SimpleInliningConstraint rewrittenWithUnboxedArguments(
+ IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
+ return this;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToBooleanSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToBooleanSimpleInliningConstraint.java
deleted file mode 100644
index 4a98c53..0000000
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToBooleanSimpleInliningConstraint.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.analysis.inlining;
-
-import com.android.tools.r8.ir.code.Instruction;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.code.Value;
-import it.unimi.dsi.fastutil.ints.IntList;
-
-/** Constraint that is satisfied if a specific argument is always true. */
-public class EqualToBooleanSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
-
- private final boolean value;
-
- private EqualToBooleanSimpleInliningConstraint(int argumentIndex, boolean value) {
- super(argumentIndex);
- this.value = value;
- }
-
- static EqualToBooleanSimpleInliningConstraint create(
- int argumentIndex, boolean value, SimpleInliningConstraintFactory witness) {
- assert witness != null;
- return new EqualToBooleanSimpleInliningConstraint(argumentIndex, value);
- }
-
- @Override
- public boolean isSatisfied(InvokeMethod invoke) {
- Value argumentRoot = getArgument(invoke).getAliasedValue();
- return argumentRoot.isDefinedByInstructionSatisfying(Instruction::isConstNumber)
- && argumentRoot.getDefinition().asConstNumber().getBooleanValue() == value;
- }
-
- @Override
- public SimpleInliningConstraint rewrittenWithUnboxedArguments(
- IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
- return this;
- }
-
- @Override
- SimpleInliningArgumentConstraint withArgumentIndex(
- int argumentIndex, SimpleInliningConstraintFactory factory) {
- return factory.createEqualToTrueConstraint(argumentIndex);
- }
-}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToNumberSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToNumberSimpleInliningConstraint.java
index 236e57b..a321670 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToNumberSimpleInliningConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/EqualToNumberSimpleInliningConstraint.java
@@ -4,10 +4,18 @@
package com.android.tools.r8.ir.analysis.inlining;
-public class EqualToNumberSimpleInliningConstraint extends NumberSimpleInliningConstraint {
+import com.android.tools.r8.ir.code.Instruction;
+import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.Value;
+import it.unimi.dsi.fastutil.ints.IntList;
+
+public class EqualToNumberSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
+
+ private final long rawValue;
private EqualToNumberSimpleInliningConstraint(int argumentIndex, long rawValue) {
- super(argumentIndex, rawValue);
+ super(argumentIndex);
+ this.rawValue = rawValue;
}
static EqualToNumberSimpleInliningConstraint create(
@@ -17,13 +25,22 @@
}
@Override
- boolean test(long argumentValue) {
- return argumentValue == getRawValue();
+ public boolean isSatisfied(InvokeMethod invoke) {
+ Value argumentRoot = getArgument(invoke).getAliasedValue();
+ return argumentRoot.isDefinedByInstructionSatisfying(Instruction::isConstNumber)
+ && argumentRoot.getDefinition().asConstNumber().getRawValue() == rawValue;
}
@Override
- SimpleInliningArgumentConstraint withArgumentIndex(
- int argumentIndex, SimpleInliningConstraintFactory factory) {
- return factory.createEqualToNumberConstraint(argumentIndex, getRawValue());
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createNumberConstraint(getArgumentIndex() - 1, rawValue);
+ }
+
+ @Override
+ public SimpleInliningConstraint rewrittenWithUnboxedArguments(
+ IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
+ return this;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotEqualToNumberSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotEqualToNumberSimpleInliningConstraint.java
index 5f83db7..4739231 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotEqualToNumberSimpleInliningConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotEqualToNumberSimpleInliningConstraint.java
@@ -4,10 +4,18 @@
package com.android.tools.r8.ir.analysis.inlining;
-public class NotEqualToNumberSimpleInliningConstraint extends NumberSimpleInliningConstraint {
+import com.android.tools.r8.ir.code.Instruction;
+import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.Value;
+import it.unimi.dsi.fastutil.ints.IntList;
+
+public class NotEqualToNumberSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
+
+ private final long rawValue;
private NotEqualToNumberSimpleInliningConstraint(int argumentIndex, long rawValue) {
- super(argumentIndex, rawValue);
+ super(argumentIndex);
+ this.rawValue = rawValue;
}
static NotEqualToNumberSimpleInliningConstraint create(
@@ -17,13 +25,22 @@
}
@Override
- boolean test(long argumentValue) {
- return argumentValue != getRawValue();
+ public boolean isSatisfied(InvokeMethod invoke) {
+ Value argumentRoot = getArgument(invoke).getAliasedValue();
+ return argumentRoot.isDefinedByInstructionSatisfying(Instruction::isConstNumber)
+ && argumentRoot.getDefinition().asConstNumber().getRawValue() != rawValue;
}
@Override
- SimpleInliningArgumentConstraint withArgumentIndex(
- int argumentIndex, SimpleInliningConstraintFactory factory) {
- return factory.createNotEqualToNumberConstraint(argumentIndex, getRawValue());
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createNotNumberConstraint(getArgumentIndex() - 1, rawValue);
+ }
+
+ @Override
+ public SimpleInliningConstraint rewrittenWithUnboxedArguments(
+ IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
+ return this;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotNullSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotNullSimpleInliningConstraint.java
new file mode 100644
index 0000000..00288f8
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NotNullSimpleInliningConstraint.java
@@ -0,0 +1,51 @@
+// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.ir.analysis.inlining;
+
+import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.Value;
+import it.unimi.dsi.fastutil.ints.IntList;
+
+/** Constraint that is satisfied if a specific argument is always non-null. */
+public class NotNullSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
+
+ private NotNullSimpleInliningConstraint(int argumentIndex) {
+ super(argumentIndex);
+ }
+
+ static NotNullSimpleInliningConstraint create(
+ int argumentIndex, SimpleInliningConstraintFactory witness) {
+ assert witness != null;
+ return new NotNullSimpleInliningConstraint(argumentIndex);
+ }
+
+ @Override
+ public boolean isNotNull() {
+ return true;
+ }
+
+ @Override
+ public boolean isSatisfied(InvokeMethod invoke) {
+ Value argument = getArgument(invoke);
+ assert argument.getType().isReferenceType() : invoke;
+ return argument.isNeverNull();
+ }
+
+ @Override
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createNotNullConstraint(getArgumentIndex() - 1);
+ }
+
+ @Override
+ public SimpleInliningConstraint rewrittenWithUnboxedArguments(
+ IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
+ if (unboxedArgumentIndices.contains(getArgumentIndex())) {
+ return factory.createNotNumberConstraint(getArgumentIndex(), 0);
+ }
+ return this;
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NullSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NullSimpleInliningConstraint.java
index 55c442e..5a0d3cf 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NullSimpleInliningConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NullSimpleInliningConstraint.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.ir.analysis.inlining;
-import com.android.tools.r8.ir.analysis.type.Nullability;
-import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.InvokeMethod;
import com.android.tools.r8.ir.code.Value;
import it.unimi.dsi.fastutil.ints.IntList;
@@ -13,43 +11,45 @@
/** Constraint that is satisfied if a specific argument is always null. */
public class NullSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
- private final Nullability nullability;
-
- private NullSimpleInliningConstraint(int argumentIndex, Nullability nullability) {
+ private NullSimpleInliningConstraint(int argumentIndex) {
super(argumentIndex);
- assert nullability.isDefinitelyNull() || nullability.isDefinitelyNotNull();
- this.nullability = nullability;
}
static NullSimpleInliningConstraint create(
- int argumentIndex, Nullability nullability, SimpleInliningConstraintFactory witness) {
+ int argumentIndex, SimpleInliningConstraintFactory witness) {
assert witness != null;
- return new NullSimpleInliningConstraint(argumentIndex, nullability);
+ return new NullSimpleInliningConstraint(argumentIndex);
}
@Override
- public final boolean isSatisfied(InvokeMethod invoke) {
+ public boolean isNull() {
+ return true;
+ }
+
+ @Override
+ public boolean isSatisfied(InvokeMethod invoke) {
// Take the root value to also deal with the following case, which may happen in dead code,
// where v1 is actually guaranteed to be null, despite the value's type being non-null:
// v0 <- ConstNumber 0
// v1 <- AssumeNotNull v0
Value argumentRoot = getArgument(invoke).getAliasedValue();
- TypeElement argumentType = argumentRoot.getType();
- assert argumentType.isReferenceType();
- return argumentType.nullability() == nullability;
+ assert argumentRoot.getType().isReferenceType();
+ return argumentRoot.getType().isDefinitelyNull();
+ }
+
+ @Override
+ public SimpleInliningConstraint fixupAfterRemovingThisParameter(
+ SimpleInliningConstraintFactory factory) {
+ assert getArgumentIndex() > 0;
+ return factory.createNullConstraint(getArgumentIndex() - 1);
}
@Override
public SimpleInliningConstraint rewrittenWithUnboxedArguments(
IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
- return unboxedArgumentIndices.contains(getArgumentIndex())
- ? factory.createEqualToNumberConstraint(getArgumentIndex(), 0)
- : this;
- }
-
- @Override
- SimpleInliningArgumentConstraint withArgumentIndex(
- int argumentIndex, SimpleInliningConstraintFactory factory) {
- return factory.createNullConstraint(argumentIndex, nullability);
+ if (unboxedArgumentIndices.contains(getArgumentIndex())) {
+ return factory.createNumberConstraint(getArgumentIndex(), 0);
+ }
+ return this;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NumberSimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/NumberSimpleInliningConstraint.java
deleted file mode 100644
index 4f6ee2c..0000000
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/NumberSimpleInliningConstraint.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.ir.analysis.inlining;
-
-import com.android.tools.r8.ir.code.Instruction;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.code.Value;
-import it.unimi.dsi.fastutil.ints.IntList;
-
-public abstract class NumberSimpleInliningConstraint extends SimpleInliningArgumentConstraint {
-
- private final long rawValue;
-
- NumberSimpleInliningConstraint(int argumentIndex, long rawValue) {
- super(argumentIndex);
- this.rawValue = rawValue;
- }
-
- long getRawValue() {
- return rawValue;
- }
-
- @Override
- public final boolean isSatisfied(InvokeMethod invoke) {
- Value argumentRoot = getArgument(invoke).getAliasedValue();
- return argumentRoot.isDefinedByInstructionSatisfying(Instruction::isConstNumber)
- && test(argumentRoot.getDefinition().asConstNumber().getRawValue());
- }
-
- abstract boolean test(long argumentValue);
-
- @Override
- public final SimpleInliningConstraint rewrittenWithUnboxedArguments(
- IntList unboxedArgumentIndices, SimpleInliningConstraintFactory factory) {
- return this;
- }
-}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningArgumentConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningArgumentConstraint.java
index 78bf329..749d6f4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningArgumentConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningArgumentConstraint.java
@@ -15,13 +15,6 @@
this.argumentIndex = argumentIndex;
}
- @Override
- public final SimpleInliningConstraint fixupAfterRemovingThisParameter(
- SimpleInliningConstraintFactory factory) {
- assert getArgumentIndex() > 0;
- return withArgumentIndex(getArgumentIndex() - 1, factory);
- }
-
Value getArgument(InvokeMethod invoke) {
return invoke.getArgument(argumentIndex);
}
@@ -34,7 +27,4 @@
public boolean isArgumentConstraint() {
return true;
}
-
- abstract SimpleInliningArgumentConstraint withArgumentIndex(
- int argumentIndex, SimpleInliningConstraintFactory factory);
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
index c9978cb..82c3f7d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraint.java
@@ -19,6 +19,14 @@
return false;
}
+ public boolean isBooleanFalse() {
+ return false;
+ }
+
+ public boolean isBooleanTrue() {
+ return false;
+ }
+
public boolean isConjunction() {
return false;
}
@@ -39,6 +47,14 @@
return false;
}
+ public boolean isNotNull() {
+ return false;
+ }
+
+ public boolean isNull() {
+ return false;
+ }
+
public abstract boolean isSatisfied(InvokeMethod invoke);
public final SimpleInliningConstraint meet(SimpleInliningConstraint other) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
index 3d74f82..6d79b82 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
@@ -173,15 +173,15 @@
case EQ:
if (isZeroTest) {
if (argumentType.isReferenceType()) {
- return factory.createEqualToNullConstraint(argumentIndex);
+ return factory.createNullConstraint(argumentIndex);
}
if (argumentType.isBooleanType()) {
- return factory.createEqualToFalseConstraint(argumentIndex);
+ return factory.createBooleanFalseConstraint(argumentIndex);
}
} else if (argumentType.isPrimitiveType()) {
OptionalLong rawValue = getRawNumberValue(otherOperand);
if (rawValue.isPresent()) {
- return factory.createEqualToNumberConstraint(argumentIndex, rawValue.getAsLong());
+ return factory.createNumberConstraint(argumentIndex, rawValue.getAsLong());
}
}
return NeverSimpleInliningConstraint.getInstance();
@@ -189,15 +189,15 @@
case NE:
if (isZeroTest) {
if (argumentType.isReferenceType()) {
- return factory.createNotEqualToNullConstraint(argumentIndex);
+ return factory.createNotNullConstraint(argumentIndex);
}
if (argumentType.isBooleanType()) {
- return factory.createEqualToTrueConstraint(argumentIndex);
+ return factory.createBooleanTrueConstraint(argumentIndex);
}
} else if (argumentType.isPrimitiveType()) {
OptionalLong rawValue = getRawNumberValue(otherOperand);
if (rawValue.isPresent()) {
- return factory.createNotEqualToNumberConstraint(argumentIndex, rawValue.getAsLong());
+ return factory.createNotNumberConstraint(argumentIndex, rawValue.getAsLong());
}
}
return NeverSimpleInliningConstraint.getInstance();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintFactory.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintFactory.java
index 5b60ccd..ed3cd55 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintFactory.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintFactory.java
@@ -4,10 +4,6 @@
package com.android.tools.r8.ir.analysis.inlining;
-import static com.android.tools.r8.ir.analysis.type.Nullability.definitelyNotNull;
-import static com.android.tools.r8.ir.analysis.type.Nullability.definitelyNull;
-
-import com.android.tools.r8.ir.analysis.type.Nullability;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
@@ -15,81 +11,78 @@
public class SimpleInliningConstraintFactory {
// Immutable argument constraints for low argument indices to avoid overhead of ConcurrentHashMap.
- private final EqualToBooleanSimpleInliningConstraint[] lowEqualToFalseConstraints =
- new EqualToBooleanSimpleInliningConstraint[5];
- private final EqualToBooleanSimpleInliningConstraint[] lowEqualToTrueConstraints =
- new EqualToBooleanSimpleInliningConstraint[5];
- private final NullSimpleInliningConstraint[] lowNotEqualToNullConstraints =
- new NullSimpleInliningConstraint[5];
- private final NullSimpleInliningConstraint[] lowEqualToNullConstraints =
+ private final BooleanFalseSimpleInliningConstraint[] lowBooleanFalseConstraints =
+ new BooleanFalseSimpleInliningConstraint[5];
+ private final BooleanTrueSimpleInliningConstraint[] lowBooleanTrueConstraints =
+ new BooleanTrueSimpleInliningConstraint[5];
+ private final NotNullSimpleInliningConstraint[] lowNotNullConstraints =
+ new NotNullSimpleInliningConstraint[5];
+ private final NullSimpleInliningConstraint[] lowNullConstraints =
new NullSimpleInliningConstraint[5];
// Argument constraints for high argument indices.
- private final Map<Integer, EqualToBooleanSimpleInliningConstraint> highEqualToFalseConstraints =
+ private final Map<Integer, BooleanFalseSimpleInliningConstraint> highBooleanFalseConstraints =
new ConcurrentHashMap<>();
- private final Map<Integer, EqualToBooleanSimpleInliningConstraint> highEqualToTrueConstraints =
+ private final Map<Integer, BooleanTrueSimpleInliningConstraint> highBooleanTrueConstraints =
new ConcurrentHashMap<>();
- private final Map<Integer, NullSimpleInliningConstraint> highNotEqualToNullConstraints =
+ private final Map<Integer, NotNullSimpleInliningConstraint> highNotNullConstraints =
new ConcurrentHashMap<>();
- private final Map<Integer, NullSimpleInliningConstraint> highEqualToNullConstraints =
+ private final Map<Integer, NullSimpleInliningConstraint> highNullConstraints =
new ConcurrentHashMap<>();
public SimpleInliningConstraintFactory() {
- for (int i = 0; i < lowEqualToFalseConstraints.length; i++) {
- lowEqualToFalseConstraints[i] = EqualToBooleanSimpleInliningConstraint.create(i, false, this);
+ for (int i = 0; i < lowBooleanFalseConstraints.length; i++) {
+ lowBooleanFalseConstraints[i] = BooleanFalseSimpleInliningConstraint.create(i, this);
}
- for (int i = 0; i < lowEqualToTrueConstraints.length; i++) {
- lowEqualToTrueConstraints[i] = EqualToBooleanSimpleInliningConstraint.create(i, true, this);
+ for (int i = 0; i < lowBooleanTrueConstraints.length; i++) {
+ lowBooleanTrueConstraints[i] = BooleanTrueSimpleInliningConstraint.create(i, this);
}
- for (int i = 0; i < lowNotEqualToNullConstraints.length; i++) {
- lowNotEqualToNullConstraints[i] =
- NullSimpleInliningConstraint.create(i, definitelyNotNull(), this);
+ for (int i = 0; i < lowNotNullConstraints.length; i++) {
+ lowNotNullConstraints[i] = NotNullSimpleInliningConstraint.create(i, this);
}
- for (int i = 0; i < lowEqualToNullConstraints.length; i++) {
- lowEqualToNullConstraints[i] = NullSimpleInliningConstraint.create(i, definitelyNull(), this);
+ for (int i = 0; i < lowNullConstraints.length; i++) {
+ lowNullConstraints[i] = NullSimpleInliningConstraint.create(i, this);
}
}
- public EqualToBooleanSimpleInliningConstraint createEqualToFalseConstraint(int argumentIndex) {
- return createEqualToBooleanConstraint(argumentIndex, false);
- }
-
- public EqualToBooleanSimpleInliningConstraint createEqualToTrueConstraint(int argumentIndex) {
- return createEqualToBooleanConstraint(argumentIndex, true);
- }
-
- public EqualToBooleanSimpleInliningConstraint createEqualToBooleanConstraint(
- int argumentIndex, boolean value) {
+ public BooleanFalseSimpleInliningConstraint createBooleanFalseConstraint(int argumentIndex) {
return createArgumentConstraint(
argumentIndex,
- value ? lowEqualToTrueConstraints : lowEqualToFalseConstraints,
- value ? highEqualToTrueConstraints : highEqualToFalseConstraints,
- () -> EqualToBooleanSimpleInliningConstraint.create(argumentIndex, value, this));
+ lowBooleanFalseConstraints,
+ highBooleanFalseConstraints,
+ () -> BooleanFalseSimpleInliningConstraint.create(argumentIndex, this));
}
- public NullSimpleInliningConstraint createEqualToNullConstraint(int argumentIndex) {
- return createNullConstraint(argumentIndex, definitelyNull());
- }
-
- public NullSimpleInliningConstraint createNotEqualToNullConstraint(int argumentIndex) {
- return createNullConstraint(argumentIndex, definitelyNotNull());
- }
-
- public NullSimpleInliningConstraint createNullConstraint(
- int argumentIndex, Nullability nullability) {
+ public BooleanTrueSimpleInliningConstraint createBooleanTrueConstraint(int argumentIndex) {
return createArgumentConstraint(
argumentIndex,
- nullability.isDefinitelyNull() ? lowEqualToNullConstraints : lowNotEqualToNullConstraints,
- nullability.isDefinitelyNull() ? highEqualToNullConstraints : highNotEqualToNullConstraints,
- () -> NullSimpleInliningConstraint.create(argumentIndex, nullability, this));
+ lowBooleanTrueConstraints,
+ highBooleanTrueConstraints,
+ () -> BooleanTrueSimpleInliningConstraint.create(argumentIndex, this));
}
- public NotEqualToNumberSimpleInliningConstraint createNotEqualToNumberConstraint(
+ public NotNullSimpleInliningConstraint createNotNullConstraint(int argumentIndex) {
+ return createArgumentConstraint(
+ argumentIndex,
+ lowNotNullConstraints,
+ highNotNullConstraints,
+ () -> NotNullSimpleInliningConstraint.create(argumentIndex, this));
+ }
+
+ public NullSimpleInliningConstraint createNullConstraint(int argumentIndex) {
+ return createArgumentConstraint(
+ argumentIndex,
+ lowNullConstraints,
+ highNullConstraints,
+ () -> NullSimpleInliningConstraint.create(argumentIndex, this));
+ }
+
+ public NotEqualToNumberSimpleInliningConstraint createNotNumberConstraint(
int argumentIndex, long rawValue) {
return NotEqualToNumberSimpleInliningConstraint.create(argumentIndex, rawValue, this);
}
- public EqualToNumberSimpleInliningConstraint createEqualToNumberConstraint(
+ public EqualToNumberSimpleInliningConstraint createNumberConstraint(
int argumentIndex, long rawValue) {
return EqualToNumberSimpleInliningConstraint.create(argumentIndex, rawValue, this);
}