diff options
| author | 2017-07-13 04:06:23 +0000 | |
|---|---|---|
| committer | 2017-07-13 04:06:23 +0000 | |
| commit | da914e73c251a9fe30134d955508db2882add15c (patch) | |
| tree | 91b118f628185464a55e8c310b4ebc4fd28c938a /compiler/optimizing/instruction_builder.h | |
| parent | 5c956a7c6764112553f96614e56cf2a114579466 (diff) | |
| parent | de4b08ff24c330d5b36b5c4dc8664ed4848eeca6 (diff) | |
Merge "Reduce quicken info size"
Diffstat (limited to 'compiler/optimizing/instruction_builder.h')
| -rw-r--r-- | compiler/optimizing/instruction_builder.h | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/compiler/optimizing/instruction_builder.h b/compiler/optimizing/instruction_builder.h index e968760d84..5a83df3813 100644 --- a/compiler/optimizing/instruction_builder.h +++ b/compiler/optimizing/instruction_builder.h @@ -27,6 +27,7 @@ #include "mirror/dex_cache.h" #include "nodes.h" #include "optimizing_compiler_stats.h" +#include "quicken_info.h" #include "ssa_builder.h" namespace art { @@ -67,9 +68,7 @@ class HInstructionBuilder : public ValueObject { code_generator_(code_generator), dex_compilation_unit_(dex_compilation_unit), outer_compilation_unit_(outer_compilation_unit), - interpreter_metadata_(interpreter_metadata), - skipped_interpreter_metadata_(std::less<uint32_t>(), - arena_->Adapter(kArenaAllocGraphBuilder)), + quicken_info_(interpreter_metadata), compilation_stats_(compiler_stats), dex_cache_(dex_cache), loop_headers_(graph->GetArena()->Adapter(kArenaAllocGraphBuilder)) { @@ -85,11 +84,11 @@ class HInstructionBuilder : public ValueObject { void PropagateLocalsToCatchBlocks(); void SetLoopHeaderPhiInputs(); - bool ProcessDexInstruction(const Instruction& instruction, uint32_t dex_pc); + bool ProcessDexInstruction(const Instruction& instruction, uint32_t dex_pc, size_t quicken_index); void FindNativeDebugInfoLocations(ArenaBitVector* locations); bool CanDecodeQuickenedInfo() const; - uint16_t LookupQuickenedInfo(uint32_t dex_pc); + uint16_t LookupQuickenedInfo(uint32_t quicken_index); HBasicBlock* FindBlockStartingAt(uint32_t dex_pc) const; @@ -159,7 +158,10 @@ class HInstructionBuilder : public ValueObject { void BuildReturn(const Instruction& instruction, Primitive::Type type, uint32_t dex_pc); // Builds an instance field access node and returns whether the instruction is supported. - bool BuildInstanceFieldAccess(const Instruction& instruction, uint32_t dex_pc, bool is_put); + bool BuildInstanceFieldAccess(const Instruction& instruction, + uint32_t dex_pc, + bool is_put, + size_t quicken_index); void BuildUnresolvedStaticFieldAccess(const Instruction& instruction, uint32_t dex_pc, @@ -349,14 +351,8 @@ class HInstructionBuilder : public ValueObject { // methods. const DexCompilationUnit* const outer_compilation_unit_; - // Original values kept after instruction quickening. This is a data buffer - // of Leb128-encoded (dex_pc, value) pairs sorted by dex_pc. - const uint8_t* interpreter_metadata_; - - // InstructionBuilder does not parse instructions in dex_pc order. Quickening - // info for out-of-order dex_pcs is stored in a map until the positions - // are eventually visited. - ArenaSafeMap<uint32_t, uint16_t> skipped_interpreter_metadata_; + // Original values kept after instruction quickening. + QuickenInfoTable quicken_info_; OptimizingCompilerStats* compilation_stats_; Handle<mirror::DexCache> dex_cache_; |