summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2017-09-23 16:11:06 -0700
committerMathieu Chartier <mathieuc@google.com>2017-09-27 11:51:53 -0700
commit1d2d4ff8570bb88d9d2d4633706fd7f6fb18d75e (patch)
treecbe67e8e9214828656314117121e8ce906a762ab /compiler/optimizing/code_generator.cc
parente5b35ed787fbfb388d162361310bae5b0e7682a7 (diff)
Add DexInstructionIterator and use it a few places
Motivation: Want to start abstracting away dex specific functionality to enable CompactDex. Adding an iterator will enable CompactDex iteration to work differently than normal dex iteration. Will eventually replace CodeItemIterator. Bug: 63756964 Test: test-art-host Change-Id: I90e67c1a994b7698aaac0523a82816b0a003fbdc
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r--compiler/optimizing/code_generator.cc12
1 files changed, 4 insertions, 8 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index b8e4f326c8..3cb37926af 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -722,12 +722,10 @@ static void CheckLoopEntriesCanBeUsedForOsr(const HGraph& graph,
}
}
ArenaVector<size_t> covered(loop_headers.size(), 0, graph.GetArena()->Adapter(kArenaAllocMisc));
- const uint16_t* code_ptr = code_item.insns_;
- const uint16_t* code_end = code_item.insns_ + code_item.insns_size_in_code_units_;
-
- size_t dex_pc = 0;
- while (code_ptr < code_end) {
- const Instruction& instruction = *Instruction::At(code_ptr);
+ IterationRange<DexInstructionIterator> instructions = code_item.Instructions();
+ for (auto it = instructions.begin(); it != instructions.end(); ++it) {
+ const uint32_t dex_pc = it.GetDexPC(instructions.begin());
+ const Instruction& instruction = *it;
if (instruction.IsBranch()) {
uint32_t target = dex_pc + instruction.GetTargetOffset();
CheckCovers(target, graph, code_info, loop_headers, &covered);
@@ -743,8 +741,6 @@ static void CheckLoopEntriesCanBeUsedForOsr(const HGraph& graph,
CheckCovers(target, graph, code_info, loop_headers, &covered);
}
}
- dex_pc += instruction.SizeInCodeUnits();
- code_ptr += instruction.SizeInCodeUnits();
}
for (size_t i = 0; i < covered.size(); ++i) {