diff options
| author | 2015-07-16 16:51:30 +0100 | |
|---|---|---|
| committer | 2015-07-27 19:51:48 +0100 | |
| commit | 80caa1478cf3df4eac1214d8a63a4da6f4fe622b (patch) | |
| tree | 131652877e34099711e7d9fc4f1d840b99d1b5d3 /compiler/optimizing/instruction_simplifier.cc | |
| parent | 00e3b38be4b280d6d7a7e843cd336ffbd2ba4365 (diff) | |
Revert "Revert "Use the object class as top in reference type propagation""
This reverts commit 7733bd644ac71f86d4b30a319624b23343882e53.
Change-Id: I7d393a808c01c084c18d632a54e0554b4b455f2c
Diffstat (limited to 'compiler/optimizing/instruction_simplifier.cc')
| -rw-r--r-- | compiler/optimizing/instruction_simplifier.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc index b30b6c7bae..1089812beb 100644 --- a/compiler/optimizing/instruction_simplifier.cc +++ b/compiler/optimizing/instruction_simplifier.cc @@ -195,16 +195,16 @@ bool InstructionSimplifierVisitor::IsDominatedByInputNullCheck(HInstruction* ins // Returns whether doing a type test between the class of `object` against `klass` has // a statically known outcome. The result of the test is stored in `outcome`. static bool TypeCheckHasKnownOutcome(HLoadClass* klass, HInstruction* object, bool* outcome) { - if (!klass->IsResolved()) { - // If the class couldn't be resolve it's not safe to compare against it. It's - // default type would be Top which might be wider that the actual class type - // and thus producing wrong results. + ReferenceTypeInfo obj_rti = object->GetReferenceTypeInfo(); + ScopedObjectAccess soa(Thread::Current()); + if (!obj_rti.IsValid()) { + // We run the simplifier before the reference type propagation so type info might not be + // available. return false; } - ReferenceTypeInfo obj_rti = object->GetReferenceTypeInfo(); ReferenceTypeInfo class_rti = klass->GetLoadedClassRTI(); - ScopedObjectAccess soa(Thread::Current()); + DCHECK(class_rti.IsValid() && class_rti.IsExact()); if (class_rti.IsSupertypeOf(obj_rti)) { *outcome = true; return true; |