@@ -328,7 +328,8 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
328
328
switch (T->getTermKind ()) {
329
329
// Only Branch and CondBranch may have arguments.
330
330
case TermKind::BranchInst: {
331
- auto Br = dyn_cast<BranchInst>(T);
331
+ auto Br = cast<BranchInst>(T);
332
+ assert (OldDest == Br->getDestBB () && " wrong branch target" );
332
333
SmallVector<SILValue, 8 > Args;
333
334
if (PreserveArgs) {
334
335
for (auto Arg : Br->getArgs ())
@@ -341,7 +342,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
341
342
}
342
343
343
344
case TermKind::CondBranchInst: {
344
- auto CondBr = dyn_cast <CondBranchInst>(T);
345
+ auto CondBr = cast <CondBranchInst>(T);
345
346
SmallVector<SILValue, 8 > TrueArgs;
346
347
if (OldDest == CondBr->getFalseBB () || PreserveArgs) {
347
348
for (auto Arg : CondBr->getTrueArgs ())
@@ -354,10 +355,12 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
354
355
}
355
356
SILBasicBlock *TrueDest = CondBr->getTrueBB ();
356
357
SILBasicBlock *FalseDest = CondBr->getFalseBB ();
357
- if (OldDest == CondBr->getTrueBB ())
358
+ if (OldDest == CondBr->getTrueBB ()) {
358
359
TrueDest = NewDest;
359
- else
360
+ } else {
361
+ assert (OldDest == CondBr->getFalseBB () && " wrong cond_br target" );
360
362
FalseDest = NewDest;
363
+ }
361
364
362
365
B.createCondBranch (CondBr->getLoc (), CondBr->getCondition (),
363
366
TrueDest, TrueArgs, FalseDest, FalseArgs);
@@ -367,7 +370,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
367
370
}
368
371
369
372
case TermKind::SwitchValueInst: {
370
- auto SII = dyn_cast <SwitchValueInst>(T);
373
+ auto SII = cast <SwitchValueInst>(T);
371
374
SmallVector<std::pair<SILValue, SILBasicBlock *>, 8 > Cases;
372
375
auto *DefaultBB = replaceSwitchDest (SII, Cases, OldDest, NewDest);
373
376
B.createSwitchValue (SII->getLoc (), SII->getOperand (), DefaultBB, Cases);
@@ -376,7 +379,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
376
379
}
377
380
378
381
case TermKind::SwitchEnumInst: {
379
- auto SEI = dyn_cast <SwitchEnumInst>(T);
382
+ auto SEI = cast <SwitchEnumInst>(T);
380
383
SmallVector<std::pair<EnumElementDecl*, SILBasicBlock*>, 8 > Cases;
381
384
auto *DefaultBB = replaceSwitchDest (SEI, Cases, OldDest, NewDest);
382
385
B.createSwitchEnum (SEI->getLoc (), SEI->getOperand (), DefaultBB, Cases);
@@ -385,7 +388,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
385
388
}
386
389
387
390
case TermKind::SwitchEnumAddrInst: {
388
- auto SEI = dyn_cast <SwitchEnumAddrInst>(T);
391
+ auto SEI = cast <SwitchEnumAddrInst>(T);
389
392
SmallVector<std::pair<EnumElementDecl*, SILBasicBlock*>, 8 > Cases;
390
393
auto *DefaultBB = replaceSwitchDest (SEI, Cases, OldDest, NewDest);
391
394
B.createSwitchEnumAddr (SEI->getLoc (), SEI->getOperand (), DefaultBB, Cases);
@@ -394,7 +397,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
394
397
}
395
398
396
399
case TermKind::DynamicMethodBranchInst: {
397
- auto DMBI = dyn_cast <DynamicMethodBranchInst>(T);
400
+ auto DMBI = cast <DynamicMethodBranchInst>(T);
398
401
assert (OldDest == DMBI->getHasMethodBB () || OldDest == DMBI->getNoMethodBB () && " Invalid edge index" );
399
402
auto HasMethodBB = OldDest == DMBI->getHasMethodBB () ? NewDest : DMBI->getHasMethodBB ();
400
403
auto NoMethodBB = OldDest == DMBI->getNoMethodBB () ? NewDest : DMBI->getNoMethodBB ();
@@ -405,7 +408,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
405
408
}
406
409
407
410
case TermKind::CheckedCastBranchInst: {
408
- auto CBI = dyn_cast <CheckedCastBranchInst>(T);
411
+ auto CBI = cast <CheckedCastBranchInst>(T);
409
412
assert (OldDest == CBI->getSuccessBB () || OldDest == CBI->getFailureBB () && " Invalid edge index" );
410
413
auto SuccessBB = OldDest == CBI->getSuccessBB () ? NewDest : CBI->getSuccessBB ();
411
414
auto FailureBB = OldDest == CBI->getFailureBB () ? NewDest : CBI->getFailureBB ();
@@ -416,7 +419,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
416
419
}
417
420
418
421
case TermKind::CheckedCastAddrBranchInst: {
419
- auto CBI = dyn_cast <CheckedCastAddrBranchInst>(T);
422
+ auto CBI = cast <CheckedCastAddrBranchInst>(T);
420
423
assert (OldDest == CBI->getSuccessBB () || OldDest == CBI->getFailureBB () && " Invalid edge index" );
421
424
auto SuccessBB = OldDest == CBI->getSuccessBB () ? NewDest : CBI->getSuccessBB ();
422
425
auto FailureBB = OldDest == CBI->getFailureBB () ? NewDest : CBI->getFailureBB ();
0 commit comments