@@ -2467,7 +2467,7 @@ BackwardPass::DeadStoreImplicitCallBailOut(IR::Instr * instr, bool hasLiveFields
2467
2467
}
2468
2468
2469
2469
bool
2470
- BackwardPass::UpdateImplicitCallBailOutKind (IR::Instr * const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut)
2470
+ BackwardPass::UpdateImplicitCallBailOutKind (IR::Instr* const instr, bool needsBailOutOnImplicitCall, bool needsLazyBailOut)
2471
2471
{
2472
2472
Assert (instr);
2473
2473
Assert (instr->HasBailOutInfo ());
@@ -2481,7 +2481,7 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
2481
2481
" The lazy bailout bit should be present at this point. We might have removed it incorrectly."
2482
2482
);
2483
2483
2484
- const IR::BailOutKind bailOutKindWithBits = instr->GetBailOutKind ();
2484
+ IR::BailOutKind bailOutKindWithBits = instr->GetBailOutKind ();
2485
2485
2486
2486
const bool hasMarkTempObject = bailOutKindWithBits & IR::BailOutMarkTempObject;
2487
2487
@@ -2490,7 +2490,8 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
2490
2490
// of `needsBailOutOnImplicitCall`.
2491
2491
if (hasMarkTempObject)
2492
2492
{
2493
- instr->SetBailOutKind (bailOutKindWithBits & ~IR::BailOutMarkTempObject);
2493
+ bailOutKindWithBits &= ~IR::BailOutMarkTempObject;
2494
+ instr->SetBailOutKind (bailOutKindWithBits);
2494
2495
}
2495
2496
2496
2497
if (needsBailOutOnImplicitCall)
@@ -2518,9 +2519,10 @@ BackwardPass::UpdateImplicitCallBailOutKind(IR::Instr *const instr, bool needsBa
2518
2519
}
2519
2520
2520
2521
const IR::BailOutKind bailOutKindWithoutBits = instr->GetBailOutKindNoBits ();
2521
-
2522
- if (hasMarkTempObject)
2522
+ if (!instr->GetBailOutInfo ()->canDeadStore )
2523
2523
{
2524
+ // revisit if canDeadStore is used for anything other than BailOutMarkTempObject
2525
+ Assert (hasMarkTempObject);
2524
2526
// Don't remove the implicit call pre op bailout for mark temp object.
2525
2527
Assert (bailOutKindWithoutBits == IR::BailOutOnImplicitCallsPreOp);
2526
2528
return true ;
@@ -4369,59 +4371,6 @@ BackwardPass::TraceBlockUses(BasicBlock * block, bool isStart)
4369
4371
4370
4372
#endif
4371
4373
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
-
4425
4374
bool
4426
4375
BackwardPass::ProcessNoImplicitCallUses (IR::Instr *const instr)
4427
4376
{
0 commit comments