Bug 1314438: Follow-up fix to only guard if it isn't a guard already ON CLOSED TREE, r=bustage

This commit is contained in:
Hannes Verschore 2016-11-07 10:20:56 +01:00
Родитель 1f29fcb609
Коммит df4976ee55
2 изменённых файлов: 8 добавлений и 4 удалений

Просмотреть файл

@ -2390,7 +2390,8 @@ MPhi::foldsTernary(TempAllocator& alloc)
// - fold testArg ? testArg : 0 to testArg
// - fold testArg ? 0 : testArg to 0
if (testArg->type() == MIRType::Int32 && c->numberToDouble() == 0) {
testArg->setGuardRangeBailoutsUnchecked();
if (DeadIfUnused(testArg))
testArg->setGuardRangeBailoutsUnchecked();
// When folding to the constant we need to hoist it.
if (trueDef == c && !c->block()->dominates(block()))
@ -4393,7 +4394,8 @@ MCompare::tryFoldEqualOperands(bool* result)
return false;
}
lhs()->setGuardRangeBailoutsUnchecked();
if (DeadIfUnused(lhs()))
lhs()->setGuardRangeBailoutsUnchecked();
*result = (jsop() == JSOP_STRICTEQ);
return true;

Просмотреть файл

@ -796,8 +796,10 @@ ValueNumberer::visitDefinition(MDefinition* def)
// needed, so we can clear |def|'s guard flag and let it be discarded.
def->setNotGuardUnchecked();
if (def->isGuardRangeBailouts())
sim->setGuardRangeBailoutsUnchecked();
if (def->isGuardRangeBailouts()) {
if (DeadIfUnused(sim))
sim->setGuardRangeBailoutsUnchecked();
}
if (DeadIfUnused(def)) {
if (!discardDefsRecursively(def))