diff options
author | Ian Rogers <irogers@google.com> | 2013-09-24 18:17:04 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2013-09-24 21:17:06 -0700 |
commit | d0fbd85a82a266c21d6b72c61d6dc098ec362de7 (patch) | |
tree | 14f431e4bd889b6c7ec6b29322594786828d3bb1 /runtime/verifier/method_verifier.h | |
parent | fc0e94bed3f88ed7e50854fd8dfaf5dcb345250f (diff) | |
download | art-d0fbd85a82a266c21d6b72c61d6dc098ec362de7.zip art-d0fbd85a82a266c21d6b72c61d6dc098ec362de7.tar.gz art-d0fbd85a82a266c21d6b72c61d6dc098ec362de7.tar.bz2 |
Reduce memory allocation in verifier.
Remove the use of a map PcToRegisterLineTable for efficiency (matches Dalvik).
Place the register line register values inside the RegisterLine, saves a
secondary allocation and indirection.
Avoid the use of a deque in RegisterLine to avoid an allocation.
Simplify the SirtRef destructor in non-debug builds.
Saves >100ms from the two threaded compile time of ThinkFree on host.
Change-Id: I2dacba61dbaf284ca02d4c194413e1da221dcb76
Diffstat (limited to 'runtime/verifier/method_verifier.h')
-rw-r--r-- | runtime/verifier/method_verifier.h | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/runtime/verifier/method_verifier.h b/runtime/verifier/method_verifier.h index f143751..7f33741 100644 --- a/runtime/verifier/method_verifier.h +++ b/runtime/verifier/method_verifier.h @@ -110,10 +110,8 @@ enum RegisterTrackingMode { // execution of that instruction. class PcToRegisterLineTable { public: - PcToRegisterLineTable() {} - ~PcToRegisterLineTable() { - STLDeleteValues(&pc_to_register_line_); - } + PcToRegisterLineTable() : size_(0) {} + ~PcToRegisterLineTable(); // Initialize the RegisterTable. Every instruction address can have a different set of information // about what's in which register, but for verification purposes we only need to store it at @@ -122,17 +120,13 @@ class PcToRegisterLineTable { uint16_t registers_size, MethodVerifier* verifier); RegisterLine* GetLine(size_t idx) { - auto result = pc_to_register_line_.find(idx); - if (result == pc_to_register_line_.end()) { - return NULL; - } else { - return result->second; - } + DCHECK_LT(idx, size_); + return register_lines_[idx]; } private: - typedef SafeMap<int32_t, RegisterLine*> Table; - Table pc_to_register_line_; + UniquePtr<RegisterLine*[]> register_lines_; + size_t size_; }; // The verifier |