Closed
Bug 1045749
Opened 10 years ago
Closed 10 years ago
Eliminate resume point operands which are immediately popped
Categories
(Core :: JavaScript Engine: JIT, defect)
Tracking
()
RESOLVED
FIXED
mozilla34
People
(Reporter: bhackett1024, Assigned: bhackett1024)
References
Details
Attachments
(1 file, 2 obsolete files)
(deleted),
patch
|
nbp
:
review+
|
Details | Diff | Splinter Review |
If, after bailing out from Ion execution, baseline immediately pops the top of the stack, that popped value doesn't need to be accurately retained in the resume point used for the bailout. The attached patch performs this optimization, which fixes the codegen inefficiency in bug 1028580 comment 4.
Attachment #8464136 -
Flags: review?(jdemooij)
Comment 1•10 years ago
|
||
Comment on attachment 8464136 [details] [diff] [review]
patch
Review of attachment 8464136 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/jit/IonAnalysis.cpp
@@ +406,5 @@
> if (mir->shouldCancel("Eliminate Dead Resume Point Operands (main loop)"))
> return false;
>
> + // Eliminate resume point operands which are trivially unobservable.
> + for (MResumePointIterator iter(block->resumePointsBegin());
FYI, I am removing this list of resume points in Bug 1042729, can we do that when we are creating the resume points instead of doing it here?
@@ +416,5 @@
> + if (iter->mode() == MResumePoint::ResumeAt && *iter->pc() == JSOP_POP) {
> + size_t top = iter->stackDepth() - 1;
> +
> + // Using MResumePointIterator can see partially initialized resume points.
> + if (!iter->hasOperand(top))
No longer, this is what is fixed in Bug 1042729.
Assignee | ||
Comment 2•10 years ago
|
||
This patch avoids using MResumePointIterator, instead looking for resume points attached to instructions and block entry, and doesn't need the check for orphaned uninitialized resume points. I think it's cleaner to do this here than at resume point creation since this optimization fits in well with what EliminateDeadResumePointOperands is already doing.
Attachment #8464136 -
Attachment is obsolete: true
Attachment #8464136 -
Flags: review?(jdemooij)
Attachment #8464245 -
Flags: review?(jdemooij)
Comment 3•10 years ago
|
||
Comment on attachment 8464245 [details] [diff] [review]
don't use MResumePointIterator
Review of attachment 8464245 [details] [diff] [review]:
-----------------------------------------------------------------
Stealing review.
Sounds good to me, nice finding :)
Attachment #8464245 -
Flags: review?(jdemooij) → review+
Comment 4•10 years ago
|
||
Comment on attachment 8464245 [details] [diff] [review]
don't use MResumePointIterator
Review of attachment 8464245 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/jit/IonAnalysis.cpp
@@ +392,5 @@
> + return;
> +
> + size_t top = rp->stackDepth() - 1;
> +
> + MDefinition *def = rp->getOperand(top);
nit: Assert that this operand is not observable.
Assignee | ||
Comment 5•10 years ago
|
||
Unfortunately, adding that assert exposed an issue with the patch, where we were replacing non-stack operands to resume points. The problem is with the resume points for split edges, which do not necessarily have a stack depth that matches their associated pc. Rather than working around these deformed resume points, this patch just clears them and their uses out.
Assignee: nobody → bhackett1024
Attachment #8464245 -
Attachment is obsolete: true
Attachment #8465576 -
Flags: review?(nicolas.b.pierron)
Comment 6•10 years ago
|
||
Comment on attachment 8465576 [details] [diff] [review]
updated
Review of attachment 8465576 [details] [diff] [review]:
-----------------------------------------------------------------
Whoa, this is a big change compared to the assumption we have on the graph.
Hopefully SplitEdge blocks should have no instructions, but we would have to be careful with transformations which might be adding instructions in these blocks.
By chance the lowering would simply SEGV with near null pointer if such case happen.
Attachment #8465576 -
Flags: review?(nicolas.b.pierron) → review+
Assignee | ||
Comment 7•10 years ago
|
||
Comment 8•10 years ago
|
||
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla34
You need to log in
before you can comment on or make changes to this bug.
Description
•