Skip to content

Commit 6e00d8a

Browse files
committed
add asserts in replaceBranchTarget() and use casts instead of dyn_casts
1 parent 5e0f4b7 commit 6e00d8a

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

lib/SILOptimizer/Utils/CFG.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,8 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
328328
switch (T->getTermKind()) {
329329
// Only Branch and CondBranch may have arguments.
330330
case TermKind::BranchInst: {
331-
auto Br = dyn_cast<BranchInst>(T);
331+
auto Br = cast<BranchInst>(T);
332+
assert(OldDest == Br->getDestBB() && "wrong branch target");
332333
SmallVector<SILValue, 8> Args;
333334
if (PreserveArgs) {
334335
for (auto Arg : Br->getArgs())
@@ -341,7 +342,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
341342
}
342343

343344
case TermKind::CondBranchInst: {
344-
auto CondBr = dyn_cast<CondBranchInst>(T);
345+
auto CondBr = cast<CondBranchInst>(T);
345346
SmallVector<SILValue, 8> TrueArgs;
346347
if (OldDest == CondBr->getFalseBB() || PreserveArgs) {
347348
for (auto Arg : CondBr->getTrueArgs())
@@ -354,10 +355,12 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
354355
}
355356
SILBasicBlock *TrueDest = CondBr->getTrueBB();
356357
SILBasicBlock *FalseDest = CondBr->getFalseBB();
357-
if (OldDest == CondBr->getTrueBB())
358+
if (OldDest == CondBr->getTrueBB()) {
358359
TrueDest = NewDest;
359-
else
360+
} else {
361+
assert(OldDest == CondBr->getFalseBB() && "wrong cond_br target");
360362
FalseDest = NewDest;
363+
}
361364

362365
B.createCondBranch(CondBr->getLoc(), CondBr->getCondition(),
363366
TrueDest, TrueArgs, FalseDest, FalseArgs);
@@ -367,7 +370,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
367370
}
368371

369372
case TermKind::SwitchValueInst: {
370-
auto SII = dyn_cast<SwitchValueInst>(T);
373+
auto SII = cast<SwitchValueInst>(T);
371374
SmallVector<std::pair<SILValue, SILBasicBlock *>, 8> Cases;
372375
auto *DefaultBB = replaceSwitchDest(SII, Cases, OldDest, NewDest);
373376
B.createSwitchValue(SII->getLoc(), SII->getOperand(), DefaultBB, Cases);
@@ -376,7 +379,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
376379
}
377380

378381
case TermKind::SwitchEnumInst: {
379-
auto SEI = dyn_cast<SwitchEnumInst>(T);
382+
auto SEI = cast<SwitchEnumInst>(T);
380383
SmallVector<std::pair<EnumElementDecl*, SILBasicBlock*>, 8> Cases;
381384
auto *DefaultBB = replaceSwitchDest(SEI, Cases, OldDest, NewDest);
382385
B.createSwitchEnum(SEI->getLoc(), SEI->getOperand(), DefaultBB, Cases);
@@ -385,7 +388,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
385388
}
386389

387390
case TermKind::SwitchEnumAddrInst: {
388-
auto SEI = dyn_cast<SwitchEnumAddrInst>(T);
391+
auto SEI = cast<SwitchEnumAddrInst>(T);
389392
SmallVector<std::pair<EnumElementDecl*, SILBasicBlock*>, 8> Cases;
390393
auto *DefaultBB = replaceSwitchDest(SEI, Cases, OldDest, NewDest);
391394
B.createSwitchEnumAddr(SEI->getLoc(), SEI->getOperand(), DefaultBB, Cases);
@@ -394,7 +397,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
394397
}
395398

396399
case TermKind::DynamicMethodBranchInst: {
397-
auto DMBI = dyn_cast<DynamicMethodBranchInst>(T);
400+
auto DMBI = cast<DynamicMethodBranchInst>(T);
398401
assert(OldDest == DMBI->getHasMethodBB() || OldDest == DMBI->getNoMethodBB() && "Invalid edge index");
399402
auto HasMethodBB = OldDest == DMBI->getHasMethodBB() ? NewDest : DMBI->getHasMethodBB();
400403
auto NoMethodBB = OldDest == DMBI->getNoMethodBB() ? NewDest : DMBI->getNoMethodBB();
@@ -405,7 +408,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
405408
}
406409

407410
case TermKind::CheckedCastBranchInst: {
408-
auto CBI = dyn_cast<CheckedCastBranchInst>(T);
411+
auto CBI = cast<CheckedCastBranchInst>(T);
409412
assert(OldDest == CBI->getSuccessBB() || OldDest == CBI->getFailureBB() && "Invalid edge index");
410413
auto SuccessBB = OldDest == CBI->getSuccessBB() ? NewDest : CBI->getSuccessBB();
411414
auto FailureBB = OldDest == CBI->getFailureBB() ? NewDest : CBI->getFailureBB();
@@ -416,7 +419,7 @@ void swift::replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
416419
}
417420

418421
case TermKind::CheckedCastAddrBranchInst: {
419-
auto CBI = dyn_cast<CheckedCastAddrBranchInst>(T);
422+
auto CBI = cast<CheckedCastAddrBranchInst>(T);
420423
assert(OldDest == CBI->getSuccessBB() || OldDest == CBI->getFailureBB() && "Invalid edge index");
421424
auto SuccessBB = OldDest == CBI->getSuccessBB() ? NewDest : CBI->getSuccessBB();
422425
auto FailureBB = OldDest == CBI->getFailureBB() ? NewDest : CBI->getFailureBB();

0 commit comments

Comments
 (0)