summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/gbc_expander.cc
diff options
context:
space:
mode:
author TDYa127 <tdy@google.com> 2012-08-25 23:23:27 -0700
committer Shih-wei Liao <sliao@google.com> 2012-09-15 04:51:25 -0700
commit87caa7e1eb7a9ed56285062ef2feb650d42e3bb6 (patch)
tree56fdb934a938a5c9420b7a81b47e5ffbdf7d8d83 /src/compiler_llvm/gbc_expander.cc
parent347166aeff128c86f921ec214a2789ca89b84e70 (diff)
Implement CatchTargets.
Change-Id: Ia2c872f90ab2d7b5498ed6e57621c8250e9893b8
Diffstat (limited to 'src/compiler_llvm/gbc_expander.cc')
-rw-r--r--src/compiler_llvm/gbc_expander.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 471a1250ae..dbedb27744 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -455,7 +455,7 @@ void GBCExpanderPass::RewriteFunction() {
// 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 @@ GBCExpanderPass::ExpandIntrinsic(IntrinsicHelper::IntrinsicId intr_id,
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: