LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LowerInvoke.cpp
Go to the documentation of this file.
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/ADT/SmallVector.h"
40 #include "llvm/ADT/Statistic.h"
41 #include "llvm/IR/Constants.h"
42 #include "llvm/IR/DerivedTypes.h"
43 #include "llvm/IR/Instructions.h"
44 #include "llvm/IR/Intrinsics.h"
45 #include "llvm/IR/LLVMContext.h"
46 #include "llvm/IR/Module.h"
47 #include "llvm/Pass.h"
52 #include <csetjmp>
53 #include <set>
54 using namespace llvm;
55 
56 STATISTIC(NumInvokes, "Number of invokes 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  const TargetMachine *TM;
65 
66  // Used for both models.
67  Constant *AbortFn;
68 
69  // Used for expensive EH support.
70  StructType *JBLinkTy;
71  GlobalVariable *JBListHead;
72  Constant *SetJmpFn, *LongJmpFn, *StackSaveFn, *StackRestoreFn;
73  bool useExpensiveEHSupport;
74 
75  public:
76  static char ID; // Pass identification, replacement for typeid
77  explicit LowerInvoke(const TargetMachine *TM = 0,
78  bool useExpensiveEHSupport = ExpensiveEHSupport)
79  : FunctionPass(ID), TM(TM),
80  useExpensiveEHSupport(useExpensiveEHSupport) {
82  }
83  bool doInitialization(Module &M);
84  bool runOnFunction(Function &F);
85 
86  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
87  // This is a cluster of orthogonal Transforms
88  AU.addPreserved("mem2reg");
90  }
91 
92  private:
93  bool insertCheapEHSupport(Function &F);
94  void splitLiveRangesLiveAcrossInvokes(SmallVectorImpl<InvokeInst*>&Invokes);
95  void rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
96  AllocaInst *InvokeNum, AllocaInst *StackPtr,
97  SwitchInst *CatchSwitch);
98  bool insertExpensiveEHSupport(Function &F);
99  };
100 }
101 
102 char LowerInvoke::ID = 0;
103 INITIALIZE_PASS(LowerInvoke, "lowerinvoke",
104  "Lower invoke and unwind, for unwindless code generators",
105  false, false)
106 
107 char &llvm::LowerInvokePassID = LowerInvoke::ID;
108 
109 // Public Interface To the LowerInvoke pass.
111  bool useExpensiveEHSupport) {
112  return new LowerInvoke(TM, useExpensiveEHSupport || ExpensiveEHSupport);
113 }
114 
115 // doInitialization - Make sure that there is a prototype for abort in the
116 // current module.
117 bool LowerInvoke::doInitialization(Module &M) {
118  Type *VoidPtrTy = Type::getInt8PtrTy(M.getContext());
119  if (useExpensiveEHSupport) {
120  // Insert a type for the linked list of jump buffers.
121  const TargetLowering *TLI = TM ? TM->getTargetLowering() : 0;
122  unsigned JBSize = TLI ? TLI->getJumpBufSize() : 0;
123  JBSize = JBSize ? JBSize : 200;
124  Type *JmpBufTy = ArrayType::get(VoidPtrTy, JBSize);
125 
126  JBLinkTy = StructType::create(M.getContext(), "llvm.sjljeh.jmpbufty");
127  Type *Elts[] = { JmpBufTy, PointerType::getUnqual(JBLinkTy) };
128  JBLinkTy->setBody(Elts);
129 
130  Type *PtrJBList = PointerType::getUnqual(JBLinkTy);
131 
132  // Now that we've done that, insert the jmpbuf list head global, unless it
133  // already exists.
134  if (!(JBListHead = M.getGlobalVariable("llvm.sjljeh.jblist", PtrJBList))) {
135  JBListHead = new GlobalVariable(M, PtrJBList, false,
137  Constant::getNullValue(PtrJBList),
138  "llvm.sjljeh.jblist");
139  }
140 
141 // VisualStudio defines setjmp as _setjmp
142 #if defined(_MSC_VER) && defined(setjmp) && \
143  !defined(setjmp_undefined_for_msvc)
144 # pragma push_macro("setjmp")
145 # undef setjmp
146 # define setjmp_undefined_for_msvc
147 #endif
148 
150 
151 #if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
152  // let's return it to _setjmp state
153 # pragma pop_macro("setjmp")
154 # undef setjmp_undefined_for_msvc
155 #endif
156 
160  }
161 
162  // We need the 'write' and 'abort' functions for both models.
163  AbortFn = M.getOrInsertFunction("abort", Type::getVoidTy(M.getContext()),
164  (Type *)0);
165  return true;
166 }
167 
168 bool LowerInvoke::insertCheapEHSupport(Function &F) {
169  bool Changed = false;
170  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
171  if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
172  SmallVector<Value*,16> CallArgs(II->op_begin(), II->op_end() - 3);
173  // Insert a normal call instruction...
174  CallInst *NewCall = CallInst::Create(II->getCalledValue(),
175  CallArgs, "", II);
176  NewCall->takeName(II);
177  NewCall->setCallingConv(II->getCallingConv());
178  NewCall->setAttributes(II->getAttributes());
179  NewCall->setDebugLoc(II->getDebugLoc());
180  II->replaceAllUsesWith(NewCall);
181 
182  // Insert an unconditional branch to the normal destination.
183  BranchInst::Create(II->getNormalDest(), II);
184 
185  // Remove any PHI node entries from the exception destination.
186  II->getUnwindDest()->removePredecessor(BB);
187 
188  // Remove the invoke instruction now.
189  BB->getInstList().erase(II);
190 
191  ++NumInvokes; Changed = true;
192  }
193  return Changed;
194 }
195 
196 /// rewriteExpensiveInvoke - Insert code and hack the function to replace the
197 /// specified invoke instruction with a call.
198 void LowerInvoke::rewriteExpensiveInvoke(InvokeInst *II, unsigned InvokeNo,
199  AllocaInst *InvokeNum,
200  AllocaInst *StackPtr,
201  SwitchInst *CatchSwitch) {
203  InvokeNo);
204 
205  // If the unwind edge has phi nodes, split the edge.
206  if (isa<PHINode>(II->getUnwindDest()->begin())) {
207  SplitCriticalEdge(II, 1, this);
208 
209  // If there are any phi nodes left, they must have a single predecessor.
210  while (PHINode *PN = dyn_cast<PHINode>(II->getUnwindDest()->begin())) {
211  PN->replaceAllUsesWith(PN->getIncomingValue(0));
212  PN->eraseFromParent();
213  }
214  }
215 
216  // Insert a store of the invoke num before the invoke and store zero into the
217  // location afterward.
218  new StoreInst(InvokeNoC, InvokeNum, true, II); // volatile
219 
220  // Insert a store of the stack ptr before the invoke, so we can restore it
221  // later in the exception case.
222  CallInst* StackSaveRet = CallInst::Create(StackSaveFn, "ssret", II);
223  new StoreInst(StackSaveRet, StackPtr, true, II); // volatile
224 
226  // nonvolatile.
228  InvokeNum, false, NI);
229 
230  Instruction* StackPtrLoad =
231  new LoadInst(StackPtr, "stackptr.restore", true,
233  CallInst::Create(StackRestoreFn, StackPtrLoad, "")->insertAfter(StackPtrLoad);
234 
235  // Add a switch case to our unwind block.
236  CatchSwitch->addCase(InvokeNoC, II->getUnwindDest());
237 
238  // Insert a normal call instruction.
239  SmallVector<Value*,16> CallArgs(II->op_begin(), II->op_end() - 3);
240  CallInst *NewCall = CallInst::Create(II->getCalledValue(),
241  CallArgs, "", II);
242  NewCall->takeName(II);
243  NewCall->setCallingConv(II->getCallingConv());
244  NewCall->setAttributes(II->getAttributes());
245  NewCall->setDebugLoc(II->getDebugLoc());
246  II->replaceAllUsesWith(NewCall);
247 
248  // Replace the invoke with an uncond branch.
249  BranchInst::Create(II->getNormalDest(), NewCall->getParent());
250  II->eraseFromParent();
251 }
252 
253 /// MarkBlocksLiveIn - Insert BB and all of its predescessors into LiveBBs until
254 /// we reach blocks we've already seen.
255 static void MarkBlocksLiveIn(BasicBlock *BB, std::set<BasicBlock*> &LiveBBs) {
256  if (!LiveBBs.insert(BB).second) return; // already been here.
257 
258  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
259  MarkBlocksLiveIn(*PI, LiveBBs);
260 }
261 
262 // First thing we need to do is scan the whole function for values that are
263 // live across unwind edges. Each value that is live across an unwind edge
264 // we spill into a stack location, guaranteeing that there is nothing live
265 // across the unwind edge. This process also splits all critical edges
266 // coming out of invoke's.
267 void LowerInvoke::
268 splitLiveRangesLiveAcrossInvokes(SmallVectorImpl<InvokeInst*> &Invokes) {
269  // First step, split all critical edges from invoke instructions.
270  for (unsigned i = 0, e = Invokes.size(); i != e; ++i) {
271  InvokeInst *II = Invokes[i];
272  SplitCriticalEdge(II, 0, this);
273  SplitCriticalEdge(II, 1, this);
274  assert(!isa<PHINode>(II->getNormalDest()) &&
275  !isa<PHINode>(II->getUnwindDest()) &&
276  "critical edge splitting left single entry phi nodes?");
277  }
278 
279  Function *F = Invokes.back()->getParent()->getParent();
280 
281  // To avoid having to handle incoming arguments specially, we lower each arg
282  // to a copy instruction in the entry block. This ensures that the argument
283  // value itself cannot be live across the entry block.
284  BasicBlock::iterator AfterAllocaInsertPt = F->begin()->begin();
285  while (isa<AllocaInst>(AfterAllocaInsertPt) &&
286  isa<ConstantInt>(cast<AllocaInst>(AfterAllocaInsertPt)->getArraySize()))
287  ++AfterAllocaInsertPt;
288  for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();
289  AI != E; ++AI) {
290  Type *Ty = AI->getType();
291  // Aggregate types can't be cast, but are legal argument types, so we have
292  // to handle them differently. We use an extract/insert pair as a
293  // lightweight method to achieve the same goal.
294  if (isa<StructType>(Ty) || isa<ArrayType>(Ty) || isa<VectorType>(Ty)) {
295  Instruction *EI = ExtractValueInst::Create(AI, 0, "",AfterAllocaInsertPt);
296  Instruction *NI = InsertValueInst::Create(AI, EI, 0);
297  NI->insertAfter(EI);
298  AI->replaceAllUsesWith(NI);
299  // Set the operand of the instructions back to the AllocaInst.
300  EI->setOperand(0, AI);
301  NI->setOperand(0, AI);
302  } else {
303  // This is always a no-op cast because we're casting AI to AI->getType()
304  // so src and destination types are identical. BitCast is the only
305  // possibility.
306  CastInst *NC = new BitCastInst(
307  AI, AI->getType(), AI->getName()+".tmp", AfterAllocaInsertPt);
308  AI->replaceAllUsesWith(NC);
309  // Set the operand of the cast instruction back to the AllocaInst.
310  // Normally it's forbidden to replace a CastInst's operand because it
311  // could cause the opcode to reflect an illegal conversion. However,
312  // we're replacing it here with the same value it was constructed with.
313  // We do this because the above replaceAllUsesWith() clobbered the
314  // operand, but we want this one to remain.
315  NC->setOperand(0, AI);
316  }
317  }
318 
319  // Finally, scan the code looking for instructions with bad live ranges.
320  for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
321  for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) {
322  // Ignore obvious cases we don't have to handle. In particular, most
323  // instructions either have no uses or only have a single use inside the
324  // current block. Ignore them quickly.
325  Instruction *Inst = II;
326  if (Inst->use_empty()) continue;
327  if (Inst->hasOneUse() &&
328  cast<Instruction>(Inst->use_back())->getParent() == BB &&
329  !isa<PHINode>(Inst->use_back())) continue;
330 
331  // If this is an alloca in the entry block, it's not a real register
332  // value.
333  if (AllocaInst *AI = dyn_cast<AllocaInst>(Inst))
334  if (isa<ConstantInt>(AI->getArraySize()) && BB == F->begin())
335  continue;
336 
337  // Avoid iterator invalidation by copying users to a temporary vector.
339  for (Value::use_iterator UI = Inst->use_begin(), E = Inst->use_end();
340  UI != E; ++UI) {
341  Instruction *User = cast<Instruction>(*UI);
342  if (User->getParent() != BB || isa<PHINode>(User))
343  Users.push_back(User);
344  }
345 
346  // Scan all of the uses and see if the live range is live across an unwind
347  // edge. If we find a use live across an invoke edge, create an alloca
348  // and spill the value.
349 
350  // Find all of the blocks that this value is live in.
351  std::set<BasicBlock*> LiveBBs;
352  LiveBBs.insert(Inst->getParent());
353  while (!Users.empty()) {
354  Instruction *U = Users.back();
355  Users.pop_back();
356 
357  if (!isa<PHINode>(U)) {
358  MarkBlocksLiveIn(U->getParent(), LiveBBs);
359  } else {
360  // Uses for a PHI node occur in their predecessor block.
361  PHINode *PN = cast<PHINode>(U);
362  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
363  if (PN->getIncomingValue(i) == Inst)
364  MarkBlocksLiveIn(PN->getIncomingBlock(i), LiveBBs);
365  }
366  }
367 
368  // Now that we know all of the blocks that this thing is live in, see if
369  // it includes any of the unwind locations.
370  bool NeedsSpill = false;
371  for (unsigned i = 0, e = Invokes.size(); i != e; ++i) {
372  BasicBlock *UnwindBlock = Invokes[i]->getUnwindDest();
373  if (UnwindBlock != BB && LiveBBs.count(UnwindBlock)) {
374  NeedsSpill = true;
375  }
376  }
377 
378  // If we decided we need a spill, do it.
379  if (NeedsSpill) {
380  ++NumSpilled;
381  DemoteRegToStack(*Inst, true);
382  }
383  }
384 }
385 
386 bool LowerInvoke::insertExpensiveEHSupport(Function &F) {
389  UnreachableInst* UnreachablePlaceholder = 0;
390 
391  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
392  if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
393  // Remember all return instructions in case we insert an invoke into this
394  // function.
395  Returns.push_back(RI);
396  } else if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
397  Invokes.push_back(II);
398  }
399 
400  if (Invokes.empty()) return false;
401 
402  NumInvokes += Invokes.size();
403 
404  // TODO: This is not an optimal way to do this. In particular, this always
405  // inserts setjmp calls into the entries of functions with invoke instructions
406  // even though there are possibly paths through the function that do not
407  // execute any invokes. In particular, for functions with early exits, e.g.
408  // the 'addMove' method in hexxagon, it would be nice to not have to do the
409  // setjmp stuff on the early exit path. This requires a bit of dataflow, but
410  // would not be too hard to do.
411 
412  // If we have an invoke instruction, insert a setjmp that dominates all
413  // invokes. After the setjmp, use a cond branch that goes to the original
414  // code path on zero, and to a designated 'catch' block of nonzero.
415  Value *OldJmpBufPtr = 0;
416  if (!Invokes.empty()) {
417  // First thing we need to do is scan the whole function for values that are
418  // live across unwind edges. Each value that is live across an unwind edge
419  // we spill into a stack location, guaranteeing that there is nothing live
420  // across the unwind edge. This process also splits all critical edges
421  // coming out of invoke's.
422  splitLiveRangesLiveAcrossInvokes(Invokes);
423 
424  BasicBlock *EntryBB = F.begin();
425 
426  // Create an alloca for the incoming jump buffer ptr and the new jump buffer
427  // that needs to be restored on all exits from the function. This is an
428  // alloca because the value needs to be live across invokes.
429  const TargetLowering *TLI = TM ? TM->getTargetLowering() : 0;
430  unsigned Align = TLI ? TLI->getJumpBufAlignment() : 0;
431  AllocaInst *JmpBuf =
432  new AllocaInst(JBLinkTy, 0, Align,
433  "jblink", F.begin()->begin());
434 
437  OldJmpBufPtr = GetElementPtrInst::Create(JmpBuf, Idx, "OldBuf",
438  EntryBB->getTerminator());
439 
440  // Copy the JBListHead to the alloca.
441  Value *OldBuf = new LoadInst(JBListHead, "oldjmpbufptr", true,
442  EntryBB->getTerminator());
443  new StoreInst(OldBuf, OldJmpBufPtr, true, EntryBB->getTerminator());
444 
445  // Add the new jumpbuf to the list.
446  new StoreInst(JmpBuf, JBListHead, true, EntryBB->getTerminator());
447 
448  // Create the catch block. The catch block is basically a big switch
449  // statement that goes to all of the invoke catch blocks.
450  BasicBlock *CatchBB =
451  BasicBlock::Create(F.getContext(), "setjmp.catch", &F);
452 
453  // Create an alloca which keeps track of the stack pointer before every
454  // invoke, this allows us to properly restore the stack pointer after
455  // long jumping.
456  AllocaInst *StackPtr = new AllocaInst(Type::getInt8PtrTy(F.getContext()), 0,
457  "stackptr", EntryBB->begin());
458 
459  // Create an alloca which keeps track of which invoke is currently
460  // executing. For normal calls it contains zero.
461  AllocaInst *InvokeNum = new AllocaInst(Type::getInt32Ty(F.getContext()), 0,
462  "invokenum",EntryBB->begin());
464  InvokeNum, true, EntryBB->getTerminator());
465 
466  // Insert a load in the Catch block, and a switch on its value. By default,
467  // we go to a block that just does an unwind (which is the correct action
468  // for a standard call). We insert an unreachable instruction here and
469  // modify the block to jump to the correct unwinding pad later.
470  BasicBlock *UnwindBB = BasicBlock::Create(F.getContext(), "unwindbb", &F);
471  UnreachablePlaceholder = new UnreachableInst(F.getContext(), UnwindBB);
472 
473  Value *CatchLoad = new LoadInst(InvokeNum, "invoke.num", true, CatchBB);
474  SwitchInst *CatchSwitch =
475  SwitchInst::Create(CatchLoad, UnwindBB, Invokes.size(), CatchBB);
476 
477  // Now that things are set up, insert the setjmp call itself.
478 
479  // Split the entry block to insert the conditional branch for the setjmp.
480  BasicBlock *ContBlock = EntryBB->splitBasicBlock(EntryBB->getTerminator(),
481  "setjmp.cont");
482 
483  Idx[1] = ConstantInt::get(Type::getInt32Ty(F.getContext()), 0);
484  Value *JmpBufPtr = GetElementPtrInst::Create(JmpBuf, Idx, "TheJmpBuf",
485  EntryBB->getTerminator());
486  JmpBufPtr = new BitCastInst(JmpBufPtr,
488  "tmp", EntryBB->getTerminator());
489  Value *SJRet = CallInst::Create(SetJmpFn, JmpBufPtr, "sjret",
490  EntryBB->getTerminator());
491 
492  // Compare the return value to zero.
493  Value *IsNormal = new ICmpInst(EntryBB->getTerminator(),
494  ICmpInst::ICMP_EQ, SJRet,
495  Constant::getNullValue(SJRet->getType()),
496  "notunwind");
497  // Nuke the uncond branch.
498  EntryBB->getTerminator()->eraseFromParent();
499 
500  // Put in a new condbranch in its place.
501  BranchInst::Create(ContBlock, CatchBB, IsNormal, EntryBB);
502 
503  // At this point, we are all set up, rewrite each invoke instruction.
504  for (unsigned i = 0, e = Invokes.size(); i != e; ++i)
505  rewriteExpensiveInvoke(Invokes[i], i+1, InvokeNum, StackPtr, CatchSwitch);
506  }
507 
508  // We know that there is at least one unwind.
509 
510  // Create three new blocks, the block to load the jmpbuf ptr and compare
511  // against null, the block to do the longjmp, and the error block for if it
512  // is null. Add them at the end of the function because they are not hot.
513  BasicBlock *UnwindHandler = BasicBlock::Create(F.getContext(),
514  "dounwind", &F);
515  BasicBlock *UnwindBlock = BasicBlock::Create(F.getContext(), "unwind", &F);
516  BasicBlock *TermBlock = BasicBlock::Create(F.getContext(), "unwinderror", &F);
517 
518  // If this function contains an invoke, restore the old jumpbuf ptr.
519  Value *BufPtr;
520  if (OldJmpBufPtr) {
521  // Before the return, insert a copy from the saved value to the new value.
522  BufPtr = new LoadInst(OldJmpBufPtr, "oldjmpbufptr", UnwindHandler);
523  new StoreInst(BufPtr, JBListHead, UnwindHandler);
524  } else {
525  BufPtr = new LoadInst(JBListHead, "ehlist", UnwindHandler);
526  }
527 
528  // Load the JBList, if it's null, then there was no catch!
529  Value *NotNull = new ICmpInst(*UnwindHandler, ICmpInst::ICMP_NE, BufPtr,
530  Constant::getNullValue(BufPtr->getType()),
531  "notnull");
532  BranchInst::Create(UnwindBlock, TermBlock, NotNull, UnwindHandler);
533 
534  // Create the block to do the longjmp.
535  // Get a pointer to the jmpbuf and longjmp.
538  Idx[0] = GetElementPtrInst::Create(BufPtr, Idx, "JmpBuf", UnwindBlock);
539  Idx[0] = new BitCastInst(Idx[0],
541  "tmp", UnwindBlock);
542  Idx[1] = ConstantInt::get(Type::getInt32Ty(F.getContext()), 1);
543  CallInst::Create(LongJmpFn, Idx, "", UnwindBlock);
544  new UnreachableInst(F.getContext(), UnwindBlock);
545 
546  // Set up the term block ("throw without a catch").
547  new UnreachableInst(F.getContext(), TermBlock);
548 
549  // Insert a call to abort()
550  CallInst::Create(AbortFn, "",
551  TermBlock->getTerminator())->setTailCall();
552 
553  // Replace the inserted unreachable with a branch to the unwind handler.
554  if (UnreachablePlaceholder) {
555  BranchInst::Create(UnwindHandler, UnreachablePlaceholder);
556  UnreachablePlaceholder->eraseFromParent();
557  }
558 
559  // Finally, for any returns from this function, if this function contains an
560  // invoke, restore the old jmpbuf pointer to its input value.
561  if (OldJmpBufPtr) {
562  for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
563  ReturnInst *R = Returns[i];
564 
565  // Before the return, insert a copy from the saved value to the new value.
566  Value *OldBuf = new LoadInst(OldJmpBufPtr, "oldjmpbufptr", true, R);
567  new StoreInst(OldBuf, JBListHead, true, R);
568  }
569  }
570 
571  return true;
572 }
573 
574 bool LowerInvoke::runOnFunction(Function &F) {
575  if (useExpensiveEHSupport)
576  return insertExpensiveEHSupport(F);
577  else
578  return insertCheapEHSupport(F);
579 }
use_iterator use_end()
Definition: Value.h:152
AnalysisUsage & addPreserved()
static PassRegistry * getPassRegistry()
LLVMContext & getContext() const
Definition: Function.cpp:167
The main container class for the LLVM Intermediate Representation.
Definition: Module.h:112
iterator end()
Definition: Function.h:397
BasicBlock * SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P=0, bool MergeIdenticalEdges=false, bool DontDeleteUselessPHIs=false, bool SplitLandingPads=false)
void addCase(ConstantInt *OnVal, BasicBlock *Dest)
static cl::opt< bool > ExpensiveEHSupport("enable-correct-eh-support", cl::desc("Make the -lowerinvoke pass insert expensive, but correct, EH code"))
AllocaInst * DemoteRegToStack(Instruction &X, bool VolatileLoads=false, Instruction *AllocaPoint=0)
const Function * getParent() const
Return the enclosing method, or null if none.
Definition: BasicBlock.h:116
arg_iterator arg_end()
Definition: Function.h:418
F(f)
char & LowerSwitchID
static ExtractValueInst * Create(Value *Agg, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=0)
iv Induction Variable Users
Definition: IVUsers.cpp:39
op_iterator op_begin()
Definition: User.h:116
const GlobalVariable * getGlobalVariable(StringRef Name, bool AllowInternal=false) const
Definition: Module.h:355
static Constant * getNullValue(Type *Ty)
Definition: Constants.cpp:111
iterator begin()
Definition: BasicBlock.h:193
static void MarkBlocksLiveIn(BasicBlock *BB, std::set< BasicBlock * > &LiveBBs)
Base class of casting instructions.
Definition: InstrTypes.h:387
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=0)
const Value * getCalledValue() const
unsigned getJumpBufSize() const
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
Definition: SmallVector.h:56
This class represents a no-op cast from one type to another.
AnalysisUsage & addPreservedID(const void *ID)
Function * getDeclaration(Module *M, ID id, ArrayRef< Type * > Tys=None)
Definition: Function.cpp:683
void replaceAllUsesWith(Value *V)
Definition: Value.cpp:303
iterator begin()
Definition: Function.h:395
BasicBlock * getNormalDest() const
unsigned getNumIncomingValues() const
Constant * getOrInsertFunction(StringRef Name, FunctionType *T, AttributeSet AttributeList)
Definition: Module.cpp:138
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
LLVM Constant Representation.
Definition: Constant.h:41
Interval::pred_iterator pred_begin(Interval *I)
Definition: Interval.h:117
const DebugLoc & getDebugLoc() const
getDebugLoc - Return the debug location for this node as a DebugLoc.
Definition: Instruction.h:178
op_iterator op_end()
Definition: User.h:118
static Type * getVoidTy(LLVMContext &C)
Definition: Type.cpp:227
BasicBlock * getIncomingBlock(unsigned i) const
Represent an integer comparison operator.
Definition: Instructions.h:911
Interval::pred_iterator pred_end(Interval *I)
Definition: Interval.h:120
arg_iterator arg_begin()
Definition: Function.h:410
FunctionPass * createLowerInvokePass(const TargetMachine *TM=0, bool useExpensiveEHSupport=false)
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:517
static PointerType * getInt8PtrTy(LLVMContext &C, unsigned AS=0)
Definition: Type.cpp:284
char & LowerInvokePassID
CallingConv::ID getCallingConv() const
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:153
static CallInst * Create(Value *Func, ArrayRef< Value * > Args, const Twine &NameStr="", Instruction *InsertBefore=0)
void initializeLowerInvokePass(PassRegistry &)
BasicBlock * getUnwindDest() const
static PointerType * getUnqual(Type *ElementType)
Definition: DerivedTypes.h:436
Class for constant integers.
Definition: Constants.h:51
Value * getIncomingValue(unsigned i) const
Keep one copy of function when linking (inline)
Definition: GlobalValue.h:36
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
Definition: Constants.cpp:492
static GetElementPtrInst * Create(Value *Ptr, ArrayRef< Value * > IdxList, const Twine &NameStr="", Instruction *InsertBefore=0)
Definition: Instructions.h:726
#define NC
Definition: regutils.h:39
void setOperand(unsigned i, Value *Val)
Definition: User.h:92
Instruction * use_back()
Definition: Instruction.h:49
static cl::opt< AlignMode > Align(cl::desc("Load/store alignment support"), cl::Hidden, cl::init(DefaultAlign), cl::values(clEnumValN(DefaultAlign,"arm-default-align","Generate unaligned accesses only on hardware/OS ""combinations that are known to support them"), clEnumValN(StrictAlign,"arm-strict-align","Disallow all unaligned memory accesses"), clEnumValN(NoStrictAlign,"arm-no-strict-align","Allow unaligned memory accesses"), clEnumValEnd))
STATISTIC(NumInvokes,"Number of invokes replaced")
static InsertValueInst * Create(Value *Agg, Value *Val, ArrayRef< unsigned > Idxs, const Twine &NameStr="", Instruction *InsertBefore=0)
use_iterator use_begin()
Definition: Value.h:150
const AttributeSet & getAttributes() const
static IntegerType * getInt32Ty(LLVMContext &C)
Definition: Type.cpp:241
unsigned getJumpBufAlignment() const
void insertAfter(Instruction *InsertPos)
Definition: Instruction.cpp:84
TerminatorInst * getTerminator()
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:120
bool hasOneUse() const
Definition: Value.h:161
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=0, BasicBlock *InsertBefore=0)
Creates a new BasicBlock.
Definition: BasicBlock.h:109
static ArrayType * get(Type *ElementType, uint64_t NumElements)
Definition: Type.cpp:679
BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction.
Definition: BasicBlock.cpp:298
bool use_empty() const
Definition: Value.h:149
LLVM Value Representation.
Definition: Value.h:66
static StructType * create(LLVMContext &Context, StringRef Name)
StructType::create - This creates an identified struct.
Definition: Type.cpp:494
static const Function * getParent(const Value *V)
iterator getFirstInsertionPt()
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
Definition: BasicBlock.cpp:170
static SwitchInst * Create(Value *Value, BasicBlock *Default, unsigned NumCases, Instruction *InsertBefore=0)
const BasicBlock * getParent() const
Definition: Instruction.h:52
LLVMContext & getContext() const
Definition: Module.h:249