Skip to content

Commit 174fc46

Browse files
committed
[MERGE #6198 @nhat-nguyen] Fix missing logic in UpdateImplicitCallBailOutKind due to bad merge
Merge pull request #6198 from nhat-nguyen:merge
2 parents 1b20111 + 50d3848 commit 174fc46

File tree

2 files changed

+7
-59
lines changed

2 files changed

+7
-59
lines changed

lib/Backend/BackwardPass.cpp

Lines changed: 7 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,7 +2467,7 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields
24672467
}
24682468

24692469
bool
2470-
BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut)
2470+
BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr* const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut)
24712471
{
24722472
Assert(instr);
24732473
Assert(instr->HasBailOutInfo());
@@ -2481,7 +2481,7 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
24812481
"The lazy bailout bit should be present at this point. We might have removed it incorrectly."
24822482
);
24832483

2484-
const IR::BailOutKind bailOutKindWithBits = instr->GetBailOutKind();
2484+
IR::BailOutKind bailOutKindWithBits = instr->GetBailOutKind();
24852485

24862486
const bool hasMarkTempObject = bailOutKindWithBits & IR::BailOutMarkTempObject;
24872487

@@ -2490,7 +2490,8 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
24902490
// of `needsBailOutOnImplicitCall`.
24912491
if (hasMarkTempObject)
24922492
{
2493-
instr->SetBailOutKind(bailOutKindWithBits & ~IR::BailOutMarkTempObject);
2493+
bailOutKindWithBits &= ~IR::BailOutMarkTempObject;
2494+
instr->SetBailOutKind(bailOutKindWithBits);
24942495
}
24952496

24962497
if (needsBailOutOnImplicitCall)
@@ -2518,9 +2519,10 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
25182519
}
25192520

25202521
const IR::BailOutKind bailOutKindWithoutBits = instr->GetBailOutKindNoBits();
2521-
2522-
if (hasMarkTempObject)
2522+
if (!instr->GetBailOutInfo()->canDeadStore)
25232523
{
2524+
// revisit if canDeadStore is used for anything other than BailOutMarkTempObject
2525+
Assert(hasMarkTempObject);
25242526
// Don't remove the implicit call pre op bailout for mark temp object.
25252527
Assert(bailOutKindWithoutBits == IR::BailOutOnImplicitCallsPreOp);
25262528
return true;
@@ -4369,59 +4371,6 @@ BackwardPass::TraceBlockUses(BasicBlock * block, bool isStart)
43694371

43704372
#endif
43714373

4372-
bool
4373-
BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall)
4374-
{
4375-
Assert(instr);
4376-
Assert(instr->HasBailOutInfo());
4377-
4378-
IR::BailOutKind implicitCallBailOutKind = needsBailOutOnImplicitCall ? IR::BailOutOnImplicitCalls : IR::BailOutInvalid;
4379-
4380-
IR::BailOutKind instrBailOutKind = instr->GetBailOutKind();
4381-
if (instrBailOutKind & IR::BailOutMarkTempObject)
4382-
{
4383-
// Remove the mark temp object bit, as we don't need it after the dead store pass
4384-
instrBailOutKind &= ~IR::BailOutMarkTempObject;
4385-
instr->SetBailOutKind(instrBailOutKind);
4386-
4387-
if (!instr->GetBailOutInfo()->canDeadStore)
4388-
{
4389-
return true;
4390-
}
4391-
}
4392-
4393-
const IR::BailOutKind instrImplicitCallBailOutKind = instrBailOutKind & ~IR::BailOutKindBits;
4394-
if(instrImplicitCallBailOutKind == IR::BailOutOnImplicitCallsPreOp)
4395-
{
4396-
if(needsBailOutOnImplicitCall)
4397-
{
4398-
implicitCallBailOutKind = IR::BailOutOnImplicitCallsPreOp;
4399-
}
4400-
}
4401-
else if(instrImplicitCallBailOutKind != IR::BailOutOnImplicitCalls && instrImplicitCallBailOutKind != IR::BailOutInvalid)
4402-
{
4403-
// This bailout kind (the value of 'instrImplicitCallBailOutKind') must guarantee that implicit calls will not happen.
4404-
// If it doesn't make such a guarantee, it must be possible to merge this bailout kind with an implicit call bailout
4405-
// kind, and therefore should be part of BailOutKindBits.
4406-
Assert(!needsBailOutOnImplicitCall);
4407-
return true;
4408-
}
4409-
4410-
if(instrImplicitCallBailOutKind == implicitCallBailOutKind)
4411-
{
4412-
return true;
4413-
}
4414-
4415-
const IR::BailOutKind newBailOutKind = instrBailOutKind - instrImplicitCallBailOutKind + implicitCallBailOutKind;
4416-
if(newBailOutKind == IR::BailOutInvalid)
4417-
{
4418-
return false;
4419-
}
4420-
4421-
instr->SetBailOutKind(newBailOutKind);
4422-
return true;
4423-
}
4424-
44254374
bool
44264375
BackwardPass::ProcessNoImplicitCallUses(IR::Instr *const instr)
44274376
{

lib/Backend/BackwardPass.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ class BackwardPass
7878
#endif
7979

8080
static bool UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut);
81-
static bool UpdateImplicitCallBailOutKind(IR::Instr* const instr, bool needsBailOutOnImplicitCall);
8281

8382
bool ProcessNoImplicitCallUses(IR::Instr *const instr);
8483
void ProcessNoImplicitCallDef(IR::Instr *const instr);

0 commit comments

Comments
 (0)