diff options
Diffstat (limited to 'compiler/optimizing/prepare_for_register_allocation.cc')
| -rw-r--r-- | compiler/optimizing/prepare_for_register_allocation.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/optimizing/prepare_for_register_allocation.cc b/compiler/optimizing/prepare_for_register_allocation.cc index 0ad104eaa7..fc72727196 100644 --- a/compiler/optimizing/prepare_for_register_allocation.cc +++ b/compiler/optimizing/prepare_for_register_allocation.cc @@ -47,6 +47,19 @@ void PrepareForRegisterAllocation::VisitBoundType(HBoundType* bound_type) { bound_type->GetBlock()->RemoveInstruction(bound_type); } +void PrepareForRegisterAllocation::VisitArraySet(HArraySet* instruction) { + HInstruction* value = instruction->GetValue(); + // PrepareForRegisterAllocation::VisitBoundType may have replaced a + // BoundType (as value input of this ArraySet) with a NullConstant. + // If so, this ArraySet no longer needs a type check. + if (value->IsNullConstant()) { + DCHECK_EQ(value->GetType(), Primitive::kPrimNot); + if (instruction->NeedsTypeCheck()) { + instruction->ClearNeedsTypeCheck(); + } + } +} + void PrepareForRegisterAllocation::VisitClinitCheck(HClinitCheck* check) { // Try to find a static invoke or a new-instance from which this check originated. HInstruction* implicit_clinit = nullptr; |
