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);
};