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 40c2ce3..674493f 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
@@ -59,7 +59,6 @@
 import com.android.tools.r8.ir.optimize.inliner.InliningReasonStrategy;
 import com.android.tools.r8.ir.optimize.inliner.NopWhyAreYouNotInliningReporter;
 import com.android.tools.r8.ir.optimize.inliner.WhyAreYouNotInliningReporter;
-import com.android.tools.r8.kotlin.Kotlin;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.shaking.MainDexInfo;
 import com.android.tools.r8.utils.InternalOptions;
@@ -71,7 +70,6 @@
 import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -86,7 +84,6 @@
 
   protected final AppView<AppInfoWithLiveness> appView;
   private final IRConverter converter;
-  private final Set<DexMethod> extraNeverInlineMethods;
   private final LensCodeRewriter lensCodeRewriter;
   final MainDexInfo mainDexInfo;
 
@@ -107,17 +104,8 @@
       AppView<AppInfoWithLiveness> appView,
       IRConverter converter,
       LensCodeRewriter lensCodeRewriter) {
-    Kotlin.Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
     this.appView = appView;
     this.converter = converter;
-    this.extraNeverInlineMethods =
-        appView.options().kotlinOptimizationOptions().disableKotlinSpecificOptimizations
-            ? ImmutableSet.of()
-            : ImmutableSet.of(
-                intrinsics.throwNpe,
-                intrinsics.throwParameterIsNullException,
-                intrinsics.throwParameterIsNullNPE,
-                intrinsics.throwParameterIsNullIAE);
     this.lensCodeRewriter = lensCodeRewriter;
     this.mainDexInfo = appView.appInfo().getMainDexInfo();
     this.singleInlineCallers =
@@ -140,12 +128,6 @@
       return true;
     }
 
-    if (extraNeverInlineMethods.contains(
-        appView.graphLens().getOriginalMethodSignature(singleTargetReference))) {
-      whyAreYouNotInliningReporter.reportExtraNeverInline();
-      return true;
-    }
-
     if (appInfo.isNeverInlineMethod(singleTargetReference)) {
       whyAreYouNotInliningReporter.reportMarkedAsNeverInline();
       return true;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
index 218a8fc..cc7d4ec 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
@@ -22,9 +22,6 @@
   }
 
   @Override
-  public void reportExtraNeverInline() {}
-
-  @Override
   public void reportCallerNotSameClass() {}
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
index 8063674..66d6108 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
@@ -45,8 +45,6 @@
     }
   }
 
-  public abstract void reportExtraNeverInline();
-
   public abstract void reportCallerNotSameClass();
 
   public abstract void reportCallerNotSameNest();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
index f9418b4..94632b6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
@@ -48,11 +48,6 @@
   }
 
   @Override
-  public void reportExtraNeverInline() {
-    print("method is marked as an additional never inline method.");
-  }
-
-  @Override
   public void reportCallerNotSameClass() {
     print("inlinee can only be inlined into methods in the same class.");
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index 4aaea25..2d2611f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -259,9 +259,11 @@
               String kotlinIntrinsics = "void kotlin.jvm.internal.Intrinsics";
               assertEquals(
                   Lists.newArrayList(
-                      kotlinc.is(KOTLINC_1_3_72)
-                          ? kotlinIntrinsics + ".throwParameterIsNullException(java.lang.String)"
-                          : kotlinIntrinsics + ".throwParameterIsNullNPE(java.lang.String)"),
+                      kotlinIntrinsics
+                          + (kotlinc.is(KOTLINC_1_3_72)
+                              ? ".checkParameterIsNotNull"
+                              : ".checkNotNullParameter")
+                          + "(java.lang.Object, java.lang.String)"),
                   collectStaticCalls(clazz, "main", String[].class.getCanonicalName()));
             });
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index 802be75..da2f568 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -78,10 +78,10 @@
               long checkParameterIsNotNull = countCall(main, "checkParameterIsNotNull");
               long checkNotNullParameter = countCall(main, "checkNotNullParameter");
               if (kotlinParameters.is(KotlinCompilerVersion.KOTLINC_1_3_72)) {
-                assertEquals(allowAccessModification ? 0 : 1, checkParameterIsNotNull);
+                assertEquals(1, checkParameterIsNotNull);
                 assertEquals(0, checkNotNullParameter);
               } else {
-                assertEquals(allowAccessModification ? 0 : 1, checkNotNullParameter);
+                assertEquals(1, checkNotNullParameter);
                 assertEquals(0, checkParameterIsNotNull);
               }
             });
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index c407a5b..37dd2b3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -76,9 +76,7 @@
               MethodSubject isSupported = main.uniqueMethodWithName("isSupported");
               assertThat(isSupported, isPresent());
               assertEquals(
-                  !kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72) || allowAccessModification
-                      ? 0
-                      : 1,
+                  kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72) ? 1 : 0,
                   countCall(isSupported, "checkParameterIsNotNull"));
 
               // In general cases, null check won't be invoked only once or twice, hence no subtle
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index 142e48d..d8a7e1c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -62,15 +62,25 @@
                               "throwParameterIsNullException",
                               "void",
                               Collections.singletonList("java.lang.String")),
-                          // throwParameterIsNullException is not added for test starting from 1.4
-                          kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
+                          false)
+                      .put(
+                          new MethodSignature(
+                              "throwParameterIsNullNPE",
+                              "void",
+                              Collections.singletonList("java.lang.String")),
+                          false)
                       .put(
                           new MethodSignature(
                               "checkParameterIsNotNull",
                               "void",
                               Lists.newArrayList("java.lang.Object", "java.lang.String")),
-                          kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72)
-                              && !allowAccessModification)
+                          kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
+                      .put(
+                          new MethodSignature(
+                              "checkNotNullParameter",
+                              "void",
+                              Lists.newArrayList("java.lang.Object", "java.lang.String")),
+                          !kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
                       .build());
             });
   }
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index e6f1c6d..63cacfc 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -118,7 +118,7 @@
     boolean metKotlinIntrinsicsNullChecks = false;
     while (it.hasNext()) {
       DexMethod invokedMethod = it.next().getMethod();
-      if (invokedMethod.holder.toSourceString().contains("java.net")) {
+      if (invokedMethod.holder.getTypeName().contains("java.net")) {
         continue;
       }
       ClassSubject invokedMethodHolderSubject =
@@ -165,7 +165,11 @@
                     "-neverinline class **." + targetClassName + " { <methods>; }",
                     "-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
                     "  *** checkParameterIsNotNull(...);",
+                    "}",
+                    "-neversinglecallerinline class kotlin.jvm.internal.Intrinsics {",
+                    "  *** checkParameterIsNotNull(...);",
                     "}"))
+            .addNeverSingleCallerInlineAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minification)
             .compile()
