Avoid Cache*LoweringInfo pass when there's no GET/PUT/INVOKE.

Add new data flow flags indicating instance/static field
access. Record merged flags of all insns and use them to skip
the CacheFieldLoweringInfo pass if the method uses no fields
and the CacheMethodLoweringInfo pass if it has no invokes.

Change-Id: I36a36b438ca9b0f104a7baddc0497d736495cc3c
diff --git a/compiler/dex/bb_optimizations.h b/compiler/dex/bb_optimizations.h
index 1a90ca8..1ad4958 100644
--- a/compiler/dex/bb_optimizations.h
+++ b/compiler/dex/bb_optimizations.h
@@ -34,6 +34,10 @@
   void Start(CompilationUnit* cUnit) const {
     cUnit->mir_graph->DoCacheFieldLoweringInfo();
   }
+
+  bool Gate(const CompilationUnit *cUnit) const {
+    return cUnit->mir_graph->HasFieldAccess();
+  }
 };
 
 /**
@@ -48,6 +52,10 @@
   void Start(CompilationUnit* cUnit) const {
     cUnit->mir_graph->DoCacheMethodLoweringInfo();
   }
+
+  bool Gate(const CompilationUnit *cUnit) const {
+    return cUnit->mir_graph->HasInvokes();
+  }
 };
 
 /**