diff options
author | Aart Bik <ajcbik@google.com> | 2017-04-06 00:02:23 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-04-06 00:02:23 +0000 |
commit | 6bca1c6389bb002d44f1c0cabf7641de8c935c4b (patch) | |
tree | b06aba0e2b2c8e183b6ccc76497483110904abe5 /compiler/optimizing/loop_optimization.cc | |
parent | 30b262c298fe7bd08f28d2f0f23a97cb1a1eb2fe (diff) | |
parent | b07d1bcf055d3eb8c6b4c45b359ad8ef30909af7 (diff) |
Merge "Ensure environment is ready when populating loop."
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
-rw-r--r-- | compiler/optimizing/loop_optimization.cc | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc index b5f46a6807..ca31bf89e6 100644 --- a/compiler/optimizing/loop_optimization.cc +++ b/compiler/optimizing/loop_optimization.cc @@ -533,29 +533,25 @@ void HLoopOptimization::GenerateNewLoop(LoopNode* node, kNoRegNumber, 0, HPhi::ToPhiType(induc_type)); - // Generate header. + // Generate header and prepare body. // for (i = lo; i < hi; i += step) // <loop-body> HInstruction* cond = new (global_allocator_) HAboveOrEqual(vector_phi_, hi); vector_header_->AddPhi(vector_phi_); vector_header_->AddInstruction(cond); vector_header_->AddInstruction(new (global_allocator_) HIf(cond)); - // Suspend check and environment. - HInstruction* suspend = vector_header_->GetFirstInstruction(); - suspend->CopyEnvironmentFromWithLoopPhiAdjustment( - node->loop_info->GetSuspendCheck()->GetEnvironment(), vector_header_); - // Generate body. for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { bool vectorized_def = VectorizeDef(node, it.Current(), /*generate_code*/ true); DCHECK(vectorized_def); } + // Generate body. + HEnvironment* env = vector_header_->GetFirstInstruction()->GetEnvironment(); for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { auto i = vector_map_->find(it.Current()); if (i != vector_map_->end() && !i->second->IsInBlock()) { Insert(vector_body_, i->second); // lays out in original order if (i->second->NeedsEnvironment()) { - i->second->CopyEnvironmentFromWithLoopPhiAdjustment( - suspend->GetEnvironment(), vector_header_); + i->second->CopyEnvironmentFromWithLoopPhiAdjustment(env, vector_header_); } } } |