Apply individual intrinsic recognition during inliner.

Rationale:
Inliner could introduce new method calls, in particular
it could change invoke-interface to invoke-virtual,
which could expose new intrinsics. This situation
happens, for example, in Kotlin generated code where
String operations first go through the CharSequence
interface. Rather than running a full new phase,
we just recognize intrinsics when interface calls
are replaced by virtual calls.

This optimization boosts KotlinMicroItems by 100%

Test: test-art-host test-art-target

Change-Id: Ibd0519283d67ed6997b056e34b4eafdd49fcbc2d
diff --git a/compiler/optimizing/intrinsics.h b/compiler/optimizing/intrinsics.h
index 818d7f6..8088ab2 100644
--- a/compiler/optimizing/intrinsics.h
+++ b/compiler/optimizing/intrinsics.h
@@ -44,6 +44,11 @@
 
   void Run() OVERRIDE;
 
+  // Static helper that recognizes intrinsic call. Returns true on success.
+  // If it fails due to invoke type mismatch, wrong_invoke_type is set.
+  // Useful to recognize intrinsics on invidual calls outside this full pass.
+  static bool Recognize(HInvoke* invoke, /*out*/ bool* wrong_invoke_type);
+
   static constexpr const char* kIntrinsicsRecognizerPassName = "intrinsics_recognition";
 
  private: