[Portable Compiler] Rework return block marking.

Move the detection of blocks that contain a return from the
GBC emit pass up to Dex parsing.  This allows logic that detects
backward branches that go to method return to skip suspend checks.

Change-Id: I2a606b49850235b59c5faf237a08729e98220f4d
diff --git a/src/compiler/dataflow.cc b/src/compiler/dataflow.cc
index 1e20cbd..4d7e9d7 100644
--- a/src/compiler/dataflow.cc
+++ b/src/compiler/dataflow.cc
@@ -1890,6 +1890,11 @@
     bb->taken = bb_next->taken;
     // Include the rest of the instructions
     bb->last_mir_insn = bb_next->last_mir_insn;
+    /*
+     * If lower-half of pair of blocks to combine contained a return, move the flag
+     * to the newly combined block.
+     */
+    bb->terminated_by_return = bb_next->terminated_by_return;
 
     /*
      * NOTE: we aren't updating all dataflow info here.  Should either make sure this pass
@@ -2096,17 +2101,17 @@
   }
   BasicBlock* start_bb = bb;
   cu->extended_basic_blocks.push_back(bb);
-  bool has_return = false;
+  bool terminated_by_return = false;
   // Visit blocks strictly dominated by this head.
   while (bb != NULL) {
     bb->visited = true;
-    has_return |= bb->has_return;
+    terminated_by_return |= bb->terminated_by_return;
     bb = NextDominatedBlock(cu, bb);
     if (cu->verbose && (bb != NULL)) {
       LOG(INFO) << "...added bb " << bb->id;
     }
   }
-  if (has_return) {
+  if (terminated_by_return) {
     // This extended basic block contains a return, so mark all members.
     bb = start_bb;
     while (bb != NULL) {