Remove updates to highest string in conversion
The information is unused until we do collect indexed items as part of
finalizing the app before writing.
Change-Id: I6c050b52b160930ee3fbadcfd7e101d78c1d211e
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 3d5f387..930cdda 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -932,11 +932,6 @@
if (!mapping.hasJumboStrings()) {
return;
}
- // If the globally highest sorting string is not a jumbo string this is also a no-op.
- if (application.highestSortingString != null
- && application.highestSortingString.compareTo(mapping.getFirstJumboString()) < 0) {
- return;
- }
}
for (DexProgramClass clazz : classes) {
clazz.forEachProgramMethodMatching(
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 13f6812..dede86b 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -146,7 +146,7 @@
newDebugInfo);
// As we have rewritten the code, we now know that its highest string index that is not
// a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
- newCode.highestSortingString = firstJumboString;
+ newCode.setHighestSortingStringForJumboProcessedCode(firstJumboString);
return newCode;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index 311a287..da73661 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -33,23 +33,18 @@
public final DexItemFactory dexItemFactory;
private final DexApplicationReadFlags flags;
- // Information on the lexicographically largest string referenced from code.
- public final DexString highestSortingString;
-
/** Constructor should only be invoked by the DexApplication.Builder. */
DexApplication(
ClassNameMapper proguardMap,
DexApplicationReadFlags flags,
ImmutableList<DataResourceProvider> dataResourceProviders,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
this.proguardMap = proguardMap;
this.flags = flags;
this.dataResourceProviders = dataResourceProviders;
this.options = options;
this.dexItemFactory = options.itemFactory;
- this.highestSortingString = highestSortingString;
this.timing = timing;
}
@@ -168,7 +163,6 @@
final Timing timing;
DexApplicationReadFlags flags;
- DexString highestSortingString;
private final Collection<DexProgramClass> synthesizedClasses;
public Builder(InternalOptions options, Timing timing) {
@@ -186,7 +180,6 @@
dataResourceProviders.addAll(application.dataResourceProviders);
proguardMap = application.getProguardMap();
timing = application.timing;
- highestSortingString = application.highestSortingString;
options = application.options;
dexItemFactory = application.dexItemFactory;
synthesizedClasses = new ArrayList<>();
@@ -246,11 +239,6 @@
return self();
}
- public synchronized T setHighestSortingString(DexString value) {
- highestSortingString = value;
- return self();
- }
-
public synchronized T addProgramClass(DexProgramClass clazz) {
programClasses.add(clazz);
return self();
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index f59c187..763c1b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -76,7 +76,7 @@
public final TryHandler[] handlers;
public final DexInstruction[] instructions;
- public DexString highestSortingString;
+ private DexString highestSortingString;
private DexDebugInfo debugInfo;
private DexDebugInfoForWriting debugInfoForWriting;
@@ -210,6 +210,13 @@
return DexCode::specify;
}
+ public void setHighestSortingStringForJumboProcessedCode(DexString nonJumboString) {
+ // The call of this method marks this code object as properly jumbo-string processed.
+ // In principle, it should be possible to mark as such and assert that we do not reattempt
+ // processing in rewriteCodeWithJumboStrings.
+ highestSortingString = nonJumboString;
+ }
+
@Override
public DexWritableCode rewriteCodeWithJumboStrings(
ProgramMethod method, ObjectToOffsetMapping mapping, AppView<?> appView, boolean force) {
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08dad18..b6591b9 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -49,9 +49,8 @@
ImmutableCollection<DexClasspathClass> classpathClasses,
ImmutableList<DataResourceProvider> dataResourceProviders,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
- super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+ super(proguardMap, flags, dataResourceProviders, options, timing);
this.programOrClasspathClasses = programOrClasspathClasses;
this.libraryClasses = libraryClasses;
this.programClasses = programClasses;
@@ -324,7 +323,6 @@
newClasspathClasses,
ImmutableList.copyOf(dataResourceProviders),
options,
- highestSortingString,
timing);
}
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 96d4bfa..b5b28fd 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -40,9 +40,8 @@
ClasspathClassCollection classpathClasses,
LibraryClassCollection libraryClasses,
InternalOptions options,
- DexString highestSortingString,
Timing timing) {
- super(proguardMap, flags, dataResourceProviders, options, highestSortingString, timing);
+ super(proguardMap, flags, dataResourceProviders, options, timing);
this.programClasses = programClasses;
this.classpathClasses = classpathClasses;
this.libraryClasses = libraryClasses;
@@ -329,7 +328,6 @@
classpathClasses,
libraryClasses,
options,
- highestSortingString,
timing);
}
}
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 9329ef3..119e852 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
@@ -1157,7 +1157,6 @@
.finalizeCode(code, bytecodeMetadataProvider, timing),
appView);
markProcessed(code, feedback);
- updateHighestSortingStrings(definition);
}
public void markProcessed(IRCode code, OptimizationFeedback feedback) {
@@ -1185,18 +1184,6 @@
return true;
}
- protected synchronized void updateHighestSortingStrings(DexEncodedMethod method) {
- Code code = method.getCode();
- assert code.isDexWritableCode();
- DexString highestSortingReferencedString = code.asDexWritableCode().getHighestSortingString();
- if (highestSortingReferencedString != null) {
- if (highestSortingString == null
- || highestSortingReferencedString.compareTo(highestSortingString) > 0) {
- highestSortingString = highestSortingReferencedString;
- }
- }
- }
-
public void printPhase(String phase) {
if (!options.extensiveLoggingFilter.isEmpty()) {
System.out.println("Entering phase: " + phase);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
index bcadf66..c5c3e73 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryD8L8IRConverter.java
@@ -85,7 +85,7 @@
application = commitPendingSyntheticItems(appView, application);
// Build a new application with jumbo string info,
- Builder<?> builder = application.builder().setHighestSortingString(highestSortingString);
+ Builder<?> builder = application.builder();
if (appView.options().isDesugaredLibraryCompilation()) {
new EmulatedInterfaceApplicationRewriter(appView).rewriteApplication(builder);
@@ -169,9 +169,6 @@
} else {
assert definition.getCode().isDexCode();
}
- if (!options.isGeneratingClassFiles()) {
- updateHighestSortingStrings(definition);
- }
}
private void checkPrefixMerging(ProgramMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
index bfdb3f4..729a2e5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.Code;
import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexApplication.Builder;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.ProgramMethod;
@@ -205,10 +204,6 @@
// synthetics.)
commitPendingSyntheticItems(appView);
- // Build a new application with jumbo string info.
- Builder<?> builder = appView.appInfo().app().builder();
- builder.setHighestSortingString(highestSortingString);
-
// Update optimization info for all synthesized methods at once.
feedback.updateVisibleOptimizationInfo();
@@ -223,7 +218,7 @@
// Assure that no more optimization feedback left after post processing.
assert feedback.noUpdatesLeft();
finalizeLirToOutputFormat(timing, executorService);
- return builder.build();
+ return appView.appInfo().app();
}
private void finalizeLirToOutputFormat(Timing timing, ExecutorService executorService)
@@ -270,7 +265,6 @@
new IRToDexFinalizer(appView, deadCodeRemover)
.finalizeCode(irCode, bytecodeMetadataProvider, onThreadTiming),
appView);
- updateHighestSortingStrings(method.getDefinition());
}
}
diff --git a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
index dd474a2..db99557 100644
--- a/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
+++ b/src/test/java/com/android/tools/r8/examples/jumbostring/JumboStringTestRunner.java
@@ -53,7 +53,8 @@
@Test
public void testR8() throws Exception {
- runTestR8();
+ // Disable shrinking and obfuscation so that the fields and their names are retained.
+ runTestR8(b -> b.addDontShrink().addDontObfuscate());
}
@Test