Remove legacy code from force inlining of constructors after class merging
Change-Id: Ida1f5b855342b8c33e5acbf5c45ced68f9ed9e0d
diff --git a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
index c5f1cac..fee91ad 100644
--- a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
@@ -242,7 +242,7 @@
TypeInfo argumentType;
if (argumentIndex < 0) {
argumentType =
- reference.isInstanceInitializerInlineIntoOrMerged(appView)
+ reference.isInstanceInitializer(appView.dexItemFactory())
? new ThisInstanceInfo(instruction.asArgument(), reference.getHolderType())
: createInitializedType(reference.getHolderType());
} else {
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
index 9bb9a8a..eda577c 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
@@ -314,7 +314,7 @@
state =
state.storeLocal(
localIndex,
- context.isInstanceInitializerInlineIntoOrMerged(appView)
+ context.isInstanceInitializer(appView.dexItemFactory())
? FrameType.uninitializedThis()
: FrameType.initializedNonNullReference(context.getHolderType()),
config);
diff --git a/src/main/java/com/android/tools/r8/dex/Constants.java b/src/main/java/com/android/tools/r8/dex/Constants.java
index 2b30ef2..10bfcc7 100644
--- a/src/main/java/com/android/tools/r8/dex/Constants.java
+++ b/src/main/java/com/android/tools/r8/dex/Constants.java
@@ -148,10 +148,7 @@
public static final String JAVA_LANG_OBJECT_NAME = "java/lang/Object";
public static final String INSTANCE_INITIALIZER_NAME = "<init>";
public static final String CLASS_INITIALIZER_NAME = "<clinit>";
- public static final String TEMPORARY_INSTANCE_INITIALIZER_PREFIX = "$r8$constructor";
public static final String SYNTHETIC_INSTANCE_INITIALIZER_PREFIX = "$r8$init$synthetic";
public static final int MAX_NON_JUMBO_INDEX = U16BIT_MAX;
-
- public static final int KILOBYTE = 1 << 10;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 1b9a92e..6c86c27 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -460,23 +460,6 @@
return accessFlags.isConstructor() && !accessFlags.isStatic();
}
- /**
- * Returns true for (private instance) methods that have been created as a result of class merging
- * and will be force-inlined into an instance initializer on the enclosing class.
- */
- public boolean willBeInlinedIntoInstanceInitializer(DexItemFactory dexItemFactory) {
- checkIfObsolete();
- if (getName().startsWith(dexItemFactory.temporaryConstructorMethodPrefix)) {
- assert !isStatic();
- return true;
- }
- return false;
- }
-
- public boolean isOrWillBeInlinedIntoInstanceInitializer(DexItemFactory dexItemFactory) {
- return isInstanceInitializer() || willBeInlinedIntoInstanceInitializer(dexItemFactory);
- }
-
public boolean isDefaultInstanceInitializer() {
checkIfObsolete();
return isInstanceInitializer() && getParameters().isEmpty();
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 00f2da3..240933c 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -354,10 +354,6 @@
public final DexString constructorMethodName = createString(Constants.INSTANCE_INITIALIZER_NAME);
public final DexString classConstructorMethodName =
createString(Constants.CLASS_INITIALIZER_NAME);
- public final DexString temporaryConstructorMethodPrefix =
- createString(Constants.TEMPORARY_INSTANCE_INITIALIZER_PREFIX);
- public final DexString syntheticConstructorMethodPrefix =
- createString(Constants.SYNTHETIC_INSTANCE_INITIALIZER_PREFIX);
public final DexString thisName = createString("this");
public final DexString lambdaInstanceFieldName = createString(LAMBDA_INSTANCE_FIELD_NAME);
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethod.java b/src/main/java/com/android/tools/r8/graph/DexMethod.java
index b1b7241..ea4be31 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -335,29 +335,6 @@
return factory.isConstructor(this);
}
- public boolean mustBeInlinedIntoInstanceInitializer(AppView<?> appView) {
- DexItemFactory dexItemFactory = appView.dexItemFactory();
- if (getName().startsWith(dexItemFactory.temporaryConstructorMethodPrefix)) {
- DexClassAndMethod method = appView.definitionFor(this);
- return method != null
- && appView
- .graphLens()
- .getOriginalMethodSignature(this)
- .isInstanceInitializer(dexItemFactory);
- }
- return false;
- }
-
- public boolean isHorizontallyMergedInstanceInitializer(DexItemFactory dexItemFactory) {
- return getName().startsWith(dexItemFactory.syntheticConstructorMethodPrefix);
- }
-
- public boolean isInstanceInitializerInlineIntoOrMerged(AppView<?> appView) {
- return isInstanceInitializer(appView.dexItemFactory())
- || mustBeInlinedIntoInstanceInitializer(appView)
- || isHorizontallyMergedInstanceInitializer(appView.dexItemFactory());
- }
-
public DexMethod withExtraArgumentPrepended(DexType type, DexItemFactory dexItemFactory) {
return dexItemFactory.createMethod(
holder, getProto().prependParameter(type, dexItemFactory), name);
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
index 1eb69e7..2efeeae 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
@@ -419,8 +419,7 @@
if (toBeReplaced.isInvokeDirect()) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
DexMethod invokedMethod = toBeReplaced.asInvokeDirect().getInvokedMethod();
- if (invokedMethod.isInstanceInitializer(dexItemFactory)
- || invokedMethod.mustBeInlinedIntoInstanceInitializer(appView)) {
+ if (invokedMethod.isInstanceInitializer(dexItemFactory)) {
return false;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index 813132c..d6953b0 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -224,7 +224,7 @@
}
private Set<UninitializedThisLocalRead> insertUninitializedThisLocalReads() {
- if (!method.getReference().isInstanceInitializerInlineIntoOrMerged(appView)) {
+ if (!method.getReference().isInstanceInitializer(appView.dexItemFactory())) {
return Collections.emptySet();
}
// Find all non-normal exit blocks.
@@ -272,7 +272,7 @@
assert thisInitializers == null;
initializers = new HashMap<>();
boolean isInstanceInitializer =
- method.getReference().isInstanceInitializerInlineIntoOrMerged(appView);
+ method.getReference().isInstanceInitializer(appView.dexItemFactory());
for (BasicBlock block : code.blocks) {
for (Instruction insn : block.getInstructions()) {
if (insn.isNewInstance()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/unusedarguments/EffectivelyUnusedArgumentsAnalysis.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/unusedarguments/EffectivelyUnusedArgumentsAnalysis.java
index c7472d7..d0ec5b6 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/unusedarguments/EffectivelyUnusedArgumentsAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/unusedarguments/EffectivelyUnusedArgumentsAnalysis.java
@@ -132,9 +132,6 @@
if (method.getDefinition().isInstanceInitializer() && argumentValue.isThis()) {
return null;
}
- if (method.getDefinition().willBeInlinedIntoInstanceInitializer(appView.dexItemFactory())) {
- return null;
- }
if (!ParameterRemovalUtils.canRemoveUnusedParameter(appView, method, argument.getIndex())) {
return null;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 6680806..c522643 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -943,10 +943,7 @@
DexType holder = field.getHolderType();
return fieldAccessInfo.isWrittenOnlyInMethodSatisfying(
method ->
- method.getHolderType() == holder
- && method
- .getDefinition()
- .isOrWillBeInlinedIntoInstanceInitializer(dexItemFactory()));
+ method.getHolderType() == holder && method.getDefinition().isInstanceInitializer());
}
public boolean isStaticFieldWrittenOnlyInEnclosingStaticInitializer(DexClassAndField field) {