diff options
-rw-r--r-- | compiler/optimizing/load_store_elimination.cc | 3 | ||||
-rw-r--r-- | compiler/optimizing/scheduler.cc | 6 |
2 files changed, 5 insertions, 4 deletions
diff --git a/compiler/optimizing/load_store_elimination.cc b/compiler/optimizing/load_store_elimination.cc index 05862e3b3b..d7cae768d4 100644 --- a/compiler/optimizing/load_store_elimination.cc +++ b/compiler/optimizing/load_store_elimination.cc @@ -2143,8 +2143,7 @@ bool LSEVisitor::MaterializeLoopPhis(ArrayRef<const size_t> phi_placeholder_inde size_t idx = phi_placeholder.GetHeapLocation(); for (HBasicBlock* predecessor : block->GetPredecessors()) { Value value = ReplacementOrValue(heap_values_for_[predecessor->GetBlockId()][idx].value); - if (value.NeedsNonLoopPhi() || - (current_phase_ == Phase::kPartialElimination && value.IsMergedUnknown())) { + if (value.NeedsNonLoopPhi()) { DCHECK(current_phase_ == Phase::kLoadElimination || current_phase_ == Phase::kPartialElimination) << current_phase_; diff --git a/compiler/optimizing/scheduler.cc b/compiler/optimizing/scheduler.cc index 7140e2424a..cb340f530b 100644 --- a/compiler/optimizing/scheduler.cc +++ b/compiler/optimizing/scheduler.cc @@ -149,8 +149,10 @@ size_t SideEffectDependencyAnalysis::MemoryDependencyAnalysis::FieldAccessHeapLo DCHECK(GetFieldInfo(instr) != nullptr); DCHECK(heap_location_collector_ != nullptr); - size_t heap_loc = heap_location_collector_->GetFieldHeapLocation(instr->InputAt(0), - GetFieldInfo(instr)); + HInstruction* ref = instr->IsPredicatedInstanceFieldGet() + ? instr->AsPredicatedInstanceFieldGet()->GetTarget() + : instr->InputAt(0); + size_t heap_loc = heap_location_collector_->GetFieldHeapLocation(ref, GetFieldInfo(instr)); // This field access should be analyzed and added to HeapLocationCollector before. DCHECK(heap_loc != HeapLocationCollector::kHeapLocationNotFound); |