Revert "Update "identifier name string" info through optimization feedback"
This reverts commit a6fc226c87b49fe1d211ccedfb42ede8a4a09a25.
It is failing when building the Android Platform.
Change-Id: I721c686cacecf333ac608ff126dae4bc1cbab00b
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 7e4513d..ec9b186 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -34,7 +34,6 @@
import com.android.tools.r8.ir.code.ValueNumberGenerator;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.DexBuilder;
-import com.android.tools.r8.ir.conversion.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.ir.optimize.Inliner.Reason;
import com.android.tools.r8.ir.regalloc.RegisterAllocator;
@@ -1187,11 +1186,11 @@
optimizationInfo = info;
}
- public void copyMetadataFromInlinee(DexEncodedMethod inlinee, OptimizationFeedback feedback) {
+ public void copyMetadataFromInlinee(DexEncodedMethod inlinee) {
checkIfObsolete();
// Record that the current method uses identifier name string if the inlinee did so.
if (inlinee.getOptimizationInfo().useIdentifierNameString()) {
- feedback.markUseIdentifierNameString(this);
+ getMutableOptimizationInfo().markUseIdentifierNameString();
}
if (inlinee.classFileVersion > classFileVersion) {
upgradeClassFileVersion(inlinee.getClassFileVersion());
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index fdc47c0..61c69f8 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -849,7 +849,7 @@
}
if (identifierNameStringMarker != null) {
- identifierNameStringMarker.decoupleIdentifierNameStringsInMethod(method, code, feedback);
+ identifierNameStringMarker.decoupleIdentifierNameStringsInMethod(method, code);
assert code.isConsistentSSA();
}
@@ -870,7 +870,13 @@
if (options.enableInlining && inliner != null) {
// TODO(zerny): Should we support inlining in debug mode? b/62937285
assert !options.debug;
- inliner.performInlining(method, code, isProcessedConcurrently, callSiteInformation, feedback);
+ inliner.performInlining(method, code, isProcessedConcurrently, callSiteInformation);
+ }
+
+ // Either marked by IdentifierNameStringMarker or propagated from inlinee.
+ // Then, make it visible to IdentifierMinifier.
+ if (method.getOptimizationInfo().useIdentifierNameString()) {
+ feedback.markUseIdentifierNameString(method);
}
if (appInfo.hasLiveness()) {
@@ -951,12 +957,8 @@
// lambda, it does not get collected by merger.
assert options.enableInlining && inliner != null;
classInliner.processMethodCode(
- appInfo.withLiveness(),
- codeRewriter,
- method,
- code,
- isProcessedConcurrently,
- methodsToInline -> inliner.performForcedInlining(method, code, methodsToInline, feedback),
+ appInfo.withLiveness(), codeRewriter, method, code, isProcessedConcurrently,
+ methodsToInline -> inliner.performForcedInlining(method, code, methodsToInline),
Suppliers.memoize(() -> inliner.createDefaultOracle(
method, code,
isProcessedConcurrently, callSiteInformation,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index f9e43d7..c1cf5b5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.ir.code.InvokeStatic;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.ir.conversion.CallSiteInformation;
-import com.android.tools.r8.ir.conversion.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.Inliner.InlineAction;
import com.android.tools.r8.ir.optimize.Inliner.InlineeWithReason;
import com.android.tools.r8.ir.optimize.Inliner.Reason;
@@ -343,14 +342,13 @@
}
@Override
- public void ensureMethodProcessed(
- DexEncodedMethod target, IRCode inlinee, OptimizationFeedback feedback) {
+ public void ensureMethodProcessed(DexEncodedMethod target, IRCode inlinee) {
if (!target.isProcessed()) {
if (Log.ENABLED) {
Log.verbose(getClass(), "Forcing extra inline on " + target.toSourceString());
}
inliner.performInlining(
- target, inlinee, isProcessedConcurrently, callSiteInformation, feedback);
+ target, inlinee, isProcessedConcurrently, callSiteInformation);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
index 0aaf27f..6890dd8 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.ir.code.InvokeMethodWithReceiver;
import com.android.tools.r8.ir.code.InvokePolymorphic;
import com.android.tools.r8.ir.code.InvokeStatic;
-import com.android.tools.r8.ir.conversion.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.Inliner.InlineAction;
import com.android.tools.r8.ir.optimize.Inliner.InlineeWithReason;
import com.android.tools.r8.ir.optimize.Inliner.Reason;
@@ -65,8 +64,7 @@
}
@Override
- public void ensureMethodProcessed(
- DexEncodedMethod target, IRCode inlinee, OptimizationFeedback feedback) {
+ public void ensureMethodProcessed(DexEncodedMethod target, IRCode inlinee) {
// Do nothing. If the method is not yet processed, we still should
// be able to build IR for inlining, though.
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 1368ea3..63d0242 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -543,19 +543,17 @@
public void performForcedInlining(
DexEncodedMethod method,
IRCode code,
- Map<InvokeMethod, InliningInfo> invokesToInline,
- OptimizationFeedback feedback) {
+ Map<InvokeMethod, InliningInfo> invokesToInline) {
ForcedInliningOracle oracle = new ForcedInliningOracle(method, invokesToInline);
- performInliningImpl(oracle, oracle, method, code, feedback);
+ performInliningImpl(oracle, oracle, method, code);
}
public void performInlining(
DexEncodedMethod method,
IRCode code,
Predicate<DexEncodedMethod> isProcessedConcurrently,
- CallSiteInformation callSiteInformation,
- OptimizationFeedback feedback) {
+ CallSiteInformation callSiteInformation) {
DefaultInliningOracle oracle =
createDefaultOracle(
@@ -566,7 +564,7 @@
options.inliningInstructionLimit,
options.inliningInstructionAllowance - numberOfInstructions(code));
- performInliningImpl(oracle, oracle, method, code, feedback);
+ performInliningImpl(oracle, oracle, method, code);
}
public DefaultInliningOracle createDefaultOracle(
@@ -590,11 +588,7 @@
}
private void performInliningImpl(
- InliningStrategy strategy,
- InliningOracle oracle,
- DexEncodedMethod context,
- IRCode code,
- OptimizationFeedback feedback) {
+ InliningStrategy strategy, InliningOracle oracle, DexEncodedMethod context, IRCode code) {
List<BasicBlock> blocksToRemove = new ArrayList<>();
ListIterator<BasicBlock> blockIterator = code.listIterator();
while (blockIterator.hasNext()) {
@@ -631,7 +625,7 @@
// If this code did not go through the full pipeline, apply inlining to make sure
// that force inline targets get processed.
- strategy.ensureMethodProcessed(target, inlinee.code, feedback);
+ strategy.ensureMethodProcessed(target, inlinee.code);
// Make sure constructor inlining is legal.
assert !target.isClassInitializer();
@@ -653,7 +647,7 @@
context.accessFlags.unsetBridge();
}
- context.copyMetadataFromInlinee(target, feedback);
+ context.copyMetadataFromInlinee(target);
code.copyMetadataFromInlinee(inlinee.code);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningStrategy.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningStrategy.java
index e0ff04b..7dc2b62 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningStrategy.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningStrategy.java
@@ -9,7 +9,6 @@
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
import com.android.tools.r8.ir.code.InvokeMethod;
-import com.android.tools.r8.ir.conversion.OptimizationFeedback;
import com.android.tools.r8.ir.optimize.Inliner.InlineeWithReason;
import java.util.ListIterator;
@@ -28,8 +27,7 @@
/** Inform the strategy that the inlinee has been inlined. */
void markInlined(InlineeWithReason inlinee);
- void ensureMethodProcessed(
- DexEncodedMethod target, IRCode inlinee, OptimizationFeedback feedback);
+ void ensureMethodProcessed(DexEncodedMethod target, IRCode inlinee);
boolean isValidTarget(InvokeMethod invoke, DexEncodedMethod target, IRCode inlinee);
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
index 0aff19d..481f6c4 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -32,7 +32,6 @@
import com.android.tools.r8.ir.code.InvokeMethod;
import com.android.tools.r8.ir.code.StaticPut;
import com.android.tools.r8.ir.code.Value;
-import com.android.tools.r8.ir.conversion.OptimizationFeedback;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.position.TextPosition;
import com.android.tools.r8.shaking.Enqueuer.AppInfoWithLiveness;
@@ -84,8 +83,7 @@
}
}
- public void decoupleIdentifierNameStringsInMethod(
- DexEncodedMethod encodedMethod, IRCode code, OptimizationFeedback feedback) {
+ public void decoupleIdentifierNameStringsInMethod(DexEncodedMethod encodedMethod, IRCode code) {
if (!code.hasConstString) {
return;
}
@@ -165,7 +163,7 @@
InstancePut instancePut = instruction.asInstancePut();
iterator.replaceCurrentInstruction(new InstancePut(field, instancePut.object(), newIn));
}
- feedback.markUseIdentifierNameString(encodedMethod);
+ encodedMethod.getMutableOptimizationInfo().markUseIdentifierNameString();
} else if (instruction.isInvokeMethod()) {
InvokeMethod invoke = instruction.asInvokeMethod();
DexMethod invokedMethod = invoke.getInvokedMethod();
@@ -280,7 +278,7 @@
invokedMethod.proto,
invoke.outValue(),
newIns));
- feedback.markUseIdentifierNameString(encodedMethod);
+ encodedMethod.getMutableOptimizationInfo().markUseIdentifierNameString();
}
}
}