diff --git a/src/main/java/com/android/tools/r8/ir/analysis/path/PathConstraintSupplier.java b/src/main/java/com/android/tools/r8/ir/analysis/path/PathConstraintSupplier.java
new file mode 100644
index 0000000..cb81605
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/analysis/path/PathConstraintSupplier.java
@@ -0,0 +1,41 @@
+// Copyright (c) 2024, 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.ir.analysis.path;
+
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.ir.analysis.framework.intraprocedural.DataflowAnalysisResult.SuccessfulDataflowAnalysisResult;
+import com.android.tools.r8.ir.analysis.path.state.PathConstraintAnalysisState;
+import com.android.tools.r8.ir.code.BasicBlock;
+import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.optimize.argumentpropagation.codescanner.MethodParameterFactory;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
+
+public class PathConstraintSupplier {
+
+  private final AppView<AppInfoWithLiveness> appView;
+  private final IRCode code;
+  private final MethodParameterFactory methodParameterFactory;
+
+  private SuccessfulDataflowAnalysisResult<BasicBlock, PathConstraintAnalysisState>
+      pathConstraintAnalysisResult;
+
+  public PathConstraintSupplier(
+      AppView<AppInfoWithLiveness> appView,
+      IRCode code,
+      MethodParameterFactory methodParameterFactory) {
+    this.appView = appView;
+    this.code = code;
+    this.methodParameterFactory = methodParameterFactory;
+  }
+
+  public PathConstraintAnalysisState getPathConstraint(BasicBlock block) {
+    if (pathConstraintAnalysisResult == null) {
+      PathConstraintAnalysis analysis =
+          new PathConstraintAnalysis(appView, code, methodParameterFactory);
+      pathConstraintAnalysisResult = analysis.run(code.entryBlock()).asSuccessfulAnalysisResult();
+      assert pathConstraintAnalysisResult != null;
+    }
+    return pathConstraintAnalysisResult.getBlockExitState(block);
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
index a17aa98..2273dbb 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.graph.ImmediateProgramSubtypingInfo;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.PrunedItems;
+import com.android.tools.r8.ir.analysis.path.PathConstraintSupplier;
 import com.android.tools.r8.ir.code.AbstractValueSupplier;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.conversion.IRConverter;
@@ -128,7 +129,9 @@
       assert methodProcessor.isPrimaryMethodProcessor();
       AbstractValueSupplier abstractValueSupplier =
           value -> value.getAbstractValue(appView, method);
-      codeScanner.scan(method, code, abstractValueSupplier, timing);
+      PathConstraintSupplier pathConstraintSupplier =
+          new PathConstraintSupplier(appView, code, codeScanner.getMethodParameterFactory());
+      codeScanner.scan(method, code, abstractValueSupplier, pathConstraintSupplier, timing);
 
       assert effectivelyUnusedArgumentsAnalysis != null;
       effectivelyUnusedArgumentsAnalysis.scan(method, code);
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index a3961f0..ba31341 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -14,10 +14,8 @@
 import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.analysis.framework.intraprocedural.DataflowAnalysisResult.SuccessfulDataflowAnalysisResult;
-import com.android.tools.r8.ir.analysis.path.PathConstraintAnalysis;
+import com.android.tools.r8.ir.analysis.path.PathConstraintSupplier;
 import com.android.tools.r8.ir.analysis.path.state.ConcretePathConstraintAnalysisState;
-import com.android.tools.r8.ir.analysis.path.state.PathConstraintAnalysisState;
 import com.android.tools.r8.ir.analysis.type.DynamicType;
 import com.android.tools.r8.ir.analysis.type.DynamicTypeWithUpperBound;
 import com.android.tools.r8.ir.analysis.type.Nullability;
@@ -111,7 +109,7 @@
 
   private final FieldValueFactory fieldValueFactory = new FieldValueFactory();
 
-  private final MethodParameterFactory methodParameterFactory = new MethodParameterFactory();
+  final MethodParameterFactory methodParameterFactory = new MethodParameterFactory();
 
   private final Set<DexMethod> monomorphicVirtualMethods = Sets.newIdentityHashSet();
 
@@ -163,6 +161,10 @@
     return fieldStates;
   }
 
+  public MethodParameterFactory getMethodParameterFactory() {
+    return methodParameterFactory;
+  }
+
   public MethodStateCollectionByReference getMethodStates() {
     return methodStates;
   }
@@ -228,8 +230,9 @@
       ProgramMethod method,
       IRCode code,
       AbstractValueSupplier abstractValueSupplier,
+      PathConstraintSupplier pathConstraintSupplier,
       Timing timing) {
-    new CodeScanner(abstractValueSupplier, code, method).scan(timing);
+    new CodeScanner(abstractValueSupplier, code, method, pathConstraintSupplier).scan(timing);
   }
 
   protected class CodeScanner {
@@ -237,16 +240,19 @@
     protected final AbstractValueSupplier abstractValueSupplier;
     protected final IRCode code;
     protected final ProgramMethod context;
+    private final PathConstraintSupplier pathConstraintSupplier;
 
-    private SuccessfulDataflowAnalysisResult<BasicBlock, PathConstraintAnalysisState>
-        pathConstraintAnalysisResult;
     private Object2IntMap<Phi> phiNumbering = null;
 
     protected CodeScanner(
-        AbstractValueSupplier abstractValueSupplier, IRCode code, ProgramMethod method) {
+        AbstractValueSupplier abstractValueSupplier,
+        IRCode code,
+        ProgramMethod method,
+        PathConstraintSupplier pathConstraintSupplier) {
       this.abstractValueSupplier = abstractValueSupplier;
       this.code = code;
       this.context = method;
+      this.pathConstraintSupplier = pathConstraintSupplier;
     }
 
     public void scan(Timing timing) {
@@ -419,9 +425,13 @@
         return null;
       }
       ConcretePathConstraintAnalysisState leftPredecessorPathConstraint =
-          getPathConstraint(phi.getBlock().getPredecessors().get(0)).asConcreteState();
+          pathConstraintSupplier
+              .getPathConstraint(phi.getBlock().getPredecessors().get(0))
+              .asConcreteState();
       ConcretePathConstraintAnalysisState rightPredecessorPathConstraint =
-          getPathConstraint(phi.getBlock().getPredecessors().get(1)).asConcreteState();
+          pathConstraintSupplier
+              .getPathConstraint(phi.getBlock().getPredecessors().get(1))
+              .asConcreteState();
       if (leftPredecessorPathConstraint == null || rightPredecessorPathConstraint == null) {
         return null;
       }
@@ -913,16 +923,6 @@
       }
     }
 
-    private PathConstraintAnalysisState getPathConstraint(BasicBlock block) {
-      if (pathConstraintAnalysisResult == null) {
-        PathConstraintAnalysis analysis =
-            new PathConstraintAnalysis(appView, code, methodParameterFactory);
-        pathConstraintAnalysisResult = analysis.run(code.entryBlock()).asSuccessfulAnalysisResult();
-        assert pathConstraintAnalysisResult != null;
-      }
-      return pathConstraintAnalysisResult.getBlockExitState(block);
-    }
-
     @SuppressWarnings("ReferenceEquality")
     private DexMethod getRepresentative(InvokeMethod invoke, ProgramMethod resolvedMethod) {
       if (resolvedMethod.getDefinition().belongsToDirectPool()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorCodeScannerForComposableFunctions.java b/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorCodeScannerForComposableFunctions.java
index 2116f3a..371af3d 100644
--- a/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorCodeScannerForComposableFunctions.java
+++ b/src/main/java/com/android/tools/r8/optimize/compose/ArgumentPropagatorCodeScannerForComposableFunctions.java
@@ -6,6 +6,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.ir.analysis.path.PathConstraintSupplier;
 import com.android.tools.r8.ir.code.AbstractValueSupplier;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.InvokeMethod;
@@ -30,8 +31,9 @@
       ProgramMethod method,
       IRCode code,
       AbstractValueSupplier abstractValueSupplier,
+      PathConstraintSupplier pathConstraintSupplier,
       Timing timing) {
-    new CodeScanner(abstractValueSupplier, code, method).scan(timing);
+    new CodeScanner(abstractValueSupplier, code, method, pathConstraintSupplier).scan(timing);
   }
 
   @Override
@@ -44,8 +46,11 @@
   private class CodeScanner extends ArgumentPropagatorCodeScanner.CodeScanner {
 
     protected CodeScanner(
-        AbstractValueSupplier abstractValueSupplier, IRCode code, ProgramMethod method) {
-      super(abstractValueSupplier, code, method);
+        AbstractValueSupplier abstractValueSupplier,
+        IRCode code,
+        ProgramMethod method,
+        PathConstraintSupplier pathConstraintSupplier) {
+      super(abstractValueSupplier, code, method, pathConstraintSupplier);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java b/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
index 210a674..3b51e7c 100644
--- a/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
+++ b/src/main/java/com/android/tools/r8/optimize/compose/ComposeMethodProcessor.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.analysis.constant.SparseConditionalConstantPropagation;
+import com.android.tools.r8.ir.analysis.path.PathConstraintSupplier;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
 import com.android.tools.r8.ir.code.AbstractValueSupplier;
 import com.android.tools.r8.ir.code.IRCode;
@@ -233,7 +234,9 @@
           assert abstractValue != null;
           return abstractValue;
         };
-    codeScanner.scan(method, code, abstractValueSupplier, timing);
+    PathConstraintSupplier pathConstraintSupplier =
+        new PathConstraintSupplier(appView, code, codeScanner.getMethodParameterFactory());
+    codeScanner.scan(method, code, abstractValueSupplier, pathConstraintSupplier, timing);
   }
 
   public boolean isProcessed(ComposableCallGraphNode node) {
