Add compiler support for @NeverInline

This change sets methods as not inlineable if they are annotated with
@NeverInline. This is done by adding a new method in
dex_file_annotations.h that checks if a method is annotated, similar
to @NeverCompile.

Bug: 246530973
Change-Id: I5851fd85367f49d7af3201a7a3ef766f669401e9
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc
index cdd8fb2..cfde561 100644
--- a/compiler/optimizing/inliner.cc
+++ b/compiler/optimizing/inliner.cc
@@ -1379,6 +1379,15 @@
     return false;
   }
 
+  if (annotations::MethodIsNeverInline(*method->GetDexFile(),
+                                       method->GetClassDef(),
+                                       method->GetDexMethodIndex())) {
+    LOG_FAIL(stats_, MethodCompilationStat::kNotInlinedNeverInlineAnnotation)
+        << "Method " << method->PrettyMethod()
+        << " has the @NeverInline annotation so it won't be inlined";
+    return false;
+  }
+
   return true;
 }
 
diff --git a/compiler/optimizing/optimizing_compiler_stats.h b/compiler/optimizing/optimizing_compiler_stats.h
index 5e316ba..18b3a60 100644
--- a/compiler/optimizing/optimizing_compiler_stats.h
+++ b/compiler/optimizing/optimizing_compiler_stats.h
@@ -96,6 +96,7 @@
   kNotInlinedTryCatchCallee,
   kNotInlinedRegisterAllocator,
   kNotInlinedCannotBuild,
+  kNotInlinedNeverInlineAnnotation,
   kNotInlinedNotCompilable,
   kNotInlinedNotVerified,
   kNotInlinedCodeItem,