Add an option to specify a list of methods for LIR dumping.

An example would be:
--runtime-arg -verbose-methods:Array.checkRange32,Array.checkRange64
or
"-verbose-methods:void Array.checkRange32,void Array.checkRange64"

Change-Id: I61c1eb3b2eb4b24126a9264261c27889d53cc6bd
diff --git a/compiler/dex/frontend.cc b/compiler/dex/frontend.cc
index 1bf5fce..ed2ecac 100644
--- a/compiler/dex/frontend.cc
+++ b/compiler/dex/frontend.cc
@@ -181,6 +181,17 @@
         (cu.enable_debug & (1 << kDebugVerbose));
   }
 
+  if (gVerboseMethods.size() != 0) {
+    cu.verbose = false;
+    for (size_t i = 0; i < gVerboseMethods.size(); ++i) {
+      if (PrettyMethod(method_idx, dex_file).find(gVerboseMethods[i])
+          != std::string::npos) {
+        cu.verbose = true;
+        break;
+      }
+    }
+  }
+
   /*
    * TODO: rework handling of optimization and debug flags.  Should we split out
    * MIR and backend flags?  Need command-line setting as well.
diff --git a/runtime/base/logging.cc b/runtime/base/logging.cc
index 46b8ff2..730a2c2 100644
--- a/runtime/base/logging.cc
+++ b/runtime/base/logging.cc
@@ -26,6 +26,8 @@
 
 LogVerbosity gLogVerbosity;
 
+std::vector<std::string> gVerboseMethods;
+
 unsigned int gAborting = 0;
 
 static LogSeverity gMinimumLogSeverity = INFO;
diff --git a/runtime/base/logging.h b/runtime/base/logging.h
index fcec733..bd5ae85 100644
--- a/runtime/base/logging.h
+++ b/runtime/base/logging.h
@@ -22,6 +22,7 @@
 #include <iostream>  // NOLINT
 #include <sstream>
 #include <signal.h>
+#include <vector>
 #include "base/macros.h"
 #include "log_severity.h"
 #include "UniquePtr.h"
@@ -299,6 +300,8 @@
 
 extern LogVerbosity gLogVerbosity;
 
+extern std::vector<std::string> gVerboseMethods;
+
 // Used on fatal exit. Prevents recursive aborts. Allows us to disable
 // some error checking to ensure fatal shutdown makes forward progress.
 extern unsigned int gAborting;
diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc
index 57d32bb..e11435d 100644
--- a/runtime/parsed_options.cc
+++ b/runtime/parsed_options.cc
@@ -447,6 +447,9 @@
           return false;
         }
       }
+    } else if (StartsWith(option, "-verbose-methods:")) {
+      gLogVerbosity.compiler = false;
+      Split(option.substr(strlen("-verbose-methods:")), ',', gVerboseMethods);
     } else if (StartsWith(option, "-Xlockprofthreshold:")) {
       if (!ParseUnsignedInteger(option, ':', &lock_profiling_threshold_)) {
         return false;