diff options
author | Vladimir Marko <vmarko@google.com> | 2014-01-27 11:15:17 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2014-01-28 11:22:42 +0000 |
commit | 2730db03beee4d6687ddfb5000c33c0370fbc6eb (patch) | |
tree | a85706c800c67deda5c7b612c8010059aa7b365c /compiler/dex/quick | |
parent | c7f832061fea59fd6abd125f26c8ca1faec695a5 (diff) | |
download | art-2730db03beee4d6687ddfb5000c33c0370fbc6eb.tar.gz art-2730db03beee4d6687ddfb5000c33c0370fbc6eb.tar.bz2 art-2730db03beee4d6687ddfb5000c33c0370fbc6eb.zip |
Add VerfiedMethod to DexCompilationUnit.
Avoid some mutex locking and map lookups.
Change-Id: I8e0486af77e38dcd065569572a6b985eb57f4f63
Diffstat (limited to 'compiler/dex/quick')
-rw-r--r-- | compiler/dex/quick/codegen_util.cc | 9 | ||||
-rw-r--r-- | compiler/dex/quick/gen_common.cc | 3 | ||||
-rw-r--r-- | compiler/dex/quick/mir_to_lir.cc | 4 |
3 files changed, 8 insertions, 8 deletions
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc index cb3681395c..7f19ea1eb9 100644 --- a/compiler/dex/quick/codegen_util.cc +++ b/compiler/dex/quick/codegen_util.cc @@ -22,6 +22,7 @@ #include "dex/quick/dex_file_method_inliner.h" #include "dex/quick/dex_file_to_method_inliner_map.h" #include "dex/verification_results.h" +#include "dex/verified_method.h" #include "verifier/dex_gc_map.h" #include "verifier/method_verifier.h" @@ -763,10 +764,10 @@ void Mir2Lir::CreateNativeGcMap() { } } MethodReference method_ref(cu_->dex_file, cu_->method_idx); - const std::vector<uint8_t>* gc_map_raw = - cu_->compiler_driver->GetVerificationResults()->GetDexGcMap(method_ref); - verifier::DexPcToReferenceMap dex_gc_map(&(*gc_map_raw)[0]); - DCHECK_EQ(gc_map_raw->size(), dex_gc_map.RawSize()); + const std::vector<uint8_t>& gc_map_raw = + mir_graph_->GetCurrentDexCompilationUnit()->GetVerifiedMethod()->GetDexGcMap(); + verifier::DexPcToReferenceMap dex_gc_map(&(gc_map_raw)[0]); + DCHECK_EQ(gc_map_raw.size(), dex_gc_map.RawSize()); // Compute native offset to references size. NativePcToReferenceMapBuilder native_gc_map_builder(&native_gc_map_, mapping_table.PcToDexSize(), diff --git a/compiler/dex/quick/gen_common.cc b/compiler/dex/quick/gen_common.cc index d8b9869be0..746c1db170 100644 --- a/compiler/dex/quick/gen_common.cc +++ b/compiler/dex/quick/gen_common.cc @@ -1133,8 +1133,7 @@ void Mir2Lir::GenCheckCast(uint32_t insn_idx, uint32_t type_idx, RegLocation rl_ // Note: currently type_known_final is unused, as optimizing will only improve the performance // of the exception throw path. DexCompilationUnit* cu = mir_graph_->GetCurrentDexCompilationUnit(); - const MethodReference mr(cu->GetDexFile(), cu->GetDexMethodIndex()); - if (!needs_access_check && cu_->compiler_driver->IsSafeCast(mr, insn_idx)) { + if (!needs_access_check && cu_->compiler_driver->IsSafeCast(cu, insn_idx)) { // Verifier type analysis proved this check cast would never cause an exception. return; } diff --git a/compiler/dex/quick/mir_to_lir.cc b/compiler/dex/quick/mir_to_lir.cc index 0a470a5b31..1f4122d7a3 100644 --- a/compiler/dex/quick/mir_to_lir.cc +++ b/compiler/dex/quick/mir_to_lir.cc @@ -342,8 +342,8 @@ void Mir2Lir::CompileDalvikInstruction(MIR* mir, BasicBlock* bb, LIR* label_list bool is_safe = is_null; // Always safe to store null. if (!is_safe) { // Check safety from verifier type information. - const MethodReference mr(cu_->dex_file, cu_->method_idx); - is_safe = cu_->compiler_driver->IsSafeCast(mr, mir->offset); + const DexCompilationUnit* unit = mir_graph_->GetCurrentDexCompilationUnit(); + is_safe = cu_->compiler_driver->IsSafeCast(unit, mir->offset); } if (is_null || is_safe) { // Store of constant null doesn't require an assignability test and can be generated inline |