Lines Matching refs:instr

42     HInstruction* instr = it.Current();
43 if (instr->IsNewInstance()) {
44 VisitNewInstance(instr->AsNewInstance());
45 } else if (instr->IsLoadClass()) {
46 VisitLoadClass(instr->AsLoadClass());
178 void ReferenceTypePropagation::VisitNewInstance(HNewInstance* instr) {
182 mirror::Class* resolved_class = dex_cache->GetResolvedType(instr->GetTypeIndex());
185 instr->SetReferenceTypeInfo(ReferenceTypeInfo::Create(handle, true));
189 void ReferenceTypePropagation::VisitLoadClass(HLoadClass* instr) {
193 mirror::Class* resolved_class = dex_cache->GetResolvedType(instr->GetTypeIndex());
196 instr->SetLoadedClassRTI(ReferenceTypeInfo::Create(handle, /* is_exact */ true));
199 instr->SetReferenceTypeInfo(ReferenceTypeInfo::Create(class_handle, /* is_exact */ true));
251 bool ReferenceTypePropagation::UpdateReferenceTypeInfo(HInstruction* instr) {
254 ReferenceTypeInfo previous_rti = instr->GetReferenceTypeInfo();
255 if (instr->IsBoundType()) {
256 UpdateBoundType(instr->AsBoundType());
257 } else if (instr->IsPhi()) {
258 UpdatePhi(instr->AsPhi());
263 return !previous_rti.IsEqual(instr->GetReferenceTypeInfo());
266 void ReferenceTypePropagation::UpdateBoundType(HBoundType* instr) {
267 ReferenceTypeInfo new_rti = instr->InputAt(0)->GetReferenceTypeInfo();
269 ReferenceTypeInfo bound_rti = instr->GetBoundType();
273 instr->SetReferenceTypeInfo(new_rti);
276 void ReferenceTypePropagation::UpdatePhi(HPhi* instr) {
277 ReferenceTypeInfo new_rti = instr->InputAt(0)->GetReferenceTypeInfo();
280 instr->SetReferenceTypeInfo(new_rti);
283 for (size_t i = 1; i < instr->InputCount(); i++) {
284 new_rti = MergeTypes(new_rti, instr->InputAt(i)->GetReferenceTypeInfo());
293 instr->SetReferenceTypeInfo(new_rti);
298 bool ReferenceTypePropagation::UpdateNullability(HInstruction* instr) {
299 DCHECK(instr->IsPhi() || instr->IsBoundType());
301 if (!instr->IsPhi()) {
305 HPhi* phi = instr->AsPhi();