rethrow is really the language independent primitive here. "throw" can be written

in terms of it and llvm.exc.setcurrent.
Rework the intrinsics.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8111 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-08-24 12:24:11 +00:00
parent 101d40060c
commit 657fbe68b8

View File

@ -191,12 +191,12 @@ bool InlineFunction(CallSite CS) {
if (Function *F = CI->getCalledFunction())
if (unsigned ID = F->getIntrinsicID())
if (ID == LLVMIntrinsic::exc_rethrow) {
// llvm.exc.rethrow requires special handling when it gets
// inlined into an invoke site. Once this happens, we know that
// the rethrow would cause a control transfer to the invoke
// exception destination, so we can transform it into a direct
// branch to the exception destination.
if (ID == LLVMIntrinsic::unwind) {
// llvm.unwind requires special handling when it gets inlined
// into an invoke site. Once this happens, we know that the
// unwind would cause a control transfer to the invoke exception
// destination, so we can transform it into a direct branch to
// the exception destination.
BranchInst *BI = new BranchInst(InvokeDest, CI);
// Note that since any instructions after the rethrow/branch are
@ -211,7 +211,7 @@ bool InlineFunction(CallSite CS) {
}
break; // Done with this basic block!
} else if (ID == LLVMIntrinsic::exc_throw ||
} else if (ID == LLVMIntrinsic::exc_setcurrent ||
ID == LLVMIntrinsic::exc_getcurrent) {
ShouldInvokify = false; // Not correct to invokify exc.throw!
}