summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author David Brazdil <dbrazdil@google.com> 2016-04-14 16:36:15 +0100
committer David Brazdil <dbrazdil@google.com> 2016-04-14 16:36:15 +0100
commitaa680e89cf35ac3af7d3344d7960ba2f055e16d8 (patch)
treece07d0ab6506b05275f8174188371d51da664447 /compiler/optimizing
parent54b5b1a4a93822ff8e1f324dfcd6f0cd3bffa993 (diff)
ART: Save a bit of memory in production LICM
LICM uses a bit vector to DCHECK that inner loops are visited before outer loops. Allocate the bit vector only if kIsDebugBuild. Change-Id: Ic2641607ebe55ad8974de2ebe03973f0bf182e42
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/licm.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/compiler/optimizing/licm.cc b/compiler/optimizing/licm.cc
index 7a1e06b951..5a0b89c90a 100644
--- a/compiler/optimizing/licm.cc
+++ b/compiler/optimizing/licm.cc
@@ -79,8 +79,15 @@ static void UpdateLoopPhisIn(HEnvironment* environment, HLoopInformation* info)
void LICM::Run() {
DCHECK(side_effects_.HasRun());
+
// Only used during debug.
- ArenaBitVector visited(graph_->GetArena(), graph_->GetBlocks().size(), false, kArenaAllocLICM);
+ ArenaBitVector* visited = nullptr;
+ if (kIsDebugBuild) {
+ visited = new (graph_->GetArena()) ArenaBitVector(graph_->GetArena(),
+ graph_->GetBlocks().size(),
+ false,
+ kArenaAllocLICM);
+ }
// Post order visit to visit inner loops before outer loops.
for (HPostOrderIterator it(*graph_); !it.Done(); it.Advance()) {
@@ -109,10 +116,12 @@ void LICM::Run() {
DCHECK(inner->IsInLoop());
if (inner->GetLoopInformation() != loop_info) {
// Thanks to post order visit, inner loops were already visited.
- DCHECK(visited.IsBitSet(inner->GetBlockId()));
+ DCHECK(visited->IsBitSet(inner->GetBlockId()));
continue;
}
- visited.SetBit(inner->GetBlockId());
+ if (kIsDebugBuild) {
+ visited->SetBit(inner->GetBlockId());
+ }
if (contains_irreducible_loop) {
// We cannot licm in an irreducible loop, or in a natural loop containing an