mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 859255 - Fix stitching up of parallel bailout basic blocks. (r=dvander)
This commit is contained in:
parent
fc7ff0437c
commit
d9624c5899
@ -161,17 +161,21 @@ MBasicBlock::NewSplitEdge(MIRGraph &graph, CompileInfo &info, MBasicBlock *pred)
|
|||||||
|
|
||||||
MBasicBlock *
|
MBasicBlock *
|
||||||
MBasicBlock::NewParBailout(MIRGraph &graph, CompileInfo &info,
|
MBasicBlock::NewParBailout(MIRGraph &graph, CompileInfo &info,
|
||||||
MBasicBlock *pred, jsbytecode *entryPc)
|
MBasicBlock *pred, jsbytecode *entryPc,
|
||||||
|
MResumePoint *resumePoint)
|
||||||
{
|
{
|
||||||
MBasicBlock *block = MBasicBlock::New(graph, info, pred, entryPc, NORMAL);
|
MBasicBlock *block = new MBasicBlock(graph, info, entryPc, NORMAL);
|
||||||
if (!block)
|
|
||||||
|
resumePoint->block_ = block;
|
||||||
|
block->entryResumePoint_ = resumePoint;
|
||||||
|
|
||||||
|
if (!block->init())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
MParBailout *bailout = new MParBailout();
|
if (!block->addPredecessorWithoutPhis(pred))
|
||||||
if (!bailout)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
block->end(bailout);
|
block->end(new MParBailout());
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,8 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock>
|
|||||||
MBasicBlock *pred, jsbytecode *entryPc);
|
MBasicBlock *pred, jsbytecode *entryPc);
|
||||||
static MBasicBlock *NewSplitEdge(MIRGraph &graph, CompileInfo &info, MBasicBlock *pred);
|
static MBasicBlock *NewSplitEdge(MIRGraph &graph, CompileInfo &info, MBasicBlock *pred);
|
||||||
static MBasicBlock *NewParBailout(MIRGraph &graph, CompileInfo &info,
|
static MBasicBlock *NewParBailout(MIRGraph &graph, CompileInfo &info,
|
||||||
MBasicBlock *pred, jsbytecode *entryPc);
|
MBasicBlock *pred, jsbytecode *entryPc,
|
||||||
|
MResumePoint *resumePoint);
|
||||||
|
|
||||||
bool dominates(MBasicBlock *other);
|
bool dominates(MBasicBlock *other);
|
||||||
|
|
||||||
|
@ -508,11 +508,6 @@ ParallelArrayVisitor::convertToBailout(MBasicBlock *block, MInstruction *ins)
|
|||||||
// This block is no longer reachable.
|
// This block is no longer reachable.
|
||||||
block->unmark();
|
block->unmark();
|
||||||
|
|
||||||
// Determine the best PC to use for the bailouts we'll be creating.
|
|
||||||
jsbytecode *pc = block->pc();
|
|
||||||
if (!pc)
|
|
||||||
pc = block->pc();
|
|
||||||
|
|
||||||
// Create a bailout block for each predecessor. In principle, we
|
// Create a bailout block for each predecessor. In principle, we
|
||||||
// only need one bailout block--in fact, only one per graph! But I
|
// only need one bailout block--in fact, only one per graph! But I
|
||||||
// found this approach easier to implement given the design of the
|
// found this approach easier to implement given the design of the
|
||||||
@ -528,7 +523,8 @@ ParallelArrayVisitor::convertToBailout(MBasicBlock *block, MInstruction *ins)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// create bailout block to insert on this edge
|
// create bailout block to insert on this edge
|
||||||
MBasicBlock *bailBlock = MBasicBlock::NewParBailout(graph_, pred->info(), pred, pc);
|
MBasicBlock *bailBlock = MBasicBlock::NewParBailout(graph_, block->info(), pred,
|
||||||
|
block->pc(), block->entryResumePoint());
|
||||||
if (!bailBlock)
|
if (!bailBlock)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user