diff options
author | 2015-07-20 17:56:35 +0000 | |
---|---|---|
committer | 2015-07-20 17:56:36 +0000 | |
commit | e07300b712f44397ecbfed1ef7f880686e46274a (patch) | |
tree | 4b8cd1ecad98b4a797de4ec73205cea52b5360cf /compiler/optimizing/side_effects_analysis.cc | |
parent | 16a150b8a4c5c8c9e7159aff3b2ffbd918494abd (diff) | |
parent | 854a02b1b488327f80c544ca1119b386b8715c26 (diff) |
Merge "Improved side effect analysis (field/array write/read)."
Diffstat (limited to 'compiler/optimizing/side_effects_analysis.cc')
-rw-r--r-- | compiler/optimizing/side_effects_analysis.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/optimizing/side_effects_analysis.cc b/compiler/optimizing/side_effects_analysis.cc index ea1ca5a731..9dbf638442 100644 --- a/compiler/optimizing/side_effects_analysis.cc +++ b/compiler/optimizing/side_effects_analysis.cc @@ -24,14 +24,15 @@ void SideEffectsAnalysis::Run() { block_effects_.SetSize(graph_->GetBlocks().Size()); loop_effects_.SetSize(graph_->GetBlocks().Size()); + // In DEBUG mode, ensure side effects are properly initialized to empty. if (kIsDebugBuild) { for (HReversePostOrderIterator it(*graph_); !it.Done(); it.Advance()) { HBasicBlock* block = it.Current(); SideEffects effects = GetBlockEffects(block); - DCHECK(!effects.HasSideEffects() && !effects.HasDependencies()); + DCHECK(effects.DoesNothing()); if (block->IsLoopHeader()) { effects = GetLoopEffects(block); - DCHECK(!effects.HasSideEffects() && !effects.HasDependencies()); + DCHECK(effects.DoesNothing()); } } } @@ -46,7 +47,9 @@ void SideEffectsAnalysis::Run() { inst_it.Advance()) { HInstruction* instruction = inst_it.Current(); effects = effects.Union(instruction->GetSideEffects()); - if (effects.HasAllSideEffects()) { + // If every possible write/read is represented, scanning further + // will not add any more information to side-effects of this block. + if (effects.DoesAll()) { break; } } |