diff options
author | 2015-10-28 15:28:08 -0700 | |
---|---|---|
committer | 2015-10-29 13:29:50 -0700 | |
commit | 73f1f3be46652d3f6df61b4234c366ebbf81274a (patch) | |
tree | 0d6c2f9eb2331fd5de5aa4c43ebcb45e857a4682 /compiler/optimizing/nodes.cc | |
parent | f7b7f9984da66149e5fe05713845961d7b069a23 (diff) |
Move loop invariant utility to more general place.
Change-Id: I15ebfbf9684f0fcce9e63d078ff8dc1381fd1ca3
Diffstat (limited to 'compiler/optimizing/nodes.cc')
-rw-r--r-- | compiler/optimizing/nodes.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc index 348026551e..8b28ff91d4 100644 --- a/compiler/optimizing/nodes.cc +++ b/compiler/optimizing/nodes.cc @@ -574,6 +574,17 @@ bool HLoopInformation::IsIn(const HLoopInformation& other) const { return other.blocks_.IsBitSet(header_->GetBlockId()); } +bool HLoopInformation::IsLoopInvariant(HInstruction* instruction, bool must_dominate) const { + HLoopInformation* other_loop = instruction->GetBlock()->GetLoopInformation(); + if (other_loop != this && (other_loop == nullptr || !other_loop->IsIn(*this))) { + if (must_dominate) { + return instruction->GetBlock()->Dominates(GetHeader()); + } + return true; + } + return false; +} + size_t HLoopInformation::GetLifetimeEnd() const { size_t last_position = 0; for (HBasicBlock* back_edge : GetBackEdges()) { |