break;
case Instruction::Br: {
const BranchInst *BI = cast<BranchInst>(I);
- NewI = new BranchInst(
- cast<BasicBlock>(ConvertValue(BI->getSuccessor(0))),
- cast_or_null<BasicBlock>(ConvertValue(BI->getSuccessor(1))),
- ConvertValue(BI->getCondition()));
+ if (BI->isConditional()) {
+ NewI =
+ new BranchInst(cast<BasicBlock>(ConvertValue(BI->getSuccessor(0))),
+ cast<BasicBlock>(ConvertValue(BI->getSuccessor(1))),
+ ConvertValue(BI->getCondition()));
+ } else {
+ NewI =
+ new BranchInst(cast<BasicBlock>(ConvertValue(BI->getSuccessor(0))));
+ }
break;
}
case Instruction::Switch:
void SCCP::visitSwitchInst(SwitchInst *SI) {
InstVal &SCValue = getValueState(SI->getCondition());
if (SCValue.isOverdefined()) { // Overdefined condition? All dests are exe
- for(unsigned i = 0; BasicBlock *Succ = SI->getSuccessor(i); ++i)
- markExecutable(Succ);
+ for(unsigned i = 0, E = SI->getNumSuccessors(); i != E; ++i)
+ markExecutable(SI->getSuccessor(i));
} else if (SCValue.isConstant()) {
Constant *CPV = SCValue.getConstant();
// Make sure to skip the "default value" which isn't a value