Bug 1048046 - Remove non-observed instructions, even if they might be recovered on bailout. r=h4writer
authorNicolas B. Pierron <nicolas.b.pierron@mozilla.com>
Mon, 04 Aug 2014 07:59:44 -0700
changeset 219354 c835743934c32692f9c7de4cbc76db47b394485c
parent 219353 8783e1a91b37903a14b8982d84840bb4529c226e
child 219355 ca2ba3cafed71299dfc000db9c4c71be656c4418
push id3979
push userraliiev@mozilla.com
push dateMon, 13 Oct 2014 16:35:44 +0000
treeherdermozilla-beta@30f2cc610691 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersh4writer
bugs1048046
milestone34.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1048046 - Remove non-observed instructions, even if they might be recovered on bailout. r=h4writer
js/src/jit/IonAnalysis.cpp
--- a/js/src/jit/IonAnalysis.cpp
+++ b/js/src/jit/IonAnalysis.cpp
@@ -422,18 +422,20 @@ jit::EliminateDeadResumePointOperands(MI
             // than doing a more sophisticated analysis, just ignore these.
             if (ins->isUnbox() || ins->isParameter() || ins->isTypeBarrier() || ins->isComputeThis())
                 continue;
 
             // Early intermediate values captured by resume points, such as
             // TypedObject, ArrayState and its allocation, may be legitimately
             // dead in Ion code, but are still needed if we bail out. They can
             // recover on bailout.
-            if (ins->canRecoverOnBailout())
+            if (ins->isNewDerivedTypedObject() || ins->isRecoveredOnBailout()) {
+                MOZ_ASSERT(ins->canRecoverOnBailout());
                 continue;
+            }
 
             // If the instruction's behavior has been constant folded into a
             // separate instruction, we can't determine precisely where the
             // instruction becomes dead and can't eliminate its uses.
             if (ins->isImplicitlyUsed())
                 continue;
 
             // Check if this instruction's result is only used within the