Revert "[KeepAnno] Add tracing of inlining positions"
Revert submission 89581
Reason for revert: Broke build, threading module when missing.
Reverted changes: /q/submissionid:89581
Change-Id: Ic91a7809bc455ea5db6c6a6963e67832342e348e
diff --git a/src/main/java/com/android/tools/r8/graph/UseRegistry.java b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
index 6238dd5..d7d1b0b 100644
--- a/src/main/java/com/android/tools/r8/graph/UseRegistry.java
+++ b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
@@ -9,7 +9,6 @@
import com.android.tools.r8.graph.bytecodemetadata.BytecodeInstructionMetadata;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.ir.code.InvokeType;
-import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.utils.TraversalContinuation;
import java.util.ListIterator;
@@ -61,10 +60,6 @@
return continuation;
}
- public void registerInliningPosition(Position position) {
- assert position.hasCallerPosition();
- }
-
public void registerRecordFieldValues(DexField[] fields) {
registerTypeReference(appView.dexItemFactory().objectArrayType);
}
diff --git a/src/main/java/com/android/tools/r8/lightir/LirCode.java b/src/main/java/com/android/tools/r8/lightir/LirCode.java
index 5090346..6f93b21 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirCode.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirCode.java
@@ -585,11 +585,6 @@
@Override
public void registerCodeReferences(ProgramMethod method, UseRegistry registry) {
assert registry.getTraversalContinuation().shouldContinue();
- for (PositionEntry positionEntry : positionTable) {
- if (positionEntry instanceof StructuredPositionEntry) {
- registry.registerInliningPosition(((StructuredPositionEntry) positionEntry).position);
- }
- }
LirUseRegistryCallback<EV> registryCallbacks = new LirUseRegistryCallback<>(this, registry);
for (LirInstructionView view : this) {
if (metadataMap != null) {
diff --git a/src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java b/src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java
index dd975f7..736f285 100644
--- a/src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/shaking/DefaultEnqueuerUseRegistry.java
@@ -19,7 +19,6 @@
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Position;
import java.util.ListIterator;
public class DefaultEnqueuerUseRegistry extends ComputeApiLevelUseRegistry {
@@ -46,12 +45,6 @@
}
@Override
- public void registerInliningPosition(Position position) {
- super.registerInliningPosition(position);
- enqueuer.traceMethodPosition(position, getContext());
- }
-
- @Override
public void registerInitClass(DexType clazz) {
super.registerInitClass(clazz);
enqueuer.traceInitClass(clazz, getContext());
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 1d2e7b8..0dfda11 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -131,6 +131,7 @@
import com.android.tools.r8.naming.identifiernamestring.IdentifierNameStringLookupResult;
import com.android.tools.r8.naming.identifiernamestring.IdentifierNameStringTypeLookupResult;
import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.position.Position;
import com.android.tools.r8.profile.rewriting.ProfileCollectionAdditions;
import com.android.tools.r8.shaking.AnnotationMatchResult.MatchedAnnotation;
import com.android.tools.r8.shaking.DelayedRootSetActionItem.InterfaceMethodSyntheticBridgeAction;
@@ -314,10 +315,6 @@
*/
private final SetWithReportedReason<DexProgramClass> liveTypes = new SetWithReportedReason<>();
- /** Set of effectively live items from the original program. */
- // TODO(b/323816623): Add reason tracking.
- private final Set<DexReference> effectivelyLiveOriginalReferences = SetUtils.newIdentityHashSet();
-
/** Set of interfaces that have been transitioned to being instantiated indirectly. */
private final Set<DexProgramClass> interfacesTransitionedToInstantiated =
Sets.newIdentityHashSet();
@@ -1634,27 +1631,6 @@
analysis -> analysis.traceInvokeVirtual(invokedMethod, resolutionResult, context));
}
- void traceMethodPosition(com.android.tools.r8.ir.code.Position position, ProgramMethod context) {
- if (!options.testing.enableExtractedKeepAnnotations) {
- // Currently inlining is only intended for the evaluation of keep annotation edges.
- return;
- }
- while (position.hasCallerPosition()) {
- // Any inner position should not be non-synthetic user methods.
- assert !position.isD8R8Synthesized();
- DexMethod method = position.getMethod();
- // TODO(b/325014359): It might be reasonable to reduce this map size by tracking which methods
- // actually are used in preconditions.
- if (effectivelyLiveOriginalReferences.add(method)) {
- effectivelyLiveOriginalReferences.add(method.getHolderType());
- }
- position = position.getCallerPosition();
- }
- // The outer-most position should be equal to the context.
- // No need to trace this as the method is already traced since it is invoked.
- assert context.getReference().isIdenticalTo(position.getMethod());
- }
-
void traceNewInstance(DexType type, ProgramMethod context) {
boolean skipTracing =
registerDeferredActionForDeadProtoBuilder(
@@ -3426,35 +3402,6 @@
return liveTypes.contains(clazz);
}
- public boolean isEffectivelyLive(DexProgramClass clazz) {
- if (isTypeLive(clazz)) {
- return true;
- }
- if (mode.isInitialTreeShaking()) {
- return false;
- }
- // TODO(b/325014359): Replace this by value tracking in instructions (akin to resource values).
- for (DexEncodedField field : clazz.fields()) {
- if (field.getOptimizationInfo().valueHasBeenPropagated()) {
- return true;
- }
- }
- // TODO(b/325014359): Replace this by value or position tracking.
- // We need to be careful not to throw away such values/positions.
- for (DexEncodedMethod method : clazz.methods()) {
- if (method.getOptimizationInfo().returnValueHasBeenPropagated()) {
- return true;
- }
- }
- return false;
- }
-
- public boolean isOriginalReferenceEffectivelyLive(DexReference reference) {
- // The effectively-live original set contains types, fields and methods witnessed by
- // instructions, such as method inlining positions.
- return effectivelyLiveOriginalReferences.contains(reference);
- }
-
public boolean isNonProgramTypeLive(DexClass clazz) {
assert !clazz.isProgramClass();
return liveNonProgramTypes.contains(clazz);
@@ -4724,7 +4671,7 @@
context,
new InterfaceDesugarMissingTypeDiagnostic(
context.getOrigin(),
- com.android.tools.r8.position.Position.UNKNOWN,
+ Position.UNKNOWN,
missing.asClassReference(),
context.getType().asClassReference(),
null)));
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index 32ec312..933cc33 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.graph.DexClassAndMethod;
import com.android.tools.r8.graph.DexDefinition;
import com.android.tools.r8.graph.DexEncodedField;
+import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexReference;
@@ -177,7 +178,23 @@
}
private boolean isEffectivelyLive(DexProgramClass clazz) {
- return enqueuer.isEffectivelyLive(clazz);
+ // A type is effectively live if (1) it is truly live, (2) the value of one of its fields has
+ // been inlined by the member value propagation, or (3) the return value of one of its methods
+ // has been forwarded by the member value propagation.
+ if (enqueuer.isTypeLive(clazz)) {
+ return true;
+ }
+ for (DexEncodedField field : clazz.fields()) {
+ if (field.getOptimizationInfo().valueHasBeenPropagated()) {
+ return true;
+ }
+ }
+ for (DexEncodedMethod method : clazz.methods()) {
+ if (method.getOptimizationInfo().returnValueHasBeenPropagated()) {
+ return true;
+ }
+ }
+ return false;
}
/** Determines if {@param clazz} satisfies the given if-rule class specification. */