diff options
author | Vladimir Marko <vmarko@google.com> | 2014-09-25 11:23:21 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-25 11:23:22 +0000 |
commit | f2476d524281c6d649f5deb6d1ccccc92380c1ed (patch) | |
tree | 5a7351ed7b785d096ccec00871c8f8007d5449c9 /compiler/dex/dataflow_iterator-inl.h | |
parent | c5c71bfa21aee5ad05217af57e94a0263c4eef1d (diff) | |
parent | e39c54ea575ec710d5e84277fcdcc049f8acb3c9 (diff) | |
download | art-f2476d524281c6d649f5deb6d1ccccc92380c1ed.zip art-f2476d524281c6d649f5deb6d1ccccc92380c1ed.tar.gz art-f2476d524281c6d649f5deb6d1ccccc92380c1ed.tar.bz2 |
Merge "Deprecate GrowableArray, use ArenaVector instead."
Diffstat (limited to 'compiler/dex/dataflow_iterator-inl.h')
-rw-r--r-- | compiler/dex/dataflow_iterator-inl.h | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/compiler/dex/dataflow_iterator-inl.h b/compiler/dex/dataflow_iterator-inl.h index d1abf7f..89f2b5c 100644 --- a/compiler/dex/dataflow_iterator-inl.h +++ b/compiler/dex/dataflow_iterator-inl.h @@ -28,7 +28,7 @@ inline BasicBlock* DataflowIterator::ForwardSingleNext() { // Are we not yet at the end? if (idx_ < end_idx_) { // Get the next index. - BasicBlockId bb_id = block_id_list_->Get(idx_); + BasicBlockId bb_id = (*block_id_list_)[idx_]; res = mir_graph_->GetBasicBlock(bb_id); idx_++; } @@ -51,7 +51,7 @@ inline BasicBlock* DataflowIterator::ForwardRepeatNext() { // Are we not yet at the end? if (idx_ < end_idx_) { // Get the BasicBlockId. - BasicBlockId bb_id = block_id_list_->Get(idx_); + BasicBlockId bb_id = (*block_id_list_)[idx_]; res = mir_graph_->GetBasicBlock(bb_id); idx_++; } @@ -66,7 +66,7 @@ inline BasicBlock* DataflowIterator::ReverseSingleNext() { // Are we not yet at the end? if (idx_ >= 0) { // Get the BasicBlockId. - BasicBlockId bb_id = block_id_list_->Get(idx_); + BasicBlockId bb_id = (*block_id_list_)[idx_]; res = mir_graph_->GetBasicBlock(bb_id); idx_--; } @@ -89,7 +89,7 @@ inline BasicBlock* DataflowIterator::ReverseRepeatNext() { // Are we not yet done? if (idx_ >= 0) { // Get the BasicBlockId. - BasicBlockId bb_id = block_id_list_->Get(idx_); + BasicBlockId bb_id = (*block_id_list_)[idx_]; res = mir_graph_->GetBasicBlock(bb_id); idx_--; } @@ -97,34 +97,28 @@ inline BasicBlock* DataflowIterator::ReverseRepeatNext() { return res; } -// AllNodes uses the existing GrowableArray iterator, and should be considered unordered. +// AllNodes uses the existing block list, and should be considered unordered. inline BasicBlock* AllNodesIterator::Next(bool had_change) { - BasicBlock* res = NULL; - - // Suppose we want to keep looking. - bool keep_looking = true; - - // Find the next BasicBlock. - while (keep_looking == true) { - // Get next BasicBlock. - res = all_nodes_iterator_.Next(); + // Update changed: if had_changed is true, we remember it for the whole iteration. + changed_ |= had_change; - // Are we done or is the BasicBlock not hidden? - if ((res == NULL) || (res->hidden == false)) { - keep_looking = false; + BasicBlock* res = nullptr; + while (idx_ != end_idx_) { + BasicBlock* bb = mir_graph_->GetBlockList()[idx_++]; + DCHECK(bb != nullptr); + if (!bb->hidden) { + res = bb; + break; } } - // Update changed: if had_changed is true, we remember it for the whole iteration. - changed_ |= had_change; - return res; } inline BasicBlock* LoopRepeatingTopologicalSortIterator::Next(bool had_change) { if (idx_ != 0) { // Mark last processed block visited. - BasicBlock* bb = mir_graph_->GetBasicBlock(block_id_list_->Get(idx_ - 1)); + BasicBlock* bb = mir_graph_->GetBasicBlock((*block_id_list_)[idx_ - 1]); bb->visited = true; if (had_change) { // If we had a change we need to revisit the children. @@ -138,16 +132,17 @@ inline BasicBlock* LoopRepeatingTopologicalSortIterator::Next(bool had_change) { while (true) { // Pop loops we have left and check if we need to recalculate one of them. // NOTE: We need to do this even if idx_ == end_idx_. - while (loop_head_stack_->Size() != 0u && - loop_ends_->Get(loop_head_stack_->Peek().first) == idx_) { - auto top = loop_head_stack_->Peek(); + while (loop_head_stack_->size() != 0u && + (*loop_ends_)[loop_head_stack_->back().first] == idx_) { + auto top = loop_head_stack_->back(); uint16_t loop_head_idx = top.first; bool recalculated = top.second; - loop_head_stack_->Pop(); - BasicBlock* loop_head = mir_graph_->GetBasicBlock(block_id_list_->Get(loop_head_idx)); + loop_head_stack_->pop_back(); + BasicBlock* loop_head = mir_graph_->GetBasicBlock((*block_id_list_)[loop_head_idx]); DCHECK(loop_head != nullptr); if (!recalculated || !loop_head->visited) { - loop_head_stack_->Insert(std::make_pair(loop_head_idx, true)); // Recalculating this loop. + // Recalculating this loop. + loop_head_stack_->push_back(std::make_pair(loop_head_idx, true)); idx_ = loop_head_idx + 1; return loop_head; } @@ -160,11 +155,11 @@ inline BasicBlock* LoopRepeatingTopologicalSortIterator::Next(bool had_change) { // Get next block and return it if unvisited. BasicBlockId idx = idx_; idx_ += 1; - BasicBlock* bb = mir_graph_->GetBasicBlock(block_id_list_->Get(idx)); + BasicBlock* bb = mir_graph_->GetBasicBlock((*block_id_list_)[idx]); DCHECK(bb != nullptr); if (!bb->visited) { - if (loop_ends_->Get(idx) != 0u) { - loop_head_stack_->Insert(std::make_pair(idx, false)); // Not recalculating. + if ((*loop_ends_)[idx] != 0u) { + loop_head_stack_->push_back(std::make_pair(idx, false)); // Not recalculating. } return bb; } |