diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 7163e4e..7ba24cf 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.OptionalBool;
 import com.android.tools.r8.graph.analysis.InitializedClassesInInstanceMethodsAnalysis.InitializedClassesInInstanceMethods;
 import com.android.tools.r8.ir.analysis.proto.GeneratedExtensionRegistryShrinker;
+import com.android.tools.r8.ir.analysis.proto.GeneratedMessageLiteShrinker;
 import com.android.tools.r8.ir.analysis.proto.ProtoShrinker;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.shaking.RootSetBuilder.RootSet;
@@ -166,6 +167,12 @@
     return defaultValue;
   }
 
+  public void withGeneratedMessageLiteShrinker(Consumer<GeneratedMessageLiteShrinker> consumer) {
+    if (protoShrinker != null && protoShrinker.generatedMessageLiteShrinker != null) {
+      consumer.accept(protoShrinker.generatedMessageLiteShrinker);
+    }
+  }
+
   public GraphLense graphLense() {
     return graphLense;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index 3b842eb..f0f35bb 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -37,11 +37,14 @@
   private final TypeLatticeElement objectArrayType;
   private final TypeLatticeElement stringType;
 
-  public GeneratedMessageLiteShrinker(AppView<AppInfoWithLiveness> appView) {
+  public GeneratedMessageLiteShrinker(
+      AppView<AppInfoWithLiveness> appView,
+      RawMessageInfoDecoder decoder,
+      ProtoReferences references) {
     this.appView = appView;
-    this.decoder = appView.protoShrinker().decoder;
+    this.decoder = decoder;
     this.encoder = new RawMessageInfoEncoder(appView.dexItemFactory());
-    this.references = appView.protoShrinker().references;
+    this.references = references;
     this.throwingInfo = ThrowingInfo.defaultForConstString(appView.options());
 
     // Types.
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
index 599bb84..21f8ff9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoShrinker.java
@@ -13,6 +13,7 @@
   public final RawMessageInfoDecoder decoder;
   public final ProtoFieldTypeFactory factory;
   public final GeneratedExtensionRegistryShrinker generatedExtensionRegistryShrinker;
+  public final GeneratedMessageLiteShrinker generatedMessageLiteShrinker;
   public final ProtoReferences references;
 
   public ProtoShrinker(AppView<AppInfoWithLiveness> appView) {
@@ -24,6 +25,10 @@
         appView.options().enableGeneratedExtensionRegistryShrinking
             ? new GeneratedExtensionRegistryShrinker(appView, references)
             : null;
+    this.generatedMessageLiteShrinker =
+        appView.options().enableGeneratedMessageLiteShrinking
+            ? new GeneratedMessageLiteShrinker(appView, decoder, references)
+            : null;
     this.references = references;
   }
 }
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 be491f4..f7d9077 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
@@ -31,7 +31,6 @@
 import com.android.tools.r8.ir.analysis.InitializedClassesOnNormalExitAnalysis;
 import com.android.tools.r8.ir.analysis.TypeChecker;
 import com.android.tools.r8.ir.analysis.constant.SparseConditionalConstantPropagation;
-import com.android.tools.r8.ir.analysis.proto.GeneratedMessageLiteShrinker;
 import com.android.tools.r8.ir.analysis.sideeffect.ClassInitializerSideEffectAnalysis;
 import com.android.tools.r8.ir.analysis.sideeffect.ClassInitializerSideEffectAnalysis.ClassInitializerSideEffect;
 import com.android.tools.r8.ir.analysis.type.Nullability;
@@ -128,7 +127,6 @@
   private final Outliner outliner;
   private final ClassInitializerDefaultsOptimization classInitializerDefaultsOptimization;
   private final DynamicTypeOptimization dynamicTypeOptimization;
-  private final GeneratedMessageLiteShrinker generatedMessageLiteShrinker;
   private final LibraryMethodOverrideAnalysis libraryMethodOverrideAnalysis;
   private final StringConcatRewriter stringConcatRewriter;
   private final StringOptimizer stringOptimizer;
@@ -212,7 +210,6 @@
       this.classInliner = null;
       this.classStaticizer = null;
       this.dynamicTypeOptimization = null;
-      this.generatedMessageLiteShrinker = null;
       this.libraryMethodOverrideAnalysis = null;
       this.inliner = null;
       this.outliner = null;
@@ -259,10 +256,6 @@
           options.enableDynamicTypeOptimization
               ? new DynamicTypeOptimization(appViewWithLiveness)
               : null;
-      this.generatedMessageLiteShrinker =
-          options.enableGeneratedMessageLiteShrinking
-              ? new GeneratedMessageLiteShrinker(appViewWithLiveness)
-              : null;
       this.libraryMethodOverrideAnalysis =
           options.enableTreeShakingOfLibraryMethodOverrides
               ? new LibraryMethodOverrideAnalysis(appViewWithLiveness)
@@ -289,7 +282,6 @@
       this.classInliner = null;
       this.classStaticizer = null;
       this.dynamicTypeOptimization = null;
-      this.generatedMessageLiteShrinker = null;
       this.libraryMethodOverrideAnalysis = null;
       this.inliner = null;
       this.outliner = null;
@@ -1074,9 +1066,7 @@
       dynamicTypeOptimization.insertAssumeDynamicTypeInstructions(code);
     }
 
-    if (generatedMessageLiteShrinker != null) {
-      generatedMessageLiteShrinker.run(method, code);
-    }
+    appView.withGeneratedMessageLiteShrinker(shrinker -> shrinker.run(method, code));
 
     previous = printMethod(code, "IR after null tracking (SSA)", previous);
 
