Implement CatchTargets.
Change-Id: Ia2c872f90ab2d7b5498ed6e57621c8250e9893b8
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 471a125..dbedb27 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -455,7 +455,7 @@
// Set insert point to current basic block.
irb_.SetInsertPoint(bb_iter);
- old_basic_block_ = bb_iter;
+ old_basic_block_ = bb_iter->getUniquePredecessor();
// Rewrite the basic block
RewriteBasicBlock(bb_iter);
@@ -3599,6 +3599,15 @@
irb_.getJIntTy());
}
+ //==- Exception --------------------------------------------------------==//
+ case IntrinsicHelper::CatchTargets: {
+ llvm::SwitchInst* si = llvm::dyn_cast<llvm::SwitchInst>(call_inst.getNextNode());
+ CHECK(si != NULL);
+ irb_.CreateBr(si->getDefaultDest());
+ si->eraseFromParent();
+ return call_inst.getArgOperand(0);
+ }
+
//==- Unknown Cases ----------------------------------------------------==//
case IntrinsicHelper::MaxIntrinsicId:
case IntrinsicHelper::UnknownId: