diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
index 47d6d0c..2b5dec7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackSimple.java
@@ -174,6 +174,16 @@
     // Ignored.
   }
 
+  public void unsetClassInlinerMethodConstraint(ProgramMethod method) {
+    if (method.getDefinition().getOptimizationInfo().isUpdatableMethodOptimizationInfo()) {
+      method
+          .getDefinition()
+          .getOptimizationInfo()
+          .asUpdatableMethodOptimizationInfo()
+          .unsetClassInlinerMethodConstraint();
+    }
+  }
+
   @Override
   public void setInstanceInitializerInfoCollection(
       DexEncodedMethod method,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/UpdatableMethodOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/UpdatableMethodOptimizationInfo.java
index 964471c..eab78bd 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/UpdatableMethodOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/UpdatableMethodOptimizationInfo.java
@@ -250,6 +250,10 @@
     this.classInlinerConstraint = classInlinerConstraint;
   }
 
+  void unsetClassInlinerMethodConstraint() {
+    this.classInlinerConstraint = ClassInlinerMethodConstraint.alwaysFalse();
+  }
+
   @Override
   public TypeElement getDynamicUpperBoundType() {
     return returnsObjectWithUpperBoundType;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
index 09790f1..ee42a87 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
@@ -141,6 +141,7 @@
       converter.markProcessed(code, feedback);
       // Fixup method optimization info (the method no longer returns a constant).
       feedback.unsetAbstractReturnValue(parentMethod.getDefinition());
+      feedback.unsetClassInlinerMethodConstraint(parentMethod);
     } else {
       return;
     }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/InstanceOfSpecializedMethodClassInlinerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/InstanceOfSpecializedMethodClassInlinerTest.java
new file mode 100644
index 0000000..125f3cd
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/InstanceOfSpecializedMethodClassInlinerTest.java
@@ -0,0 +1,64 @@
+// 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.ir.optimize.classinliner;
+
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+/** Regression test for b/195234829. */
+@RunWith(Parameterized.class)
+public class InstanceOfSpecializedMethodClassInlinerTest extends TestBase {
+
+  @Parameter public TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection setup() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  @Test
+  public void test() throws Exception {
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
+        .setMinApi(parameters.getApiLevel())
+        .compile()
+        .run(parameters.getRuntime(), Main.class)
+        .assertSuccessWithOutputLines("false", "true");
+  }
+
+  static class Main {
+
+    public static void main(String[] args) {
+      System.out.println(new A().isB());
+      System.out.println(new B().isB());
+    }
+  }
+
+  static class A {
+
+    @NeverInline
+    boolean isB() {
+      return false;
+    }
+  }
+
+  static class B extends A {
+
+    @NeverInline
+    @Override
+    boolean isB() {
+      return true;
+    }
+  }
+}
