diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index fd3ec8c..f9dc4e2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -51,7 +51,6 @@
 import com.android.tools.r8.ir.conversion.PostMethodProcessor;
 import com.android.tools.r8.ir.optimize.SimpleDominatingEffectAnalysis.SimpleEffectAnalysisResult;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
-import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackIgnore;
 import com.android.tools.r8.ir.optimize.inliner.DefaultInliningReasonStrategy;
 import com.android.tools.r8.ir.optimize.inliner.InliningIRProvider;
 import com.android.tools.r8.ir.optimize.inliner.InliningReasonStrategy;
@@ -897,19 +896,13 @@
       ProgramMethod method,
       IRCode code,
       Map<? extends InvokeMethod, InliningInfo> invokesToInline,
+      OptimizationFeedback feedback,
       InliningIRProvider inliningIRProvider,
       MethodProcessor methodProcessor,
       Timing timing) {
     ForcedInliningOracle oracle = new ForcedInliningOracle(appView, invokesToInline);
     performInliningImpl(
-        oracle,
-        oracle,
-        method,
-        code,
-        OptimizationFeedbackIgnore.getInstance(),
-        inliningIRProvider,
-        methodProcessor,
-        timing);
+        oracle, oracle, method, code, feedback, inliningIRProvider, methodProcessor, timing);
   }
 
   public void performInlining(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index 08ff606..b192f8a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -209,7 +209,8 @@
         // Inline the class instance.
         AffectedValues affectedValues = new AffectedValues();
         try {
-          anyInlinedMethods |= processor.processInlining(code, affectedValues, inliningIRProvider);
+          anyInlinedMethods |=
+              processor.processInlining(code, affectedValues, feedback, inliningIRProvider);
         } catch (IllegalClassInlinerStateException e) {
           // We introduced a user that we cannot handle in the class inliner as a result of force
           // inlining. Abort gracefully from class inlining without removing the instance.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 7935419..9456799 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -63,6 +63,7 @@
 import com.android.tools.r8.ir.optimize.classinliner.constraint.ClassInlinerMethodConstraint;
 import com.android.tools.r8.ir.optimize.info.FieldOptimizationInfo;
 import com.android.tools.r8.ir.optimize.info.MethodOptimizationInfo;
+import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
 import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfo;
 import com.android.tools.r8.ir.optimize.inliner.InliningIRProvider;
 import com.android.tools.r8.ir.optimize.inliner.NopWhyAreYouNotInliningReporter;
@@ -361,13 +362,17 @@
   //
   // Returns `true` if at least one method was inlined.
   boolean processInlining(
-      IRCode code, AffectedValues affectedValues, InliningIRProvider inliningIRProvider)
+      IRCode code,
+      AffectedValues affectedValues,
+      OptimizationFeedback feedback,
+      InliningIRProvider inliningIRProvider)
       throws IllegalClassInlinerStateException {
     // Verify that `eligibleInstance` is not aliased.
     assert eligibleInstance == eligibleInstance.getAliasedValue();
 
-    boolean anyInlinedMethods = forceInlineDirectMethodInvocations(code, inliningIRProvider);
-    anyInlinedMethods |= forceInlineIndirectMethodInvocations(code, inliningIRProvider);
+    boolean anyInlinedMethods =
+        forceInlineDirectMethodInvocations(code, feedback, inliningIRProvider);
+    anyInlinedMethods |= forceInlineIndirectMethodInvocations(code, feedback, inliningIRProvider);
 
     rebindIndirectEligibleInstanceUsersFromPhis();
     removeMiscUsages(code, affectedValues);
@@ -379,13 +384,20 @@
 
   @SuppressWarnings("ReferenceEquality")
   private boolean forceInlineDirectMethodInvocations(
-      IRCode code, InliningIRProvider inliningIRProvider) throws IllegalClassInlinerStateException {
+      IRCode code, OptimizationFeedback feedback, InliningIRProvider inliningIRProvider)
+      throws IllegalClassInlinerStateException {
     if (directMethodCalls.isEmpty()) {
       return false;
     }
 
     inliner.performForcedInlining(
-        method, code, directMethodCalls, inliningIRProvider, methodProcessor, Timing.empty());
+        method,
+        code,
+        directMethodCalls,
+        feedback,
+        inliningIRProvider,
+        methodProcessor,
+        Timing.empty());
 
     // In case we are class inlining an object allocation that does not inherit directly from
     // java.lang.Object, we need keep force inlining the constructor until we reach
@@ -432,7 +444,13 @@
         }
         if (!directMethodCalls.isEmpty()) {
           inliner.performForcedInlining(
-              method, code, directMethodCalls, inliningIRProvider, methodProcessor, Timing.empty());
+              method,
+              code,
+              directMethodCalls,
+              feedback,
+              inliningIRProvider,
+              methodProcessor,
+              Timing.empty());
         }
       } while (!directMethodCalls.isEmpty());
     }
@@ -442,7 +460,8 @@
 
   @SuppressWarnings("ReferenceEquality")
   private boolean forceInlineIndirectMethodInvocations(
-      IRCode code, InliningIRProvider inliningIRProvider) throws IllegalClassInlinerStateException {
+      IRCode code, OptimizationFeedback feedback, InliningIRProvider inliningIRProvider)
+      throws IllegalClassInlinerStateException {
     if (indirectMethodCallsOnInstance.isEmpty()) {
       return false;
     }
@@ -513,7 +532,13 @@
 
     if (!methodCallsOnInstance.isEmpty()) {
       inliner.performForcedInlining(
-          method, code, methodCallsOnInstance, inliningIRProvider, methodProcessor, Timing.empty());
+          method,
+          code,
+          methodCallsOnInstance,
+          feedback,
+          inliningIRProvider,
+          methodProcessor,
+          Timing.empty());
     } else {
       assert indirectMethodCallsOnInstance.stream()
           .filter(method -> method.getDefinition().getOptimizationInfo().mayHaveSideEffects())
