Having problem about split basic block

Hi,

I am using llvm to do some basic loop transformation practice. My target loop is simple as following:

int x[5000][100] = {0};
for (j = 0; j < 100; j = j+1){
for (i = 0; i < 5000; i = i+1){
x[i][j] = 2;
}
}

What I want to do is to unroll the inner-loop and see how’s the speed change.
I first tried to use Looppass to achieve my goal:

class IndependentUnroll : public llvm::LoopPass
{
public:

virtual void unroll(llvm::Loop *L){

for (Loop::block_iterator block = L->block_begin(); block != L->block_end(); block++) {
BasicBlock *bb = block;
/
Handle loop body. */
if (string(bb->getName()).find(“for.body3”) != string::npos) {
Instruction *inst = &bb->back();
BasicBlock new_bb = bb->splitBasicBlock(inst);
/*I try to split the block and insert new instruction
__But my code crashed here
/__
}
}
}

IndependentUnroll() : llvm::LoopPass(IndependentUnroll::ID) { }

virtual bool runOnLoop(llvm::Loop *L, llvm::LPPassManager &LPM) {

if (L->getLoopDepth() == 1){
unroll(L);
}
}
static char ID;

};

And I get the error:

opt: /home/morris/llvm-3.2/include/llvm/Analysis/LoopInfoImpl.h:297: void llvm::LoopBase<N, M>::verifyLoop() const [with BlockT = llvm::BasicBlock, LoopT = llvm::Loop]: Assertion `HasInsideLoopSuccs && “Loop block has no in-loop successors!”’ failed.
0 opt 0x00000000016befda
1 opt 0x00000000016becb0
2 libpthread.so.0 0x00007f95d58e2cb0
3 libc.so.6 0x00007f95d4d380d5 gsignal + 53
4 libc.so.6 0x00007f95d4d3b83b abort + 379
5 libc.so.6 0x00007f95d4d30d9e
6 libc.so.6 0x00007f95d4d30e42
7 opt 0x0000000001405631 llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::verifyLoop() const + 1441
8 opt 0x000000000140e482 llvm::LPPassManager::runOnFunction(llvm::Function&) + 1354
9 opt 0x00000000015cad3c llvm::FPPassManager::runOnFunction(llvm::Function&) + 388
10 opt 0x00000000015caf57 llvm::FPPassManager::runOnModule(llvm::Module&) + 107
11 opt 0x00000000015cb29a llvm::MPPassManager::runOnModule(llvm::Module&) + 456
12 opt 0x00000000015cb7c9 llvm::PassManagerImpl::run(llvm::Module&) + 125
13 opt 0x00000000015cb97d llvm::PassManager::run(llvm::Module&) + 39
14 opt 0x00000000008c1904 main + 5346
15 libc.so.6 0x00007f95d4d2376d __libc_start_main + 237
16 opt 0x00000000008b1809

Can anyone tell me what is the reason of this situation?
By the way I can successfully unroll same loop if I write the my pass with FunctionPass (the same code but traverse by runOnfinction)

Thank you!