Bug 1246229 - Enable DCE to remove OSR guards if their values are optimized-out. r=h4writer

This commit is contained in:
Nicolas B. Pierron 2016-02-29 13:20:36 +00:00
parent 55b85aaf23
commit 56d3c8e8f0
2 changed files with 25 additions and 1 deletions

View File

@ -0,0 +1,22 @@
// |jit-test| --ion-offthread-compile=off;
// We disable any off-main thread compilation, and set a definite trigger for
// Ion compilation, such that we can garantee that we would OSR into the inner
// loop before we reach the end of the loop.
setJitCompilerOption("ion.warmup.trigger", 30);
function f (n) {
while (!inIon()) {
var inner = 0;
let x = {};
for (var i = 0; i < n; i++) {
inner += inIon() == true ? 1 : 0;
if (inner <= 1)
bailout();
}
assertEq(inner != 1, true);
}
}
// Iterate enough to ensure that we OSR in this inner loop.
f(300);

View File

@ -950,7 +950,9 @@ jit::EliminateDeadResumePointOperands(MIRGenerator* mir, MIRGraph& graph)
bool
js::jit::DeadIfUnused(const MDefinition* def)
{
return !def->isEffectful() && !def->isGuard() && !def->isGuardRangeBailouts() &&
return !def->isEffectful() &&
(!def->isGuard() || def->block() == def->block()->graph().osrBlock()) &&
!def->isGuardRangeBailouts() &&
!def->isControlInstruction() &&
(!def->isInstruction() || !def->toInstruction()->resumePoint());
}