Recommit r80858 again (which has been backed out in r80871).
[oota-llvm.git] / lib / Transforms / Utils / LowerInvoke.cpp
1 //===- LowerInvoke.cpp - Eliminate Invoke & Unwind instructions -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This transformation is designed for use by code generators which do not yet
11 // support stack unwinding.  This pass supports two models of exception handling
12 // lowering, the 'cheap' support and the 'expensive' support.
13 //
14 // 'Cheap' exception handling support gives the program the ability to execute
15 // any program which does not "throw an exception", by turning 'invoke'
16 // instructions into calls and by turning 'unwind' instructions into calls to
17 // abort().  If the program does dynamically use the unwind instruction, the
18 // program will print a message then abort.
19 //
20 // 'Expensive' exception handling support gives the full exception handling
21 // support to the program at the cost of making the 'invoke' instruction
22 // really expensive.  It basically inserts setjmp/longjmp calls to emulate the
23 // exception handling as necessary.
24 //
25 // Because the 'expensive' support slows down programs a lot, and EH is only
26 // used for a subset of the programs, it must be specifically enabled by an
27 // option.
28 //
29 // Note that after this pass runs the CFG is not entirely accurate (exceptional
30 // control flow edges are not correct anymore) so only very simple things should
31 // be done after the lowerinvoke pass has run (like generation of native code).
32 // This should not be used as a general purpose "my LLVM-to-LLVM pass doesn't
33 // support the invoke instruction yet" lowering pass.
34 //
35 //===----------------------------------------------------------------------===//
36
37 #define DEBUG_TYPE "lowerinvoke"
38 #include "llvm/Transforms/Scalar.h"
39 #include "llvm/Constants.h"
40 #include "llvm/DerivedTypes.h"
41 #include "llvm/Instructions.h"
42 #include "llvm/Intrinsics.h"
43 #include "llvm/LLVMContext.h"
44 #include "llvm/Module.h"
45 #include "llvm/Pass.h"
46 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
47 #include "llvm/Transforms/Utils/Local.h"
48 #include "llvm/ADT/Statistic.h"
49 #include "llvm/Support/CommandLine.h"
50 #include "llvm/Target/TargetLowering.h"
51 #include <csetjmp>
52 #include <set>
53 using namespace llvm;
54
55 STATISTIC(NumInvokes, "Number of invokes replaced");
56 STATISTIC(NumUnwinds, "Number of unwinds replaced");
57 STATISTIC(NumSpilled, "Number of registers live across unwind edges");
58
59 static cl::opt<bool> ExpensiveEHSupport("enable-correct-eh-support",
60  cl::desc("Make the -lowerinvoke pass insert expensive, but correct, EH code"));
61
62 namespace {
63   class LowerInvoke : public FunctionPass {
64     // Used for both models.
65     Constant *WriteFn;
66     Constant *AbortFn;
67     Value *AbortMessage;
68     unsigned AbortMessageLength;
69
70     // Used for expensive EH support.
71     const Type *JBLinkTy;
72     GlobalVariable *JBListHead;
73     Constant *SetJmpFn, *LongJmpFn;
74
75     // We peek in TLI to grab the target's jmp_buf size and alignment
76     const TargetLowering *TLI;
77
78   public:
79     static char ID; // Pass identification, replacement for typeid
80     explicit LowerInvoke(const TargetLowering *tli = NULL)
81       : FunctionPass(&ID), TLI(tli) { }
82     bool doInitialization(Module &M);
83     bool runOnFunction(Function &F);
84
85     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
86       // This is a cluster of orthogonal Transforms
87       AU.addPreservedID(PromoteMemoryToRegisterID);
88       AU.addPreservedID(LowerSwitchID);
89     }
90
91   private:
92     void createAbortMessage(Module *M);
93     void writeAbortMessage(Instruction *IB);
94     bool insertCheapEHSupport(Function &F);
95     void splitLiveRangesLiveAcrossInvokes(std::vector<InvokeInst*> &Invokes);
96     void rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
97                                 AllocaInst *InvokeNum, SwitchInst *CatchSwitch);
98     bool insertExpensiveEHSupport(Function &F);
99   };
100 }
101
102 char LowerInvoke::ID = 0;
103 static RegisterPass<LowerInvoke>
104 X("lowerinvoke", "Lower invoke and unwind, for unwindless code generators");
105
106 const PassInfo *const llvm::LowerInvokePassID = &X;
107
108 // Public Interface To the LowerInvoke pass.
109 FunctionPass *llvm::createLowerInvokePass(const TargetLowering *TLI) {
110   return new LowerInvoke(TLI);
111 }
112
113 // doInitialization - Make sure that there is a prototype for abort in the
114 // current module.
115 bool LowerInvoke::doInitialization(Module &M) {
116   const Type *VoidPtrTy =
117           Type::getInt8PtrTy(M.getContext());
118   AbortMessage = 0;
119   if (ExpensiveEHSupport) {
120     // Insert a type for the linked list of jump buffers.
121     unsigned JBSize = TLI ? TLI->getJumpBufSize() : 0;
122     JBSize = JBSize ? JBSize : 200;
123     const Type *JmpBufTy = ArrayType::get(VoidPtrTy, JBSize);
124
125     { // The type is recursive, so use a type holder.
126       std::vector<const Type*> Elements;
127       Elements.push_back(JmpBufTy);
128       OpaqueType *OT = OpaqueType::get(M.getContext());
129       Elements.push_back(PointerType::getUnqual(OT));
130       PATypeHolder JBLType(StructType::get(M.getContext(), Elements));
131       OT->refineAbstractTypeTo(JBLType.get());  // Complete the cycle.
132       JBLinkTy = JBLType.get();
133       M.addTypeName("llvm.sjljeh.jmpbufty", JBLinkTy);
134     }
135
136     const Type *PtrJBList = PointerType::getUnqual(JBLinkTy);
137
138     // Now that we've done that, insert the jmpbuf list head global, unless it
139     // already exists.
140     if (!(JBListHead = M.getGlobalVariable("llvm.sjljeh.jblist", PtrJBList))) {
141       JBListHead = new GlobalVariable(M, PtrJBList, false,
142                                       GlobalValue::LinkOnceAnyLinkage,
143                                       Constant::getNullValue(PtrJBList),
144                                       "llvm.sjljeh.jblist");
145     }
146
147 // VisualStudio defines setjmp as _setjmp via #include <csetjmp> / <setjmp.h>,
148 // so it looks like Intrinsic::_setjmp
149 #if defined(_MSC_VER) && defined(setjmp)
150 #define setjmp_undefined_for_visual_studio
151 #undef setjmp
152 #endif
153
154     SetJmpFn = Intrinsic::getDeclaration(&M, Intrinsic::setjmp);
155
156 #if defined(_MSC_VER) && defined(setjmp_undefined_for_visual_studio)
157 // let's return it to _setjmp state in case anyone ever needs it after this
158 // point under VisualStudio
159 #define setjmp _setjmp
160 #endif
161
162     LongJmpFn = Intrinsic::getDeclaration(&M, Intrinsic::longjmp);
163   }
164
165   // We need the 'write' and 'abort' functions for both models.
166   AbortFn = M.getOrInsertFunction("abort", Type::getVoidTy(M.getContext()),
167                                   (Type *)0);
168 #if 0 // "write" is Unix-specific.. code is going away soon anyway.
169   WriteFn = M.getOrInsertFunction("write", Type::VoidTy, Type::Int32Ty,
170                                   VoidPtrTy, Type::Int32Ty, (Type *)0);
171 #else
172   WriteFn = 0;
173 #endif
174   return true;
175 }
176
177 void LowerInvoke::createAbortMessage(Module *M) {
178   if (ExpensiveEHSupport) {
179     // The abort message for expensive EH support tells the user that the
180     // program 'unwound' without an 'invoke' instruction.
181     Constant *Msg =
182       ConstantArray::get(M->getContext(),
183                          "ERROR: Exception thrown, but not caught!\n");
184     AbortMessageLength = Msg->getNumOperands()-1;  // don't include \0
185
186     GlobalVariable *MsgGV = new GlobalVariable(*M, Msg->getType(), true,
187                                                GlobalValue::InternalLinkage,
188                                                Msg, "abortmsg");
189     std::vector<Constant*> GEPIdx(2,
190                      Constant::getNullValue(Type::getInt32Ty(M->getContext())));
191     AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, &GEPIdx[0], 2);
192   } else {
193     // The abort message for cheap EH support tells the user that EH is not
194     // enabled.
195     Constant *Msg =
196       ConstantArray::get(M->getContext(), 
197                         "Exception handler needed, but not enabled."      
198                         "Recompile program with -enable-correct-eh-support.\n");
199     AbortMessageLength = Msg->getNumOperands()-1;  // don't include \0
200
201     GlobalVariable *MsgGV = new GlobalVariable(*M, Msg->getType(), true,
202                                                GlobalValue::InternalLinkage,
203                                                Msg, "abortmsg");
204     std::vector<Constant*> GEPIdx(2, Constant::getNullValue(
205                                             Type::getInt32Ty(M->getContext())));
206     AbortMessage = ConstantExpr::getGetElementPtr(MsgGV, &GEPIdx[0], 2);
207   }
208 }
209
210
211 void LowerInvoke::writeAbortMessage(Instruction *IB) {
212 #if 0
213   if (AbortMessage == 0)
214     createAbortMessage(IB->getParent()->getParent()->getParent());
215
216   // These are the arguments we WANT...
217   Value* Args[3];
218   Args[0] = ConstantInt::get(Type::Int32Ty, 2);
219   Args[1] = AbortMessage;
220   Args[2] = ConstantInt::get(Type::Int32Ty, AbortMessageLength);
221   (new CallInst(WriteFn, Args, 3, "", IB))->setTailCall();
222 #endif
223 }
224
225 bool LowerInvoke::insertCheapEHSupport(Function &F) {
226   bool Changed = false;
227   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
228     if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
229       std::vector<Value*> CallArgs(II->op_begin(), II->op_end() - 3);
230       // Insert a normal call instruction...
231       CallInst *NewCall = CallInst::Create(II->getCalledValue(),
232                                            CallArgs.begin(), CallArgs.end(), "",II);
233       NewCall->takeName(II);
234       NewCall->setCallingConv(II->getCallingConv());
235       NewCall->setAttributes(II->getAttributes());
236       II->replaceAllUsesWith(NewCall);
237
238       // Insert an unconditional branch to the normal destination.
239       BranchInst::Create(II->getNormalDest(), II);
240
241       // Remove any PHI node entries from the exception destination.
242       II->getUnwindDest()->removePredecessor(BB);
243
244       // Remove the invoke instruction now.
245       BB->getInstList().erase(II);
246
247       ++NumInvokes; Changed = true;
248     } else if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
249       // Insert a new call to write(2, AbortMessage, AbortMessageLength);
250       writeAbortMessage(UI);
251
252       // Insert a call to abort()
253       CallInst::Create(AbortFn, "", UI)->setTailCall();
254
255       // Insert a return instruction.  This really should be a "barrier", as it
256       // is unreachable.
257       ReturnInst::Create(F.getContext(),
258                          F.getReturnType()->isVoidTy() ?
259                           0 : Constant::getNullValue(F.getReturnType()), UI);
260
261       // Remove the unwind instruction now.
262       BB->getInstList().erase(UI);
263
264       ++NumUnwinds; Changed = true;
265     }
266   return Changed;
267 }
268
269 /// rewriteExpensiveInvoke - Insert code and hack the function to replace the
270 /// specified invoke instruction with a call.
271 void LowerInvoke::rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
272                                          AllocaInst *InvokeNum,
273                                          SwitchInst *CatchSwitch) {
274   ConstantInt *InvokeNoC = ConstantInt::get(Type::getInt32Ty(II->getContext()),
275                                             InvokeNo);
276
277   // If the unwind edge has phi nodes, split the edge.
278   if (isa<PHINode>(II->getUnwindDest()->begin())) {
279     SplitCriticalEdge(II, 1, this);
280
281     // If there are any phi nodes left, they must have a single predecessor.
282     while (PHINode *PN = dyn_cast<PHINode>(II->getUnwindDest()->begin())) {
283       PN->replaceAllUsesWith(PN->getIncomingValue(0));
284       PN->eraseFromParent();
285     }
286   }
287
288   // Insert a store of the invoke num before the invoke and store zero into the
289   // location afterward.
290   new StoreInst(InvokeNoC, InvokeNum, true, II);  // volatile
291
292   BasicBlock::iterator NI = II->getNormalDest()->getFirstNonPHI();
293   // nonvolatile.
294   new StoreInst(Constant::getNullValue(Type::getInt32Ty(II->getContext())), 
295                 InvokeNum, false, NI);
296
297   // Add a switch case to our unwind block.
298   CatchSwitch->addCase(InvokeNoC, II->getUnwindDest());
299
300   // Insert a normal call instruction.
301   std::vector<Value*> CallArgs(II->op_begin(), II->op_end() - 3);
302   CallInst *NewCall = CallInst::Create(II->getCalledValue(),
303                                        CallArgs.begin(), CallArgs.end(), "",
304                                        II);
305   NewCall->takeName(II);
306   NewCall->setCallingConv(II->getCallingConv());
307   NewCall->setAttributes(II->getAttributes());
308   II->replaceAllUsesWith(NewCall);
309
310   // Replace the invoke with an uncond branch.
311   BranchInst::Create(II->getNormalDest(), NewCall->getParent());
312   II->eraseFromParent();
313 }
314
315 /// MarkBlocksLiveIn - Insert BB and all of its predescessors into LiveBBs until
316 /// we reach blocks we've already seen.
317 static void MarkBlocksLiveIn(BasicBlock *BB, std::set<BasicBlock*> &LiveBBs) {
318   if (!LiveBBs.insert(BB).second) return; // already been here.
319
320   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
321     MarkBlocksLiveIn(*PI, LiveBBs);
322 }
323
324 // First thing we need to do is scan the whole function for values that are
325 // live across unwind edges.  Each value that is live across an unwind edge
326 // we spill into a stack location, guaranteeing that there is nothing live
327 // across the unwind edge.  This process also splits all critical edges
328 // coming out of invoke's.
329 void LowerInvoke::
330 splitLiveRangesLiveAcrossInvokes(std::vector<InvokeInst*> &Invokes) {
331   // First step, split all critical edges from invoke instructions.
332   for (unsigned i = 0, e = Invokes.size(); i != e; ++i) {
333     InvokeInst *II = Invokes[i];
334     SplitCriticalEdge(II, 0, this);
335     SplitCriticalEdge(II, 1, this);
336     assert(!isa<PHINode>(II->getNormalDest()) &&
337            !isa<PHINode>(II->getUnwindDest()) &&
338            "critical edge splitting left single entry phi nodes?");
339   }
340
341   Function *F = Invokes.back()->getParent()->getParent();
342
343   // To avoid having to handle incoming arguments specially, we lower each arg
344   // to a copy instruction in the entry block.  This ensures that the argument
345   // value itself cannot be live across the entry block.
346   BasicBlock::iterator AfterAllocaInsertPt = F->begin()->begin();
347   while (isa<AllocaInst>(AfterAllocaInsertPt) &&
348         isa<ConstantInt>(cast<AllocaInst>(AfterAllocaInsertPt)->getArraySize()))
349     ++AfterAllocaInsertPt;
350   for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
351        AI != E; ++AI) {
352     // This is always a no-op cast because we're casting AI to AI->getType() so
353     // src and destination types are identical. BitCast is the only possibility.
354     CastInst *NC = new BitCastInst(
355       AI, AI->getType(), AI->getName()+".tmp", AfterAllocaInsertPt);
356     AI->replaceAllUsesWith(NC);
357     // Normally its is forbidden to replace a CastInst's operand because it
358     // could cause the opcode to reflect an illegal conversion. However, we're
359     // replacing it here with the same value it was constructed with to simply
360     // make NC its user.
361     NC->setOperand(0, AI);
362   }
363
364   // Finally, scan the code looking for instructions with bad live ranges.
365   for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
366     for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) {
367       // Ignore obvious cases we don't have to handle.  In particular, most
368       // instructions either have no uses or only have a single use inside the
369       // current block.  Ignore them quickly.
370       Instruction *Inst = II;
371       if (Inst->use_empty()) continue;
372       if (Inst->hasOneUse() &&
373           cast<Instruction>(Inst->use_back())->getParent() == BB &&
374           !isa<PHINode>(Inst->use_back())) continue;
375
376       // If this is an alloca in the entry block, it's not a real register
377       // value.
378       if (AllocaInst *AI = dyn_cast<AllocaInst>(Inst))
379         if (isa<ConstantInt>(AI->getArraySize()) && BB == F->begin())
380           continue;
381
382       // Avoid iterator invalidation by copying users to a temporary vector.
383       std::vector<Instruction*> Users;
384       for (Value::use_iterator UI = Inst->use_begin(), E = Inst->use_end();
385            UI != E; ++UI) {
386         Instruction *User = cast<Instruction>(*UI);
387         if (User->getParent() != BB || isa<PHINode>(User))
388           Users.push_back(User);
389       }
390
391       // Scan all of the uses and see if the live range is live across an unwind
392       // edge.  If we find a use live across an invoke edge, create an alloca
393       // and spill the value.
394       std::set<InvokeInst*> InvokesWithStoreInserted;
395
396       // Find all of the blocks that this value is live in.
397       std::set<BasicBlock*> LiveBBs;
398       LiveBBs.insert(Inst->getParent());
399       while (!Users.empty()) {
400         Instruction *U = Users.back();
401         Users.pop_back();
402
403         if (!isa<PHINode>(U)) {
404           MarkBlocksLiveIn(U->getParent(), LiveBBs);
405         } else {
406           // Uses for a PHI node occur in their predecessor block.
407           PHINode *PN = cast<PHINode>(U);
408           for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
409             if (PN->getIncomingValue(i) == Inst)
410               MarkBlocksLiveIn(PN->getIncomingBlock(i), LiveBBs);
411         }
412       }
413
414       // Now that we know all of the blocks that this thing is live in, see if
415       // it includes any of the unwind locations.
416       bool NeedsSpill = false;
417       for (unsigned i = 0, e = Invokes.size(); i != e; ++i) {
418         BasicBlock *UnwindBlock = Invokes[i]->getUnwindDest();
419         if (UnwindBlock != BB && LiveBBs.count(UnwindBlock)) {
420           NeedsSpill = true;
421         }
422       }
423
424       // If we decided we need a spill, do it.
425       if (NeedsSpill) {
426         ++NumSpilled;
427         DemoteRegToStack(*Inst, true);
428       }
429     }
430 }
431
432 bool LowerInvoke::insertExpensiveEHSupport(Function &F) {
433   std::vector<ReturnInst*> Returns;
434   std::vector<UnwindInst*> Unwinds;
435   std::vector<InvokeInst*> Invokes;
436
437   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
438     if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
439       // Remember all return instructions in case we insert an invoke into this
440       // function.
441       Returns.push_back(RI);
442     } else if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
443       Invokes.push_back(II);
444     } else if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) {
445       Unwinds.push_back(UI);
446     }
447
448   if (Unwinds.empty() && Invokes.empty()) return false;
449
450   NumInvokes += Invokes.size();
451   NumUnwinds += Unwinds.size();
452
453   // TODO: This is not an optimal way to do this.  In particular, this always
454   // inserts setjmp calls into the entries of functions with invoke instructions
455   // even though there are possibly paths through the function that do not
456   // execute any invokes.  In particular, for functions with early exits, e.g.
457   // the 'addMove' method in hexxagon, it would be nice to not have to do the
458   // setjmp stuff on the early exit path.  This requires a bit of dataflow, but
459   // would not be too hard to do.
460
461   // If we have an invoke instruction, insert a setjmp that dominates all
462   // invokes.  After the setjmp, use a cond branch that goes to the original
463   // code path on zero, and to a designated 'catch' block of nonzero.
464   Value *OldJmpBufPtr = 0;
465   if (!Invokes.empty()) {
466     // First thing we need to do is scan the whole function for values that are
467     // live across unwind edges.  Each value that is live across an unwind edge
468     // we spill into a stack location, guaranteeing that there is nothing live
469     // across the unwind edge.  This process also splits all critical edges
470     // coming out of invoke's.
471     splitLiveRangesLiveAcrossInvokes(Invokes);
472
473     BasicBlock *EntryBB = F.begin();
474
475     // Create an alloca for the incoming jump buffer ptr and the new jump buffer
476     // that needs to be restored on all exits from the function.  This is an
477     // alloca because the value needs to be live across invokes.
478     unsigned Align = TLI ? TLI->getJumpBufAlignment() : 0;
479     AllocaInst *JmpBuf =
480       new AllocaInst(JBLinkTy, 0, Align,
481                      "jblink", F.begin()->begin());
482
483     std::vector<Value*> Idx;
484     Idx.push_back(Constant::getNullValue(Type::getInt32Ty(F.getContext())));
485     Idx.push_back(ConstantInt::get(Type::getInt32Ty(F.getContext()), 1));
486     OldJmpBufPtr = GetElementPtrInst::Create(JmpBuf, Idx.begin(), Idx.end(),
487                                              "OldBuf",
488                                               EntryBB->getTerminator());
489
490     // Copy the JBListHead to the alloca.
491     Value *OldBuf = new LoadInst(JBListHead, "oldjmpbufptr", true,
492                                  EntryBB->getTerminator());
493     new StoreInst(OldBuf, OldJmpBufPtr, true, EntryBB->getTerminator());
494
495     // Add the new jumpbuf to the list.
496     new StoreInst(JmpBuf, JBListHead, true, EntryBB->getTerminator());
497
498     // Create the catch block.  The catch block is basically a big switch
499     // statement that goes to all of the invoke catch blocks.
500     BasicBlock *CatchBB =
501             BasicBlock::Create(F.getContext(), "setjmp.catch", &F);
502
503     // Create an alloca which keeps track of which invoke is currently
504     // executing.  For normal calls it contains zero.
505     AllocaInst *InvokeNum = new AllocaInst(Type::getInt32Ty(F.getContext()), 0,
506                                            "invokenum",EntryBB->begin());
507     new StoreInst(ConstantInt::get(Type::getInt32Ty(F.getContext()), 0), 
508                   InvokeNum, true, EntryBB->getTerminator());
509
510     // Insert a load in the Catch block, and a switch on its value.  By default,
511     // we go to a block that just does an unwind (which is the correct action
512     // for a standard call).
513     BasicBlock *UnwindBB = BasicBlock::Create(F.getContext(), "unwindbb", &F);
514     Unwinds.push_back(new UnwindInst(F.getContext(), UnwindBB));
515
516     Value *CatchLoad = new LoadInst(InvokeNum, "invoke.num", true, CatchBB);
517     SwitchInst *CatchSwitch =
518       SwitchInst::Create(CatchLoad, UnwindBB, Invokes.size(), CatchBB);
519
520     // Now that things are set up, insert the setjmp call itself.
521
522     // Split the entry block to insert the conditional branch for the setjmp.
523     BasicBlock *ContBlock = EntryBB->splitBasicBlock(EntryBB->getTerminator(),
524                                                      "setjmp.cont");
525
526     Idx[1] = ConstantInt::get(Type::getInt32Ty(F.getContext()), 0);
527     Value *JmpBufPtr = GetElementPtrInst::Create(JmpBuf, Idx.begin(), Idx.end(),
528                                                  "TheJmpBuf",
529                                                  EntryBB->getTerminator());
530     JmpBufPtr = new BitCastInst(JmpBufPtr,
531                         Type::getInt8PtrTy(F.getContext()),
532                                 "tmp", EntryBB->getTerminator());
533     Value *SJRet = CallInst::Create(SetJmpFn, JmpBufPtr, "sjret",
534                                     EntryBB->getTerminator());
535
536     // Compare the return value to zero.
537     Value *IsNormal = new ICmpInst(EntryBB->getTerminator(),
538                                    ICmpInst::ICMP_EQ, SJRet,
539                                    Constant::getNullValue(SJRet->getType()),
540                                    "notunwind");
541     // Nuke the uncond branch.
542     EntryBB->getTerminator()->eraseFromParent();
543
544     // Put in a new condbranch in its place.
545     BranchInst::Create(ContBlock, CatchBB, IsNormal, EntryBB);
546
547     // At this point, we are all set up, rewrite each invoke instruction.
548     for (unsigned i = 0, e = Invokes.size(); i != e; ++i)
549       rewriteExpensiveInvoke(Invokes[i], i+1, InvokeNum, CatchSwitch);
550   }
551
552   // We know that there is at least one unwind.
553
554   // Create three new blocks, the block to load the jmpbuf ptr and compare
555   // against null, the block to do the longjmp, and the error block for if it
556   // is null.  Add them at the end of the function because they are not hot.
557   BasicBlock *UnwindHandler = BasicBlock::Create(F.getContext(),
558                                                 "dounwind", &F);
559   BasicBlock *UnwindBlock = BasicBlock::Create(F.getContext(), "unwind", &F);
560   BasicBlock *TermBlock = BasicBlock::Create(F.getContext(), "unwinderror", &F);
561
562   // If this function contains an invoke, restore the old jumpbuf ptr.
563   Value *BufPtr;
564   if (OldJmpBufPtr) {
565     // Before the return, insert a copy from the saved value to the new value.
566     BufPtr = new LoadInst(OldJmpBufPtr, "oldjmpbufptr", UnwindHandler);
567     new StoreInst(BufPtr, JBListHead, UnwindHandler);
568   } else {
569     BufPtr = new LoadInst(JBListHead, "ehlist", UnwindHandler);
570   }
571
572   // Load the JBList, if it's null, then there was no catch!
573   Value *NotNull = new ICmpInst(*UnwindHandler, ICmpInst::ICMP_NE, BufPtr,
574                                 Constant::getNullValue(BufPtr->getType()),
575                                 "notnull");
576   BranchInst::Create(UnwindBlock, TermBlock, NotNull, UnwindHandler);
577
578   // Create the block to do the longjmp.
579   // Get a pointer to the jmpbuf and longjmp.
580   std::vector<Value*> Idx;
581   Idx.push_back(Constant::getNullValue(Type::getInt32Ty(F.getContext())));
582   Idx.push_back(ConstantInt::get(Type::getInt32Ty(F.getContext()), 0));
583   Idx[0] = GetElementPtrInst::Create(BufPtr, Idx.begin(), Idx.end(), "JmpBuf",
584                                      UnwindBlock);
585   Idx[0] = new BitCastInst(Idx[0],
586              Type::getInt8PtrTy(F.getContext()),
587                            "tmp", UnwindBlock);
588   Idx[1] = ConstantInt::get(Type::getInt32Ty(F.getContext()), 1);
589   CallInst::Create(LongJmpFn, Idx.begin(), Idx.end(), "", UnwindBlock);
590   new UnreachableInst(F.getContext(), UnwindBlock);
591
592   // Set up the term block ("throw without a catch").
593   new UnreachableInst(F.getContext(), TermBlock);
594
595   // Insert a new call to write(2, AbortMessage, AbortMessageLength);
596   writeAbortMessage(TermBlock->getTerminator());
597
598   // Insert a call to abort()
599   CallInst::Create(AbortFn, "",
600                    TermBlock->getTerminator())->setTailCall();
601
602
603   // Replace all unwinds with a branch to the unwind handler.
604   for (unsigned i = 0, e = Unwinds.size(); i != e; ++i) {
605     BranchInst::Create(UnwindHandler, Unwinds[i]);
606     Unwinds[i]->eraseFromParent();
607   }
608
609   // Finally, for any returns from this function, if this function contains an
610   // invoke, restore the old jmpbuf pointer to its input value.
611   if (OldJmpBufPtr) {
612     for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
613       ReturnInst *R = Returns[i];
614
615       // Before the return, insert a copy from the saved value to the new value.
616       Value *OldBuf = new LoadInst(OldJmpBufPtr, "oldjmpbufptr", true, R);
617       new StoreInst(OldBuf, JBListHead, true, R);
618     }
619   }
620
621   return true;
622 }
623
624 bool LowerInvoke::runOnFunction(Function &F) {
625   if (ExpensiveEHSupport)
626     return insertExpensiveEHSupport(F);
627   else
628     return insertCheapEHSupport(F);
629 }