Disable switch map removal in D8.
Bug:
Change-Id: I9e5ccf9fd2bded67268a1718b3bb4f6c6adacce7
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index a3d92ac..b4a83a4 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -26,7 +26,9 @@
*/
public class D8Command extends BaseCommand {
- /** Builder for constructing a D8Command. */
+ /**
+ * Builder for constructing a D8Command.
+ */
public static class Builder extends BaseCommand.Builder<D8Command, Builder> {
private Builder() {
@@ -42,7 +44,9 @@
return this;
}
- /** Build the final D8Command. */
+ /**
+ * Build the final D8Command.
+ */
@Override
public D8Command build() throws CompilationException {
if (isPrintHelp() || isPrintVersion()) {
@@ -148,6 +152,8 @@
internal.allowAccessModification = false;
assert internal.inlineAccessors;
internal.inlineAccessors = false;
+ assert internal.removeSwitchMaps;
+ internal.removeSwitchMaps = false;
assert internal.outline.enabled;
internal.outline.enabled = false;
internal.lazyClasspathLoading = true;
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 091714a..d12109e 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
@@ -426,7 +426,9 @@
if (memberValuePropagation != null) {
memberValuePropagation.rewriteWithConstantValues(code);
}
- codeRewriter.removeSwitchMaps(code);
+ if (options.removeSwitchMaps) {
+ codeRewriter.removeSwitchMaps(code);
+ }
if (options.inlineAccessors && inliner != null) {
inliner.performInlining(method, code, callGraph);
}
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 f584e85..7f13315 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -70,6 +70,7 @@
public String packagePrefix = "";
public boolean allowAccessModification = true;
public boolean inlineAccessors = true;
+ public boolean removeSwitchMaps = true;
public final OutlineOptions outline = new OutlineOptions();
public boolean debugKeepRules = false;
public final AttributeRemovalOptions attributeRemoval = new AttributeRemovalOptions();