DuplicateCheckNull after lens is applied
Change-Id: I279a756570f8f7f03a03d1a0cd15626aeeb99212
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index eb38f33..3125c3d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -63,7 +63,7 @@
public class EnumUnboxingRewriter implements CustomLensCodeRewriter {
private final AppView<AppInfoWithLiveness> appView;
- private final Map<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping;
+ private Map<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping;
private final DexItemFactory factory;
private final InternalOptions options;
private final EnumDataMap unboxedEnumsData;
@@ -71,17 +71,20 @@
EnumUnboxingRewriter(
AppView<AppInfoWithLiveness> appView,
- Map<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping,
EnumDataMap unboxedEnumsInstanceFieldData,
EnumUnboxingUtilityClasses utilityClasses) {
this.appView = appView;
- this.checkNotNullToCheckNotZeroMapping = checkNotNullToCheckNotZeroMapping;
this.factory = appView.dexItemFactory();
this.options = appView.options();
this.unboxedEnumsData = unboxedEnumsInstanceFieldData;
this.utilityClasses = utilityClasses;
}
+ public void setCheckNotNullToCheckNotZeroMapping(
+ Map<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping) {
+ this.checkNotNullToCheckNotZeroMapping = checkNotNullToCheckNotZeroMapping;
+ }
+
private LocalEnumUnboxingUtilityClass getLocalUtilityClass(DexType enumType) {
return utilityClasses.getLocalUtilityClass(unboxedEnumsData.representativeType(enumType));
}
@@ -649,6 +652,7 @@
return;
}
+ assert checkNotNullToCheckNotZeroMapping != null;
if (singleTarget.isProgramMethod()
&& checkNotNullToCheckNotZeroMapping.containsKey(singleTarget.getReference())) {
DexMethod checkNotZeroMethodReference =
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index 8910375..c4d4254 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -154,16 +154,11 @@
new ConcurrentMethodFixup(appView, this)
.fixupClassesConcurrentlyByConnectedProgramComponents(Timing.empty(), executorService);
- // Create mapping from checkNotNull() to checkNotZero() methods.
- BiMap<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping =
- duplicateCheckNotNullMethods(converter, executorService);
-
// Install the new graph lens before processing any checkNotZero() methods.
Set<DexMethod> dispatchMethodReferences = Sets.newIdentityHashSet();
dispatchMethods.forEach((method, code) -> dispatchMethodReferences.add(method.getReference()));
EnumUnboxingRewriter enumUnboxingRewriter =
- new EnumUnboxingRewriter(
- appView, checkNotNullToCheckNotZeroMapping, enumDataMap, utilityClasses);
+ new EnumUnboxingRewriter(appView, enumDataMap, utilityClasses);
EnumUnboxingLens lens =
lensBuilder.build(appView, dispatchMethodReferences, enumUnboxingRewriter);
appView.rewriteWithLens(lens, executorService, timing);
@@ -171,6 +166,11 @@
// Rewrite outliner with lens.
converter.outliner.rewriteWithLens();
+ // Create mapping from checkNotNull() to checkNotZero() methods.
+ BiMap<DexMethod, DexMethod> checkNotNullToCheckNotZeroMapping =
+ duplicateCheckNotNullMethods(converter, executorService);
+ enumUnboxingRewriter.setCheckNotNullToCheckNotZeroMapping(checkNotNullToCheckNotZeroMapping);
+
dispatchMethods.forEach((method, code) -> code.setCodeLens(lens));
profileCollectionAdditions
.setArtProfileCollection(appView.getArtProfileCollection())