Avoid merging classes matched by -checkdiscard

Change-Id: I96934470c741b374921238c636aaf79f884cb947
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/PolicyScheduler.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/PolicyScheduler.java
index eea0202..162ad98 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/PolicyScheduler.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/PolicyScheduler.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.horizontalclassmerging.policies.LimitClassGroups;
 import com.android.tools.r8.horizontalclassmerging.policies.MinimizeInstanceFieldCasts;
 import com.android.tools.r8.horizontalclassmerging.policies.NoAnnotationClasses;
+import com.android.tools.r8.horizontalclassmerging.policies.NoCheckDiscard;
 import com.android.tools.r8.horizontalclassmerging.policies.NoClassAnnotationCollisions;
 import com.android.tools.r8.horizontalclassmerging.policies.NoClassInitializerWithObservableSideEffects;
 import com.android.tools.r8.horizontalclassmerging.policies.NoConstructorCollisions;
@@ -103,6 +104,7 @@
       ImmutableList.Builder<SingleClassPolicy> builder) {
     builder.add(
         new CheckSyntheticClasses(appView),
+        new NoCheckDiscard(appView),
         new NoKeepRules(appView),
         new NoClassInitializerWithObservableSideEffects());
   }
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoCheckDiscard.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoCheckDiscard.java
new file mode 100644
index 0000000..1266e1d
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoCheckDiscard.java
@@ -0,0 +1,33 @@
+// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.horizontalclassmerging.policies;
+
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.horizontalclassmerging.SingleClassPolicy;
+import com.android.tools.r8.shaking.KeepInfoCollection;
+import com.android.tools.r8.utils.InternalOptions;
+
+public class NoCheckDiscard extends SingleClassPolicy {
+
+  private final KeepInfoCollection keepInfo;
+  private final InternalOptions options;
+
+  public NoCheckDiscard(AppView<? extends AppInfoWithClassHierarchy> appView) {
+    this.keepInfo = appView.getKeepInfo();
+    this.options = appView.options();
+  }
+
+  @Override
+  public boolean canMerge(DexProgramClass clazz) {
+    return !keepInfo.getClassInfo(clazz).isCheckDiscardedEnabled(options);
+  }
+
+  @Override
+  public String getName() {
+    return "NoCheckDiscard";
+  }
+}