diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2017-12-13 11:06:54 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-12-13 11:06:54 +0000 |
| commit | 03376f4c4de8e419402bf40fdff4135728ffb21e (patch) | |
| tree | 5d55cc893e2c445f6d181830bd6ae446010fbf8f /compiler/optimizing/nodes.cc | |
| parent | 3f74ea478d755453a2fe5789ce155e80be3e7c7f (diff) | |
| parent | 1de1e11ac90db9fad8916ac43d43714ccb8d978f (diff) | |
| download | art-03376f4c4de8e419402bf40fdff4135728ffb21e.tar.gz art-03376f4c4de8e419402bf40fdff4135728ffb21e.tar.bz2 art-03376f4c4de8e419402bf40fdff4135728ffb21e.zip | |
Merge "ART: Try to statically evaluate some conditions."
Diffstat (limited to 'compiler/optimizing/nodes.cc')
| -rw-r--r-- | compiler/optimizing/nodes.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc index 5f33ed6303..d39c2aded5 100644 --- a/compiler/optimizing/nodes.cc +++ b/compiler/optimizing/nodes.cc @@ -1111,10 +1111,10 @@ bool HInstructionList::FoundBefore(const HInstruction* instruction1, return true; } -bool HInstruction::StrictlyDominates(HInstruction* other_instruction) const { +bool HInstruction::Dominates(HInstruction* other_instruction, bool strictly) const { if (other_instruction == this) { // An instruction does not strictly dominate itself. - return false; + return !strictly; } HBasicBlock* block = GetBlock(); HBasicBlock* other_block = other_instruction->GetBlock(); @@ -1148,6 +1148,10 @@ bool HInstruction::StrictlyDominates(HInstruction* other_instruction) const { } } +bool HInstruction::StrictlyDominates(HInstruction* other_instruction) const { + return Dominates(other_instruction, /* strictly */ true); +} + void HInstruction::RemoveEnvironment() { RemoveEnvironmentUses(this); environment_ = nullptr; @@ -1170,14 +1174,16 @@ void HInstruction::ReplaceWith(HInstruction* other) { DCHECK(env_uses_.empty()); } -void HInstruction::ReplaceUsesDominatedBy(HInstruction* dominator, HInstruction* replacement) { +void HInstruction::ReplaceUsesDominatedBy(HInstruction* dominator, + HInstruction* replacement, + bool strictly) { const HUseList<HInstruction*>& uses = GetUses(); for (auto it = uses.begin(), end = uses.end(); it != end; /* ++it below */) { HInstruction* user = it->GetUser(); size_t index = it->GetIndex(); // Increment `it` now because `*it` may disappear thanks to user->ReplaceInput(). ++it; - if (dominator->StrictlyDominates(user)) { + if (dominator->Dominates(user, strictly)) { user->ReplaceInput(replacement, index); } } |
