ART: Add profile-compile-check support

Add --check-profiled-methods, which verifies that all methods mentioned
in a profile for a guided compilation are actually compiled instead of
being punted. As outcome it may log or abort dex2oat.

TODO: Extend dex2oat_test

Bug: 76145463
Test: mmma art
Test: m test-art-host
Change-Id: I956113b55796d0666db9dbfd387105a7d27b0868
diff --git a/compiler/driver/compiler_options_map-inl.h b/compiler/driver/compiler_options_map-inl.h
index 5a84495..c7334a7 100644
--- a/compiler/driver/compiler_options_map-inl.h
+++ b/compiler/driver/compiler_options_map-inl.h
@@ -81,6 +81,9 @@
     options->count_hotness_in_compiled_code_ = true;
   }
   map.AssignIfExists(Base::ResolveStartupConstStrings, &options->resolve_startup_const_strings_);
+  if (map.Exists(Base::CheckProfiledMethods)) {
+    options->check_profiled_methods_ = *map.Get(Base::CheckProfiledMethods);
+  }
 
   if (map.Exists(Base::DumpTimings)) {
     options->dump_timings_ = true;
@@ -145,6 +148,12 @@
       .Define({"--count-hotness-in-compiled-code"})
           .IntoKey(Map::CountHotnessInCompiledCode)
 
+      .Define({"--check-profiled-methods=_"})
+          .template WithType<ProfileMethodsCheck>()
+          .WithValueMap({{"log", ProfileMethodsCheck::kLog},
+                         {"abort", ProfileMethodsCheck::kAbort}})
+          .IntoKey(Map::CheckProfiledMethods)
+
       .Define({"--dump-timings"})
           .IntoKey(Map::DumpTimings)