MCompare::CompareType BaselineInspector::expectedCompareType(jsbytecode* pc) { ICStub* first = monomorphicStub(pc); ICStub* second = nullptr; if (!first && !dimorphicStub(pc, &first, &second)) { return MCompare::Compare_Unknown; } if (ICStub* fallback = second ? second->next() : first->next()) { MOZ_ASSERT(fallback->isFallback()); if (fallback->toFallbackStub()->state().hasFailures()) { return MCompare::Compare_Unknown; } } MCompare::CompareType first_type = ParseCacheIRStubForCompareType(first->toCacheIR_Regular()); if (!second) { return first_type; } MCompare::CompareType second_type = ParseCacheIRStubForCompareType(second->toCacheIR_Regular()); if (first_type == MCompare::Compare_Unknown || second_type == MCompare::Compare_Unknown) { return MCompare::Compare_Unknown; } if (first_type == second_type) { return first_type; } return CompatibleType(first_type, second_type); }