diff options
Diffstat (limited to 'compiler/optimizing')
-rw-r--r-- | compiler/optimizing/nodes.h | 6 | ||||
-rw-r--r-- | compiler/optimizing/ssa_builder.cc | 5 | ||||
-rw-r--r-- | compiler/optimizing/ssa_builder.h | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 2dab605465..36e286d578 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -2114,7 +2114,11 @@ class HTemporary : public HTemplateInstruction<0> { size_t GetIndex() const { return index_; } - Primitive::Type GetType() const OVERRIDE { return GetPrevious()->GetType(); } + Primitive::Type GetType() const OVERRIDE { + // The previous instruction is the one that will be stored in the temporary location. + DCHECK(GetPrevious() != nullptr); + return GetPrevious()->GetType(); + } DECLARE_INSTRUCTION(Temporary); diff --git a/compiler/optimizing/ssa_builder.cc b/compiler/optimizing/ssa_builder.cc index e83c528fab..fec40f93c7 100644 --- a/compiler/optimizing/ssa_builder.cc +++ b/compiler/optimizing/ssa_builder.cc @@ -253,4 +253,9 @@ void SsaBuilder::VisitInstruction(HInstruction* instruction) { instruction->SetEnvironment(environment); } +void SsaBuilder::VisitTemporary(HTemporary* temp) { + // Temporaries are only used by the baseline register allocator. + temp->GetBlock()->RemoveInstruction(temp); +} + } // namespace art diff --git a/compiler/optimizing/ssa_builder.h b/compiler/optimizing/ssa_builder.h index 24f5ac55f7..2207cd6bfa 100644 --- a/compiler/optimizing/ssa_builder.h +++ b/compiler/optimizing/ssa_builder.h @@ -51,6 +51,7 @@ class SsaBuilder : public HGraphVisitor { void VisitLoadLocal(HLoadLocal* load); void VisitStoreLocal(HStoreLocal* store); void VisitInstruction(HInstruction* instruction); + void VisitTemporary(HTemporary* instruction); static HInstruction* GetFloatOrDoubleEquivalent(HInstruction* user, HInstruction* instruction, |