Optimizing: Rewrite DCE's MarkReachableBlocks().

Replace a recursive implementation with a loop using a work
list to avoid stack overflow that we would presumably hit
for 702-LargeBranchOffset in host debug build with -O0, once
the DCE block elimination is enabled for methods containing
try-catch.

Bug: 24133462
Change-Id: I41288ba368722bcb5d68259c7c147552c8928099
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index d79852c..6b0ccf8 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -2409,7 +2409,7 @@
 // will be the block containing the next Dex opcode.
 class HPackedSwitch : public HTemplateInstruction<1> {
  public:
-  HPackedSwitch(int32_t start_value, int32_t num_entries, HInstruction* input,
+  HPackedSwitch(int32_t start_value, uint32_t num_entries, HInstruction* input,
                 uint32_t dex_pc = kNoDexPc)
     : HTemplateInstruction(SideEffects::None(), dex_pc),
       start_value_(start_value),
@@ -2421,7 +2421,7 @@
 
   int32_t GetStartValue() const { return start_value_; }
 
-  int32_t GetNumEntries() const { return num_entries_; }
+  uint32_t GetNumEntries() const { return num_entries_; }
 
   HBasicBlock* GetDefaultBlock() const {
     // Last entry is the default block.
@@ -2431,7 +2431,7 @@
 
  private:
   int32_t start_value_;
-  int32_t num_entries_;
+  uint32_t num_entries_;
 
   DISALLOW_COPY_AND_ASSIGN(HPackedSwitch);
 };