Basic block optimization refactoring

Various optimization improvements for the common frontend.

Before applying basic block optimizations, split the graph
into extended basic blocks.  Replace existing pattern-match
range-check elimination with a scheme based on local value
numbering (which could also serve as the basis for some CSE
if the existing, but so-far untested, common frontend temp
register mechanism works as designed).

For the framework, this CL improves null check elimination
from 90.74% (statically) to 91.24% removed, and range
check elimination from 3.45% to 8.17%.

Change-Id: Ie1ce730cfe12a12fef665a30fe3814bad1993895
diff --git a/src/compiler/frontend.cc b/src/compiler/frontend.cc
index 9d30b6a..e00fb68 100644
--- a/src/compiler/frontend.cc
+++ b/src/compiler/frontend.cc
@@ -1124,6 +1124,11 @@
   /* Allocate Registers using simple local allocation scheme */
   SimpleRegAlloc(cu.get());
 
+  if (cu->enable_debug & (1 << kDebugDumpCFG)) {
+    DumpCFG(cu.get(), "/sdcard/7_post_ralloc_cfg/", true);
+  }
+
+
   /* Go the LLVM path? */
   if (cu->gen_bitcode) {
     // MIR->Bitcode