From 1d2d4ff8570bb88d9d2d4633706fd7f6fb18d75e Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Sat, 23 Sep 2017 16:11:06 -0700 Subject: 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 --- compiler/optimizing/code_generator.cc | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'compiler/optimizing/code_generator.cc') 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 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 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) { -- cgit v1.2.3-59-g8ed1b