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 f11809d..844ccce 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
@@ -842,9 +842,6 @@
       if (libraryMethodOverrideAnalysis != null) {
         libraryMethodOverrideAnalysis.logResults();
       }
-      if (uninstantiatedTypeOptimization != null) {
-        uninstantiatedTypeOptimization.logResults();
-      }
       if (stringOptimizer != null) {
         stringOptimizer.logResult();
       }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
index 6077882..22f8edf 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UninstantiatedTypeOptimization.java
@@ -105,12 +105,6 @@
   private final AppView<AppInfoWithLiveness> appView;
   private final TypeChecker typeChecker;
 
-  private int numberOfInstanceGetOrInstancePutWithNullReceiver = 0;
-  private int numberOfArrayInstructionsWithNullArray = 0;
-  private int numberOfInvokesWithNullArgument = 0;
-  private int numberOfInvokesWithNullReceiver = 0;
-  private int numberOfMonitorWithNullReceiver = 0;
-
   public UninstantiatedTypeOptimization(AppView<AppInfoWithLiveness> appView) {
     this.appView = appView;
     this.typeChecker = new TypeChecker(appView);
@@ -353,19 +347,6 @@
         if (instruction.throwsOnNullInput()) {
           Value couldBeNullValue = instruction.getNonNullInput();
           if (isThrowNullCandidate(couldBeNullValue, instruction, appView, code.context())) {
-            if (instruction.isInstanceGet() || instruction.isInstancePut()) {
-              ++numberOfInstanceGetOrInstancePutWithNullReceiver;
-            } else if (instruction.isInvokeMethodWithReceiver()) {
-              ++numberOfInvokesWithNullReceiver;
-            } else if (instruction.isArrayGet()
-                || instruction.isArrayPut()
-                || instruction.isArrayLength()) {
-              ++numberOfArrayInstructionsWithNullArray;
-            } else if (instruction.isMonitor()) {
-              ++numberOfMonitorWithNullReceiver;
-            } else {
-              assert false;
-            }
             instructionIterator.replaceCurrentInstructionWithThrowNull(
                 appView, code, blockIterator, blocksToBeRemoved, valuesToNarrow);
             continue;
@@ -421,24 +402,6 @@
     return true;
   }
 
-  public void logResults() {
-    assert Log.ENABLED;
-    Log.info(
-        getClass(),
-        "Number of instance-get/instance-put with null receiver: %s",
-        numberOfInstanceGetOrInstancePutWithNullReceiver);
-    Log.info(
-        getClass(),
-        "Number of array instructions with null reference: %s",
-        numberOfArrayInstructionsWithNullArray);
-    Log.info(
-        getClass(), "Number of invokes with null argument: %s", numberOfInvokesWithNullArgument);
-    Log.info(
-        getClass(), "Number of invokes with null receiver: %s", numberOfInvokesWithNullReceiver);
-    Log.info(
-        getClass(), "Number of monitor with null receiver: %s", numberOfMonitorWithNullReceiver);
-  }
-
   // instance-{get|put} with a null receiver has already been rewritten to `throw null`.
   // At this point, field-instruction whose target field type is uninstantiated will be handled.
   private void rewriteFieldInstruction(
