diff options
| author | 2012-08-25 23:23:27 -0700 | |
|---|---|---|
| committer | 2012-09-15 04:51:25 -0700 | |
| commit | 87caa7e1eb7a9ed56285062ef2feb650d42e3bb6 (patch) | |
| tree | 56fdb934a938a5c9420b7a81b47e5ffbdf7d8d83 /src/compiler_llvm/gbc_expander.cc | |
| parent | 347166aeff128c86f921ec214a2789ca89b84e70 (diff) | |
Implement CatchTargets.
Change-Id: Ia2c872f90ab2d7b5498ed6e57621c8250e9893b8
Diffstat (limited to 'src/compiler_llvm/gbc_expander.cc')
| -rw-r--r-- | src/compiler_llvm/gbc_expander.cc | 11 |
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: |