Rename internal optimization flags
The existing naming was somewhat inconsistent.
Change-Id: I381c68db3475f45f38be3429aa0b16fd2e593541
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index a806138..a7bb291 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -148,8 +148,8 @@
throws IOException, CompilationException {
try {
// Disable global optimizations.
- options.skipMinification = true;
- options.inlineAccessors = false;
+ options.enableMinification = false;
+ options.enableInlining = false;
options.outline.enabled = false;
Timing timing = new Timing("DX timer");
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 0e39dae..2678c1f 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -329,22 +329,22 @@
internal.minApiLevel = getMinApiLevel();
internal.intermediate = intermediate;
// Assert and fixup defaults.
- assert !internal.skipMinification;
- internal.skipMinification = true;
- assert internal.useTreeShaking;
- internal.useTreeShaking = false;
+ assert internal.enableMinification;
+ internal.enableMinification = false;
+ assert internal.enableTreeShaking;
+ internal.enableTreeShaking = false;
assert !internal.passthroughDexCode;
internal.passthroughDexCode = true;
// Disable some of R8 optimizations.
- assert internal.inlineAccessors;
- internal.inlineAccessors = false;
- assert internal.removeSwitchMaps;
- internal.removeSwitchMaps = false;
+ assert internal.enableInlining;
+ internal.enableInlining = false;
+ assert internal.enableSwitchMapRemoval;
+ internal.enableSwitchMapRemoval = false;
assert internal.outline.enabled;
internal.outline.enabled = false;
- assert internal.propagateMemberValue;
- internal.propagateMemberValue = false;
+ assert internal.enableValuePropagation;
+ internal.enableValuePropagation = false;
internal.enableDesugaring = getEnableDesugaring();
return internal;
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index 57b3804..bcbddb1 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -56,8 +56,8 @@
options.enableDesugaring = false;
options.enableMainDexListCheck = false;
options.minimalMainDex = minimalMainDex;
- options.skipMinification = true;
- options.inlineAccessors = false;
+ options.enableMinification = false;
+ options.enableInlining = false;
options.outline.enabled = false;
ExecutorService executor = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index c086c7e..d28f93f 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -38,8 +38,8 @@
options.enableDesugaring = false;
options.enableMainDexListCheck = false;
options.minimalMainDex = false;
- options.skipMinification = true;
- options.inlineAccessors = false;
+ options.enableMinification = false;
+ options.enableInlining = false;
options.outline.enabled = false;
ExecutorService executor = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
index 62ab21b..f9e0ebf 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
@@ -204,8 +204,8 @@
internal.mainDexKeepRules = mainDexKeepRules;
internal.mainDexListConsumer = mainDexListConsumer;
internal.minimalMainDex = internal.debug;
- internal.removeSwitchMaps = false;
- internal.inlineAccessors = false;
+ internal.enableSwitchMapRemoval = false;
+ internal.enableInlining = false;
return internal;
}
}
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 345a671..906c8d8 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -287,7 +287,7 @@
out.flush();
proguardSeedsData = bytes.toString();
}
- if (options.useTreeShaking) {
+ if (options.enableTreeShaking) {
TreePruner pruner = new TreePruner(application, appInfo.withLiveness(), options);
application = pruner.run();
// Recompute the subtyping information.
@@ -329,7 +329,7 @@
if (appInfo.hasLiveness()) {
graphLense = new MemberRebindingAnalysis(appInfo.withLiveness(), graphLense).run();
// Class merging requires inlining.
- if (!options.skipClassMerging && options.inlineAccessors) {
+ if (options.enableClassMerging && options.enableInlining) {
timing.begin("ClassMerger");
SimpleClassMerger classMerger = new SimpleClassMerger(application,
appInfo.withLiveness(), graphLense, timing);
@@ -400,12 +400,12 @@
appInfo = new AppInfoWithSubtyping(application);
- if (options.useTreeShaking || !options.skipMinification) {
+ if (options.enableTreeShaking || options.enableMinification) {
timing.begin("Post optimization code stripping");
try {
Enqueuer enqueuer = new Enqueuer(appInfo, options);
appInfo = enqueuer.traceApplication(rootSet, timing);
- if (options.useTreeShaking) {
+ if (options.enableTreeShaking) {
TreePruner pruner = new TreePruner(application, appInfo.withLiveness(), options);
application = pruner.run();
appInfo = appInfo.withLiveness()
@@ -420,7 +420,7 @@
}
// Only perform discard-checking if tree-shaking is turned on.
- if (options.useTreeShaking && !rootSet.checkDiscarded.isEmpty()) {
+ if (options.enableTreeShaking && !rootSet.checkDiscarded.isEmpty()) {
new DiscardedChecker(rootSet, application, options).run();
}
@@ -428,9 +428,9 @@
// If we did not have keep rules, everything will be marked as keep, so no minification
// will happen. Just avoid the overhead.
NamingLens namingLens =
- options.skipMinification
- ? NamingLens.getIdentityLens()
- : new Minifier(appInfo.withLiveness(), rootSet, options).run(timing);
+ options.enableMinification
+ ? new Minifier(appInfo.withLiveness(), rootSet, options).run(timing)
+ : NamingLens.getIdentityLens();
timing.end();
ProguardMapSupplier proguardMapSupplier;
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index e46f743..7004d5f 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -636,26 +636,17 @@
internal.programConsumer = getProgramConsumer();
internal.minApiLevel = getMinApiLevel();
internal.enableDesugaring = getEnableDesugaring();
- // -dontoptimize disables optimizations by flipping related flags.
- if (!proguardConfiguration.isOptimizing()) {
- internal.skipClassMerging = true;
- internal.addNonNull = false;
- internal.inlineAccessors = false;
- internal.removeSwitchMaps = false;
- internal.outline.enabled = false;
- internal.propagateMemberValue = false;
- }
- assert !internal.skipMinification;
- internal.skipMinification = !getEnableMinification();
- assert internal.useTreeShaking;
- internal.useTreeShaking = getEnableTreeShaking();
+ assert internal.enableMinification;
+ internal.enableMinification = getEnableMinification();
+ assert internal.enableTreeShaking;
+ internal.enableTreeShaking = getEnableTreeShaking();
assert !internal.ignoreMissingClasses;
internal.ignoreMissingClasses = proguardConfiguration.isIgnoreWarnings()
// TODO(70706667): We probably only want this in Proguard compatibility mode.
|| (forceProguardCompatibility
&& !proguardConfiguration.isOptimizing()
- && internal.skipMinification
- && !internal.useTreeShaking);
+ && !internal.enableMinification
+ && !internal.enableTreeShaking);
assert !internal.verbose;
internal.mainDexKeepRules = mainDexKeepRules;
@@ -667,7 +658,7 @@
if (internal.debug) {
// TODO(zerny): Should we support inlining in debug mode? b/62937285
- internal.inlineAccessors = false;
+ internal.enableInlining = false;
// TODO(zerny): Should we support outlining in debug mode? b/62937285
internal.outline.enabled = false;
}
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 31bd727..bb4b629 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
@@ -34,7 +34,7 @@
import com.android.tools.r8.ir.optimize.Inliner;
import com.android.tools.r8.ir.optimize.Inliner.Constraint;
import com.android.tools.r8.ir.optimize.MemberValuePropagation;
-import com.android.tools.r8.ir.optimize.NonNullMarker;
+import com.android.tools.r8.ir.optimize.NonNullTracker;
import com.android.tools.r8.ir.optimize.Outliner;
import com.android.tools.r8.ir.optimize.PeepholeOptimizer;
import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
@@ -82,7 +82,7 @@
private final CodeRewriter codeRewriter;
private final MemberValuePropagation memberValuePropagation;
private final LensCodeRewriter lensCodeRewriter;
- private final NonNullMarker nonNullMarker;
+ private final NonNullTracker nonNullTracker;
private final Inliner inliner;
private final ProtoLitePruner protoLiteRewriter;
private final IdentifierNameStringMarker identifierNameStringMarker;
@@ -113,17 +113,18 @@
? new InterfaceMethodRewriter(this, options) : null;
if (enableWholeProgramOptimizations) {
assert appInfo.hasLiveness();
- this.nonNullMarker = new NonNullMarker();
+ this.nonNullTracker = new NonNullTracker();
this.inliner = new Inliner(appInfo.withLiveness(), graphLense, options);
this.outliner = new Outliner(appInfo.withLiveness(), options);
this.memberValuePropagation =
- options.propagateMemberValue ? new MemberValuePropagation(appInfo.withLiveness()) : null;
+ options.enableValuePropagation ?
+ new MemberValuePropagation(appInfo.withLiveness()) : null;
this.lensCodeRewriter = new LensCodeRewriter(graphLense, appInfo.withSubtyping());
if (appInfo.hasLiveness()) {
// When disabling the pruner here, also disable the ProtoLiteExtension in R8.java.
this.protoLiteRewriter =
options.forceProguardCompatibility ? null : new ProtoLitePruner(appInfo.withLiveness());
- if (!appInfo.withLiveness().identifierNameStrings.isEmpty() && !options.skipMinification) {
+ if (!appInfo.withLiveness().identifierNameStrings.isEmpty() && options.enableMinification) {
this.identifierNameStringMarker = new IdentifierNameStringMarker(appInfo.withLiveness());
} else {
this.identifierNameStringMarker = null;
@@ -133,7 +134,7 @@
this.identifierNameStringMarker = null;
}
} else {
- this.nonNullMarker = null;
+ this.nonNullTracker = null;
this.inliner = null;
this.outliner = null;
this.memberValuePropagation = null;
@@ -557,18 +558,18 @@
if (memberValuePropagation != null) {
memberValuePropagation.rewriteWithConstantValues(code, method.method.holder);
}
- if (options.removeSwitchMaps && appInfo.hasLiveness()) {
+ if (options.enableSwitchMapRemoval && appInfo.hasLiveness()) {
codeRewriter.removeSwitchMaps(code);
}
if (options.disableAssertions) {
codeRewriter.disableAssertions(code);
}
- if (options.addNonNull && nonNullMarker != null) {
- nonNullMarker.addNonNull(code);
+ if (options.enableNonNullTracking && nonNullTracker != null) {
+ nonNullTracker.addNonNull(code);
assert code.isConsistentSSA();
}
TypeEnvironment typeEnvironment = TypeAnalysis.getDefaultTypeEnvironment();
- if (options.inlineAccessors && inliner != null) {
+ if (options.enableInlining && inliner != null) {
typeEnvironment = new TypeAnalysis(appInfo, method, code);
// TODO(zerny): Should we support inlining in debug mode? b/62937285
assert !options.debug;
@@ -586,8 +587,8 @@
codeRewriter.rewriteSwitch(code);
codeRewriter.processMethodsNeverReturningNormally(code);
codeRewriter.simplifyIf(code, typeEnvironment);
- if (options.addNonNull && nonNullMarker != null) {
- nonNullMarker.cleanupNonNull(code);
+ if (options.enableNonNullTracking && nonNullTracker != null) {
+ nonNullTracker.cleanupNonNull(code);
assert code.isConsistentSSA();
}
if (!options.debug) {
@@ -675,7 +676,7 @@
private void markProcessed(DexEncodedMethod method, IRCode code, OptimizationFeedback feedback) {
// After all the optimizations have take place, we compute whether method should be inlinedex.
Constraint state;
- if (!options.inlineAccessors || inliner == null) {
+ if (!options.enableInlining || inliner == null) {
state = Constraint.NEVER;
} else {
state = inliner.computeInliningConstraint(code, method);
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 bc0cd04..51d3f6e 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
@@ -269,8 +269,8 @@
if (!target.isProcessed()) {
new LensCodeRewriter(graphLense, appInfo).rewrite(code, target);
}
- if (options.addNonNull) {
- new NonNullMarker().addNonNull(code);
+ if (options.enableNonNullTracking) {
+ new NonNullTracker().addNonNull(code);
}
return code;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
similarity index 99%
rename from src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java
rename to src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index 9bc2918..9f15bc2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -20,9 +20,9 @@
import java.util.ListIterator;
import java.util.Set;
-public class NonNullMarker {
+public class NonNullTracker {
- public NonNullMarker() {
+ public NonNullTracker() {
}
@VisibleForTesting
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index 4181f7e..03c4c33 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -37,7 +37,7 @@
}
public NamingLens run(Timing timing) {
- assert !options.skipMinification;
+ assert options.enableMinification;
timing.begin("MinifyClasses");
Map<DexType, DexString> classRenaming =
new ClassNameMinifier(appInfo, rootSet, options).computeRenaming(timing);
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 3b795af..871812a 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -93,7 +93,7 @@
}
DexClass definition = appInfo.definitionFor(annotationType);
// TODO(73102187): How to handle annotations without definition.
- if (options.useTreeShaking && definition == null) {
+ if (options.enableTreeShaking && definition == null) {
return false;
}
return definition == null || definition.isLibraryClass()
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index 9a57b07..27a6405 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -41,8 +41,7 @@
public DexApplication run() {
application.timing.begin("Pruning application...");
- if (options.debugKeepRules && !options.skipMinification) {
-
+ if (options.debugKeepRules && options.enableMinification) {
options.reporter.info(
new StringDiagnostic(
"Debugging keep rules on a minified build might yield broken builds, as "
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index e34ec89..8c3c6ed 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -65,6 +65,15 @@
this.reporter = reporter;
this.proguardConfiguration = proguardConfiguration;
itemFactory = proguardConfiguration.getDexItemFactory();
+ // -dontoptimize disables optimizations by flipping related flags.
+ if (!proguardConfiguration.isOptimizing()) {
+ enableClassMerging = false;
+ enableNonNullTracking = false;
+ enableInlining = false;
+ enableSwitchMapRemoval = false;
+ outline.enabled = false;
+ enableValuePropagation = false;
+ }
}
public boolean printTimes = false;
@@ -73,12 +82,12 @@
public boolean passthroughDexCode = false;
// Optimization-related flags. These should conform to -dontoptimize.
- public boolean skipClassMerging = true;
- public boolean addNonNull = true;
- public boolean inlineAccessors = true;
- public boolean removeSwitchMaps = true;
+ public boolean enableClassMerging = false;
+ public boolean enableNonNullTracking = true;
+ public boolean enableInlining = true;
+ public boolean enableSwitchMapRemoval = true;
public final OutlineOptions outline = new OutlineOptions();
- public boolean propagateMemberValue = true;
+ public boolean enableValuePropagation = true;
// Number of threads to use while processing the dex files.
public int numberOfThreads = ThreadUtils.NOT_SPECIFIED;
@@ -162,14 +171,14 @@
// to disable the check that the build makes sense for multi-dexing.
public boolean enableMainDexListCheck = true;
- public boolean useTreeShaking = true;
+ public boolean enableTreeShaking = true;
public boolean printCfg = false;
public String printCfgFile;
public boolean ignoreMissingClasses = false;
// EXPERIMENTAL flag to get behaviour as close to Proguard as possible.
public boolean forceProguardCompatibility = false;
- public boolean skipMinification = false;
+ public boolean enableMinification = true;
public boolean disableAssertions = true;
public boolean debugKeepRules = false;