LLVM  8.0.1
InlineFunction.cpp
Go to the documentation of this file.
1 //===- InlineFunction.cpp - Code to perform function inlining -------------===//
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 file implements inlining of a function into a call site, resolving
11 // parameters and the return value as appropriate.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/ADT/DenseMap.h"
16 #include "llvm/ADT/None.h"
17 #include "llvm/ADT/Optional.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SetVector.h"
20 #include "llvm/ADT/SmallPtrSet.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/StringExtras.h"
35 #include "llvm/IR/Argument.h"
36 #include "llvm/IR/BasicBlock.h"
37 #include "llvm/IR/CFG.h"
38 #include "llvm/IR/CallSite.h"
39 #include "llvm/IR/Constant.h"
40 #include "llvm/IR/Constants.h"
41 #include "llvm/IR/DIBuilder.h"
42 #include "llvm/IR/DataLayout.h"
44 #include "llvm/IR/DebugLoc.h"
45 #include "llvm/IR/DerivedTypes.h"
46 #include "llvm/IR/Dominators.h"
47 #include "llvm/IR/Function.h"
48 #include "llvm/IR/IRBuilder.h"
49 #include "llvm/IR/InstrTypes.h"
50 #include "llvm/IR/Instruction.h"
51 #include "llvm/IR/Instructions.h"
52 #include "llvm/IR/IntrinsicInst.h"
53 #include "llvm/IR/Intrinsics.h"
54 #include "llvm/IR/LLVMContext.h"
55 #include "llvm/IR/MDBuilder.h"
56 #include "llvm/IR/Metadata.h"
57 #include "llvm/IR/Module.h"
58 #include "llvm/IR/Type.h"
59 #include "llvm/IR/User.h"
60 #include "llvm/IR/Value.h"
61 #include "llvm/Support/Casting.h"
66 #include <algorithm>
67 #include <cassert>
68 #include <cstdint>
69 #include <iterator>
70 #include <limits>
71 #include <string>
72 #include <utility>
73 #include <vector>
74 
75 using namespace llvm;
77 
78 static cl::opt<bool>
79 EnableNoAliasConversion("enable-noalias-to-md-conversion", cl::init(true),
80  cl::Hidden,
81  cl::desc("Convert noalias attributes to metadata during inlining."));
82 
83 static cl::opt<bool>
84 PreserveAlignmentAssumptions("preserve-alignment-assumptions-during-inlining",
85  cl::init(true), cl::Hidden,
86  cl::desc("Convert align attributes to assumptions during inlining."));
87 
89  AAResults *CalleeAAR,
90  bool InsertLifetime) {
91  return InlineFunction(CallSite(CI), IFI, CalleeAAR, InsertLifetime);
92 }
93 
95  AAResults *CalleeAAR,
96  bool InsertLifetime) {
97  return InlineFunction(CallSite(II), IFI, CalleeAAR, InsertLifetime);
98 }
99 
100 namespace {
101 
102  /// A class for recording information about inlining a landing pad.
103  class LandingPadInliningInfo {
104  /// Destination of the invoke's unwind.
105  BasicBlock *OuterResumeDest;
106 
107  /// Destination for the callee's resume.
108  BasicBlock *InnerResumeDest = nullptr;
109 
110  /// LandingPadInst associated with the invoke.
111  LandingPadInst *CallerLPad = nullptr;
112 
113  /// PHI for EH values from landingpad insts.
114  PHINode *InnerEHValuesPHI = nullptr;
115 
116  SmallVector<Value*, 8> UnwindDestPHIValues;
117 
118  public:
119  LandingPadInliningInfo(InvokeInst *II)
120  : OuterResumeDest(II->getUnwindDest()) {
121  // If there are PHI nodes in the unwind destination block, we need to keep
122  // track of which values came into them from the invoke before removing
123  // the edge from this block.
124  BasicBlock *InvokeBB = II->getParent();
125  BasicBlock::iterator I = OuterResumeDest->begin();
126  for (; isa<PHINode>(I); ++I) {
127  // Save the value to use for this edge.
128  PHINode *PHI = cast<PHINode>(I);
129  UnwindDestPHIValues.push_back(PHI->getIncomingValueForBlock(InvokeBB));
130  }
131 
132  CallerLPad = cast<LandingPadInst>(I);
133  }
134 
135  /// The outer unwind destination is the target of
136  /// unwind edges introduced for calls within the inlined function.
137  BasicBlock *getOuterResumeDest() const {
138  return OuterResumeDest;
139  }
140 
141  BasicBlock *getInnerResumeDest();
142 
143  LandingPadInst *getLandingPadInst() const { return CallerLPad; }
144 
145  /// Forward the 'resume' instruction to the caller's landing pad block.
146  /// When the landing pad block has only one predecessor, this is
147  /// a simple branch. When there is more than one predecessor, we need to
148  /// split the landing pad block after the landingpad instruction and jump
149  /// to there.
150  void forwardResume(ResumeInst *RI,
151  SmallPtrSetImpl<LandingPadInst*> &InlinedLPads);
152 
153  /// Add incoming-PHI values to the unwind destination block for the given
154  /// basic block, using the values for the original invoke's source block.
155  void addIncomingPHIValuesFor(BasicBlock *BB) const {
156  addIncomingPHIValuesForInto(BB, OuterResumeDest);
157  }
158 
159  void addIncomingPHIValuesForInto(BasicBlock *src, BasicBlock *dest) const {
160  BasicBlock::iterator I = dest->begin();
161  for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
162  PHINode *phi = cast<PHINode>(I);
163  phi->addIncoming(UnwindDestPHIValues[i], src);
164  }
165  }
166  };
167 
168 } // end anonymous namespace
169 
170 /// Get or create a target for the branch from ResumeInsts.
171 BasicBlock *LandingPadInliningInfo::getInnerResumeDest() {
172  if (InnerResumeDest) return InnerResumeDest;
173 
174  // Split the landing pad.
175  BasicBlock::iterator SplitPoint = ++CallerLPad->getIterator();
176  InnerResumeDest =
177  OuterResumeDest->splitBasicBlock(SplitPoint,
178  OuterResumeDest->getName() + ".body");
179 
180  // The number of incoming edges we expect to the inner landing pad.
181  const unsigned PHICapacity = 2;
182 
183  // Create corresponding new PHIs for all the PHIs in the outer landing pad.
184  Instruction *InsertPoint = &InnerResumeDest->front();
185  BasicBlock::iterator I = OuterResumeDest->begin();
186  for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
187  PHINode *OuterPHI = cast<PHINode>(I);
188  PHINode *InnerPHI = PHINode::Create(OuterPHI->getType(), PHICapacity,
189  OuterPHI->getName() + ".lpad-body",
190  InsertPoint);
191  OuterPHI->replaceAllUsesWith(InnerPHI);
192  InnerPHI->addIncoming(OuterPHI, OuterResumeDest);
193  }
194 
195  // Create a PHI for the exception values.
196  InnerEHValuesPHI = PHINode::Create(CallerLPad->getType(), PHICapacity,
197  "eh.lpad-body", InsertPoint);
198  CallerLPad->replaceAllUsesWith(InnerEHValuesPHI);
199  InnerEHValuesPHI->addIncoming(CallerLPad, OuterResumeDest);
200 
201  // All done.
202  return InnerResumeDest;
203 }
204 
205 /// Forward the 'resume' instruction to the caller's landing pad block.
206 /// When the landing pad block has only one predecessor, this is a simple
207 /// branch. When there is more than one predecessor, we need to split the
208 /// landing pad block after the landingpad instruction and jump to there.
209 void LandingPadInliningInfo::forwardResume(
210  ResumeInst *RI, SmallPtrSetImpl<LandingPadInst *> &InlinedLPads) {
211  BasicBlock *Dest = getInnerResumeDest();
212  BasicBlock *Src = RI->getParent();
213 
214  BranchInst::Create(Dest, Src);
215 
216  // Update the PHIs in the destination. They were inserted in an order which
217  // makes this work.
218  addIncomingPHIValuesForInto(Src, Dest);
219 
220  InnerEHValuesPHI->addIncoming(RI->getOperand(0), Src);
221  RI->eraseFromParent();
222 }
223 
224 /// Helper for getUnwindDestToken/getUnwindDestTokenHelper.
225 static Value *getParentPad(Value *EHPad) {
226  if (auto *FPI = dyn_cast<FuncletPadInst>(EHPad))
227  return FPI->getParentPad();
228  return cast<CatchSwitchInst>(EHPad)->getParentPad();
229 }
230 
232 
233 /// Helper for getUnwindDestToken that does the descendant-ward part of
234 /// the search.
236  UnwindDestMemoTy &MemoMap) {
237  SmallVector<Instruction *, 8> Worklist(1, EHPad);
238 
239  while (!Worklist.empty()) {
240  Instruction *CurrentPad = Worklist.pop_back_val();
241  // We only put pads on the worklist that aren't in the MemoMap. When
242  // we find an unwind dest for a pad we may update its ancestors, but
243  // the queue only ever contains uncles/great-uncles/etc. of CurrentPad,
244  // so they should never get updated while queued on the worklist.
245  assert(!MemoMap.count(CurrentPad));
246  Value *UnwindDestToken = nullptr;
247  if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(CurrentPad)) {
248  if (CatchSwitch->hasUnwindDest()) {
249  UnwindDestToken = CatchSwitch->getUnwindDest()->getFirstNonPHI();
250  } else {
251  // Catchswitch doesn't have a 'nounwind' variant, and one might be
252  // annotated as "unwinds to caller" when really it's nounwind (see
253  // e.g. SimplifyCFGOpt::SimplifyUnreachable), so we can't infer the
254  // parent's unwind dest from this. We can check its catchpads'
255  // descendants, since they might include a cleanuppad with an
256  // "unwinds to caller" cleanupret, which can be trusted.
257  for (auto HI = CatchSwitch->handler_begin(),
258  HE = CatchSwitch->handler_end();
259  HI != HE && !UnwindDestToken; ++HI) {
260  BasicBlock *HandlerBlock = *HI;
261  auto *CatchPad = cast<CatchPadInst>(HandlerBlock->getFirstNonPHI());
262  for (User *Child : CatchPad->users()) {
263  // Intentionally ignore invokes here -- since the catchswitch is
264  // marked "unwind to caller", it would be a verifier error if it
265  // contained an invoke which unwinds out of it, so any invoke we'd
266  // encounter must unwind to some child of the catch.
267  if (!isa<CleanupPadInst>(Child) && !isa<CatchSwitchInst>(Child))
268  continue;
269 
270  Instruction *ChildPad = cast<Instruction>(Child);
271  auto Memo = MemoMap.find(ChildPad);
272  if (Memo == MemoMap.end()) {
273  // Haven't figured out this child pad yet; queue it.
274  Worklist.push_back(ChildPad);
275  continue;
276  }
277  // We've already checked this child, but might have found that
278  // it offers no proof either way.
279  Value *ChildUnwindDestToken = Memo->second;
280  if (!ChildUnwindDestToken)
281  continue;
282  // We already know the child's unwind dest, which can either
283  // be ConstantTokenNone to indicate unwind to caller, or can
284  // be another child of the catchpad. Only the former indicates
285  // the unwind dest of the catchswitch.
286  if (isa<ConstantTokenNone>(ChildUnwindDestToken)) {
287  UnwindDestToken = ChildUnwindDestToken;
288  break;
289  }
290  assert(getParentPad(ChildUnwindDestToken) == CatchPad);
291  }
292  }
293  }
294  } else {
295  auto *CleanupPad = cast<CleanupPadInst>(CurrentPad);
296  for (User *U : CleanupPad->users()) {
297  if (auto *CleanupRet = dyn_cast<CleanupReturnInst>(U)) {
298  if (BasicBlock *RetUnwindDest = CleanupRet->getUnwindDest())
299  UnwindDestToken = RetUnwindDest->getFirstNonPHI();
300  else
301  UnwindDestToken = ConstantTokenNone::get(CleanupPad->getContext());
302  break;
303  }
304  Value *ChildUnwindDestToken;
305  if (auto *Invoke = dyn_cast<InvokeInst>(U)) {
306  ChildUnwindDestToken = Invoke->getUnwindDest()->getFirstNonPHI();
307  } else if (isa<CleanupPadInst>(U) || isa<CatchSwitchInst>(U)) {
308  Instruction *ChildPad = cast<Instruction>(U);
309  auto Memo = MemoMap.find(ChildPad);
310  if (Memo == MemoMap.end()) {
311  // Haven't resolved this child yet; queue it and keep searching.
312  Worklist.push_back(ChildPad);
313  continue;
314  }
315  // We've checked this child, but still need to ignore it if it
316  // had no proof either way.
317  ChildUnwindDestToken = Memo->second;
318  if (!ChildUnwindDestToken)
319  continue;
320  } else {
321  // Not a relevant user of the cleanuppad
322  continue;
323  }
324  // In a well-formed program, the child/invoke must either unwind to
325  // an(other) child of the cleanup, or exit the cleanup. In the
326  // first case, continue searching.
327  if (isa<Instruction>(ChildUnwindDestToken) &&
328  getParentPad(ChildUnwindDestToken) == CleanupPad)
329  continue;
330  UnwindDestToken = ChildUnwindDestToken;
331  break;
332  }
333  }
334  // If we haven't found an unwind dest for CurrentPad, we may have queued its
335  // children, so move on to the next in the worklist.
336  if (!UnwindDestToken)
337  continue;
338 
339  // Now we know that CurrentPad unwinds to UnwindDestToken. It also exits
340  // any ancestors of CurrentPad up to but not including UnwindDestToken's
341  // parent pad. Record this in the memo map, and check to see if the
342  // original EHPad being queried is one of the ones exited.
343  Value *UnwindParent;
344  if (auto *UnwindPad = dyn_cast<Instruction>(UnwindDestToken))
345  UnwindParent = getParentPad(UnwindPad);
346  else
347  UnwindParent = nullptr;
348  bool ExitedOriginalPad = false;
349  for (Instruction *ExitedPad = CurrentPad;
350  ExitedPad && ExitedPad != UnwindParent;
351  ExitedPad = dyn_cast<Instruction>(getParentPad(ExitedPad))) {
352  // Skip over catchpads since they just follow their catchswitches.
353  if (isa<CatchPadInst>(ExitedPad))
354  continue;
355  MemoMap[ExitedPad] = UnwindDestToken;
356  ExitedOriginalPad |= (ExitedPad == EHPad);
357  }
358 
359  if (ExitedOriginalPad)
360  return UnwindDestToken;
361 
362  // Continue the search.
363  }
364 
365  // No definitive information is contained within this funclet.
366  return nullptr;
367 }
368 
369 /// Given an EH pad, find where it unwinds. If it unwinds to an EH pad,
370 /// return that pad instruction. If it unwinds to caller, return
371 /// ConstantTokenNone. If it does not have a definitive unwind destination,
372 /// return nullptr.
373 ///
374 /// This routine gets invoked for calls in funclets in inlinees when inlining
375 /// an invoke. Since many funclets don't have calls inside them, it's queried
376 /// on-demand rather than building a map of pads to unwind dests up front.
377 /// Determining a funclet's unwind dest may require recursively searching its
378 /// descendants, and also ancestors and cousins if the descendants don't provide
379 /// an answer. Since most funclets will have their unwind dest immediately
380 /// available as the unwind dest of a catchswitch or cleanupret, this routine
381 /// searches top-down from the given pad and then up. To avoid worst-case
382 /// quadratic run-time given that approach, it uses a memo map to avoid
383 /// re-processing funclet trees. The callers that rewrite the IR as they go
384 /// take advantage of this, for correctness, by checking/forcing rewritten
385 /// pads' entries to match the original callee view.
387  UnwindDestMemoTy &MemoMap) {
388  // Catchpads unwind to the same place as their catchswitch;
389  // redirct any queries on catchpads so the code below can
390  // deal with just catchswitches and cleanuppads.
391  if (auto *CPI = dyn_cast<CatchPadInst>(EHPad))
392  EHPad = CPI->getCatchSwitch();
393 
394  // Check if we've already determined the unwind dest for this pad.
395  auto Memo = MemoMap.find(EHPad);
396  if (Memo != MemoMap.end())
397  return Memo->second;
398 
399  // Search EHPad and, if necessary, its descendants.
400  Value *UnwindDestToken = getUnwindDestTokenHelper(EHPad, MemoMap);
401  assert((UnwindDestToken == nullptr) != (MemoMap.count(EHPad) != 0));
402  if (UnwindDestToken)
403  return UnwindDestToken;
404 
405  // No information is available for this EHPad from itself or any of its
406  // descendants. An unwind all the way out to a pad in the caller would
407  // need also to agree with the unwind dest of the parent funclet, so
408  // search up the chain to try to find a funclet with information. Put
409  // null entries in the memo map to avoid re-processing as we go up.
410  MemoMap[EHPad] = nullptr;
411 #ifndef NDEBUG
413  TempMemos.insert(EHPad);
414 #endif
415  Instruction *LastUselessPad = EHPad;
416  Value *AncestorToken;
417  for (AncestorToken = getParentPad(EHPad);
418  auto *AncestorPad = dyn_cast<Instruction>(AncestorToken);
419  AncestorToken = getParentPad(AncestorToken)) {
420  // Skip over catchpads since they just follow their catchswitches.
421  if (isa<CatchPadInst>(AncestorPad))
422  continue;
423  // If the MemoMap had an entry mapping AncestorPad to nullptr, since we
424  // haven't yet called getUnwindDestTokenHelper for AncestorPad in this
425  // call to getUnwindDestToken, that would mean that AncestorPad had no
426  // information in itself, its descendants, or its ancestors. If that
427  // were the case, then we should also have recorded the lack of information
428  // for the descendant that we're coming from. So assert that we don't
429  // find a null entry in the MemoMap for AncestorPad.
430  assert(!MemoMap.count(AncestorPad) || MemoMap[AncestorPad]);
431  auto AncestorMemo = MemoMap.find(AncestorPad);
432  if (AncestorMemo == MemoMap.end()) {
433  UnwindDestToken = getUnwindDestTokenHelper(AncestorPad, MemoMap);
434  } else {
435  UnwindDestToken = AncestorMemo->second;
436  }
437  if (UnwindDestToken)
438  break;
439  LastUselessPad = AncestorPad;
440  MemoMap[LastUselessPad] = nullptr;
441 #ifndef NDEBUG
442  TempMemos.insert(LastUselessPad);
443 #endif
444  }
445 
446  // We know that getUnwindDestTokenHelper was called on LastUselessPad and
447  // returned nullptr (and likewise for EHPad and any of its ancestors up to
448  // LastUselessPad), so LastUselessPad has no information from below. Since
449  // getUnwindDestTokenHelper must investigate all downward paths through
450  // no-information nodes to prove that a node has no information like this,
451  // and since any time it finds information it records it in the MemoMap for
452  // not just the immediately-containing funclet but also any ancestors also
453  // exited, it must be the case that, walking downward from LastUselessPad,
454  // visiting just those nodes which have not been mapped to an unwind dest
455  // by getUnwindDestTokenHelper (the nullptr TempMemos notwithstanding, since
456  // they are just used to keep getUnwindDestTokenHelper from repeating work),
457  // any node visited must have been exhaustively searched with no information
458  // for it found.
459  SmallVector<Instruction *, 8> Worklist(1, LastUselessPad);
460  while (!Worklist.empty()) {
461  Instruction *UselessPad = Worklist.pop_back_val();
462  auto Memo = MemoMap.find(UselessPad);
463  if (Memo != MemoMap.end() && Memo->second) {
464  // Here the name 'UselessPad' is a bit of a misnomer, because we've found
465  // that it is a funclet that does have information about unwinding to
466  // a particular destination; its parent was a useless pad.
467  // Since its parent has no information, the unwind edge must not escape
468  // the parent, and must target a sibling of this pad. This local unwind
469  // gives us no information about EHPad. Leave it and the subtree rooted
470  // at it alone.
471  assert(getParentPad(Memo->second) == getParentPad(UselessPad));
472  continue;
473  }
474  // We know we don't have information for UselesPad. If it has an entry in
475  // the MemoMap (mapping it to nullptr), it must be one of the TempMemos
476  // added on this invocation of getUnwindDestToken; if a previous invocation
477  // recorded nullptr, it would have had to prove that the ancestors of
478  // UselessPad, which include LastUselessPad, had no information, and that
479  // in turn would have required proving that the descendants of
480  // LastUselesPad, which include EHPad, have no information about
481  // LastUselessPad, which would imply that EHPad was mapped to nullptr in
482  // the MemoMap on that invocation, which isn't the case if we got here.
483  assert(!MemoMap.count(UselessPad) || TempMemos.count(UselessPad));
484  // Assert as we enumerate users that 'UselessPad' doesn't have any unwind
485  // information that we'd be contradicting by making a map entry for it
486  // (which is something that getUnwindDestTokenHelper must have proved for
487  // us to get here). Just assert on is direct users here; the checks in
488  // this downward walk at its descendants will verify that they don't have
489  // any unwind edges that exit 'UselessPad' either (i.e. they either have no
490  // unwind edges or unwind to a sibling).
491  MemoMap[UselessPad] = UnwindDestToken;
492  if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(UselessPad)) {
493  assert(CatchSwitch->getUnwindDest() == nullptr && "Expected useless pad");
494  for (BasicBlock *HandlerBlock : CatchSwitch->handlers()) {
495  auto *CatchPad = HandlerBlock->getFirstNonPHI();
496  for (User *U : CatchPad->users()) {
497  assert(
498  (!isa<InvokeInst>(U) ||
499  (getParentPad(
500  cast<InvokeInst>(U)->getUnwindDest()->getFirstNonPHI()) ==
501  CatchPad)) &&
502  "Expected useless pad");
503  if (isa<CatchSwitchInst>(U) || isa<CleanupPadInst>(U))
504  Worklist.push_back(cast<Instruction>(U));
505  }
506  }
507  } else {
508  assert(isa<CleanupPadInst>(UselessPad));
509  for (User *U : UselessPad->users()) {
510  assert(!isa<CleanupReturnInst>(U) && "Expected useless pad");
511  assert((!isa<InvokeInst>(U) ||
512  (getParentPad(
513  cast<InvokeInst>(U)->getUnwindDest()->getFirstNonPHI()) ==
514  UselessPad)) &&
515  "Expected useless pad");
516  if (isa<CatchSwitchInst>(U) || isa<CleanupPadInst>(U))
517  Worklist.push_back(cast<Instruction>(U));
518  }
519  }
520  }
521 
522  return UnwindDestToken;
523 }
524 
525 /// When we inline a basic block into an invoke,
526 /// we have to turn all of the calls that can throw into invokes.
527 /// This function analyze BB to see if there are any calls, and if so,
528 /// it rewrites them to be invokes that jump to InvokeDest and fills in the PHI
529 /// nodes in that block with the values specified in InvokeDestPHIValues.
531  BasicBlock *BB, BasicBlock *UnwindEdge,
532  UnwindDestMemoTy *FuncletUnwindMap = nullptr) {
533  for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E; ) {
534  Instruction *I = &*BBI++;
535 
536  // We only need to check for function calls: inlined invoke
537  // instructions require no special handling.
538  CallInst *CI = dyn_cast<CallInst>(I);
539 
540  if (!CI || CI->doesNotThrow() || isa<InlineAsm>(CI->getCalledValue()))
541  continue;
542 
543  // We do not need to (and in fact, cannot) convert possibly throwing calls
544  // to @llvm.experimental_deoptimize (resp. @llvm.experimental.guard) into
545  // invokes. The caller's "segment" of the deoptimization continuation
546  // attached to the newly inlined @llvm.experimental_deoptimize
547  // (resp. @llvm.experimental.guard) call should contain the exception
548  // handling logic, if any.
549  if (auto *F = CI->getCalledFunction())
550  if (F->getIntrinsicID() == Intrinsic::experimental_deoptimize ||
551  F->getIntrinsicID() == Intrinsic::experimental_guard)
552  continue;
553 
554  if (auto FuncletBundle = CI->getOperandBundle(LLVMContext::OB_funclet)) {
555  // This call is nested inside a funclet. If that funclet has an unwind
556  // destination within the inlinee, then unwinding out of this call would
557  // be UB. Rewriting this call to an invoke which targets the inlined
558  // invoke's unwind dest would give the call's parent funclet multiple
559  // unwind destinations, which is something that subsequent EH table
560  // generation can't handle and that the veirifer rejects. So when we
561  // see such a call, leave it as a call.
562  auto *FuncletPad = cast<Instruction>(FuncletBundle->Inputs[0]);
563  Value *UnwindDestToken =
564  getUnwindDestToken(FuncletPad, *FuncletUnwindMap);
565  if (UnwindDestToken && !isa<ConstantTokenNone>(UnwindDestToken))
566  continue;
567 #ifndef NDEBUG
568  Instruction *MemoKey;
569  if (auto *CatchPad = dyn_cast<CatchPadInst>(FuncletPad))
570  MemoKey = CatchPad->getCatchSwitch();
571  else
572  MemoKey = FuncletPad;
573  assert(FuncletUnwindMap->count(MemoKey) &&
574  (*FuncletUnwindMap)[MemoKey] == UnwindDestToken &&
575  "must get memoized to avoid confusing later searches");
576 #endif // NDEBUG
577  }
578 
579  changeToInvokeAndSplitBasicBlock(CI, UnwindEdge);
580  return BB;
581  }
582  return nullptr;
583 }
584 
585 /// If we inlined an invoke site, we need to convert calls
586 /// in the body of the inlined function into invokes.
587 ///
588 /// II is the invoke instruction being inlined. FirstNewBlock is the first
589 /// block of the inlined code (the last block is the end of the function),
590 /// and InlineCodeInfo is information about the code that got inlined.
591 static void HandleInlinedLandingPad(InvokeInst *II, BasicBlock *FirstNewBlock,
592  ClonedCodeInfo &InlinedCodeInfo) {
593  BasicBlock *InvokeDest = II->getUnwindDest();
594 
595  Function *Caller = FirstNewBlock->getParent();
596 
597  // The inlined code is currently at the end of the function, scan from the
598  // start of the inlined code to its end, checking for stuff we need to
599  // rewrite.
600  LandingPadInliningInfo Invoke(II);
601 
602  // Get all of the inlined landing pad instructions.
604  for (Function::iterator I = FirstNewBlock->getIterator(), E = Caller->end();
605  I != E; ++I)
606  if (InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator()))
607  InlinedLPads.insert(II->getLandingPadInst());
608 
609  // Append the clauses from the outer landing pad instruction into the inlined
610  // landing pad instructions.
611  LandingPadInst *OuterLPad = Invoke.getLandingPadInst();
612  for (LandingPadInst *InlinedLPad : InlinedLPads) {
613  unsigned OuterNum = OuterLPad->getNumClauses();
614  InlinedLPad->reserveClauses(OuterNum);
615  for (unsigned OuterIdx = 0; OuterIdx != OuterNum; ++OuterIdx)
616  InlinedLPad->addClause(OuterLPad->getClause(OuterIdx));
617  if (OuterLPad->isCleanup())
618  InlinedLPad->setCleanup(true);
619  }
620 
621  for (Function::iterator BB = FirstNewBlock->getIterator(), E = Caller->end();
622  BB != E; ++BB) {
623  if (InlinedCodeInfo.ContainsCalls)
625  &*BB, Invoke.getOuterResumeDest()))
626  // Update any PHI nodes in the exceptional block to indicate that there
627  // is now a new entry in them.
628  Invoke.addIncomingPHIValuesFor(NewBB);
629 
630  // Forward any resumes that are remaining here.
631  if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator()))
632  Invoke.forwardResume(RI, InlinedLPads);
633  }
634 
635  // Now that everything is happy, we have one final detail. The PHI nodes in
636  // the exception destination block still have entries due to the original
637  // invoke instruction. Eliminate these entries (which might even delete the
638  // PHI node) now.
639  InvokeDest->removePredecessor(II->getParent());
640 }
641 
642 /// If we inlined an invoke site, we need to convert calls
643 /// in the body of the inlined function into invokes.
644 ///
645 /// II is the invoke instruction being inlined. FirstNewBlock is the first
646 /// block of the inlined code (the last block is the end of the function),
647 /// and InlineCodeInfo is information about the code that got inlined.
648 static void HandleInlinedEHPad(InvokeInst *II, BasicBlock *FirstNewBlock,
649  ClonedCodeInfo &InlinedCodeInfo) {
650  BasicBlock *UnwindDest = II->getUnwindDest();
651  Function *Caller = FirstNewBlock->getParent();
652 
653  assert(UnwindDest->getFirstNonPHI()->isEHPad() && "unexpected BasicBlock!");
654 
655  // If there are PHI nodes in the unwind destination block, we need to keep
656  // track of which values came into them from the invoke before removing the
657  // edge from this block.
658  SmallVector<Value *, 8> UnwindDestPHIValues;
659  BasicBlock *InvokeBB = II->getParent();
660  for (Instruction &I : *UnwindDest) {
661  // Save the value to use for this edge.
662  PHINode *PHI = dyn_cast<PHINode>(&I);
663  if (!PHI)
664  break;
665  UnwindDestPHIValues.push_back(PHI->getIncomingValueForBlock(InvokeBB));
666  }
667 
668  // Add incoming-PHI values to the unwind destination block for the given basic
669  // block, using the values for the original invoke's source block.
670  auto UpdatePHINodes = [&](BasicBlock *Src) {
671  BasicBlock::iterator I = UnwindDest->begin();
672  for (Value *V : UnwindDestPHIValues) {
673  PHINode *PHI = cast<PHINode>(I);
674  PHI->addIncoming(V, Src);
675  ++I;
676  }
677  };
678 
679  // This connects all the instructions which 'unwind to caller' to the invoke
680  // destination.
681  UnwindDestMemoTy FuncletUnwindMap;
682  for (Function::iterator BB = FirstNewBlock->getIterator(), E = Caller->end();
683  BB != E; ++BB) {
684  if (auto *CRI = dyn_cast<CleanupReturnInst>(BB->getTerminator())) {
685  if (CRI->unwindsToCaller()) {
686  auto *CleanupPad = CRI->getCleanupPad();
687  CleanupReturnInst::Create(CleanupPad, UnwindDest, CRI);
688  CRI->eraseFromParent();
689  UpdatePHINodes(&*BB);
690  // Finding a cleanupret with an unwind destination would confuse
691  // subsequent calls to getUnwindDestToken, so map the cleanuppad
692  // to short-circuit any such calls and recognize this as an "unwind
693  // to caller" cleanup.
694  assert(!FuncletUnwindMap.count(CleanupPad) ||
695  isa<ConstantTokenNone>(FuncletUnwindMap[CleanupPad]));
696  FuncletUnwindMap[CleanupPad] =
698  }
699  }
700 
701  Instruction *I = BB->getFirstNonPHI();
702  if (!I->isEHPad())
703  continue;
704 
705  Instruction *Replacement = nullptr;
706  if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(I)) {
707  if (CatchSwitch->unwindsToCaller()) {
708  Value *UnwindDestToken;
709  if (auto *ParentPad =
710  dyn_cast<Instruction>(CatchSwitch->getParentPad())) {
711  // This catchswitch is nested inside another funclet. If that
712  // funclet has an unwind destination within the inlinee, then
713  // unwinding out of this catchswitch would be UB. Rewriting this
714  // catchswitch to unwind to the inlined invoke's unwind dest would
715  // give the parent funclet multiple unwind destinations, which is
716  // something that subsequent EH table generation can't handle and
717  // that the veirifer rejects. So when we see such a call, leave it
718  // as "unwind to caller".
719  UnwindDestToken = getUnwindDestToken(ParentPad, FuncletUnwindMap);
720  if (UnwindDestToken && !isa<ConstantTokenNone>(UnwindDestToken))
721  continue;
722  } else {
723  // This catchswitch has no parent to inherit constraints from, and
724  // none of its descendants can have an unwind edge that exits it and
725  // targets another funclet in the inlinee. It may or may not have a
726  // descendant that definitively has an unwind to caller. In either
727  // case, we'll have to assume that any unwinds out of it may need to
728  // be routed to the caller, so treat it as though it has a definitive
729  // unwind to caller.
730  UnwindDestToken = ConstantTokenNone::get(Caller->getContext());
731  }
732  auto *NewCatchSwitch = CatchSwitchInst::Create(
733  CatchSwitch->getParentPad(), UnwindDest,
734  CatchSwitch->getNumHandlers(), CatchSwitch->getName(),
735  CatchSwitch);
736  for (BasicBlock *PadBB : CatchSwitch->handlers())
737  NewCatchSwitch->addHandler(PadBB);
738  // Propagate info for the old catchswitch over to the new one in
739  // the unwind map. This also serves to short-circuit any subsequent
740  // checks for the unwind dest of this catchswitch, which would get
741  // confused if they found the outer handler in the callee.
742  FuncletUnwindMap[NewCatchSwitch] = UnwindDestToken;
743  Replacement = NewCatchSwitch;
744  }
745  } else if (!isa<FuncletPadInst>(I)) {
746  llvm_unreachable("unexpected EHPad!");
747  }
748 
749  if (Replacement) {
750  Replacement->takeName(I);
751  I->replaceAllUsesWith(Replacement);
752  I->eraseFromParent();
753  UpdatePHINodes(&*BB);
754  }
755  }
756 
757  if (InlinedCodeInfo.ContainsCalls)
758  for (Function::iterator BB = FirstNewBlock->getIterator(),
759  E = Caller->end();
760  BB != E; ++BB)
762  &*BB, UnwindDest, &FuncletUnwindMap))
763  // Update any PHI nodes in the exceptional block to indicate that there
764  // is now a new entry in them.
765  UpdatePHINodes(NewBB);
766 
767  // Now that everything is happy, we have one final detail. The PHI nodes in
768  // the exception destination block still have entries due to the original
769  // invoke instruction. Eliminate these entries (which might even delete the
770  // PHI node) now.
771  UnwindDest->removePredecessor(InvokeBB);
772 }
773 
774 /// When inlining a call site that has !llvm.mem.parallel_loop_access or
775 /// llvm.access.group metadata, that metadata should be propagated to all
776 /// memory-accessing cloned instructions.
778  ValueToValueMapTy &VMap) {
779  MDNode *M =
781  MDNode *CallAccessGroup =
783  if (!M && !CallAccessGroup)
784  return;
785 
786  for (ValueToValueMapTy::iterator VMI = VMap.begin(), VMIE = VMap.end();
787  VMI != VMIE; ++VMI) {
788  if (!VMI->second)
789  continue;
790 
791  Instruction *NI = dyn_cast<Instruction>(VMI->second);
792  if (!NI)
793  continue;
794 
795  if (M) {
796  if (MDNode *PM =
798  M = MDNode::concatenate(PM, M);
800  } else if (NI->mayReadOrWriteMemory()) {
802  }
803  }
804 
805  if (NI->mayReadOrWriteMemory()) {
806  MDNode *UnitedAccGroups = uniteAccessGroups(
807  NI->getMetadata(LLVMContext::MD_access_group), CallAccessGroup);
808  NI->setMetadata(LLVMContext::MD_access_group, UnitedAccGroups);
809  }
810  }
811 }
812 
813 /// When inlining a function that contains noalias scope metadata,
814 /// this metadata needs to be cloned so that the inlined blocks
815 /// have different "unique scopes" at every call site. Were this not done, then
816 /// aliasing scopes from a function inlined into a caller multiple times could
817 /// not be differentiated (and this would lead to miscompiles because the
818 /// non-aliasing property communicated by the metadata could have
819 /// call-site-specific control dependencies).
821  const Function *CalledFunc = CS.getCalledFunction();
823 
824  // Note: We could only clone the metadata if it is already used in the
825  // caller. I'm omitting that check here because it might confuse
826  // inter-procedural alias analysis passes. We can revisit this if it becomes
827  // an efficiency or overhead problem.
828 
829  for (const BasicBlock &I : *CalledFunc)
830  for (const Instruction &J : I) {
831  if (const MDNode *M = J.getMetadata(LLVMContext::MD_alias_scope))
832  MD.insert(M);
833  if (const MDNode *M = J.getMetadata(LLVMContext::MD_noalias))
834  MD.insert(M);
835  }
836 
837  if (MD.empty())
838  return;
839 
840  // Walk the existing metadata, adding the complete (perhaps cyclic) chain to
841  // the set.
842  SmallVector<const Metadata *, 16> Queue(MD.begin(), MD.end());
843  while (!Queue.empty()) {
844  const MDNode *M = cast<MDNode>(Queue.pop_back_val());
845  for (unsigned i = 0, ie = M->getNumOperands(); i != ie; ++i)
846  if (const MDNode *M1 = dyn_cast<MDNode>(M->getOperand(i)))
847  if (MD.insert(M1))
848  Queue.push_back(M1);
849  }
850 
851  // Now we have a complete set of all metadata in the chains used to specify
852  // the noalias scopes and the lists of those scopes.
853  SmallVector<TempMDTuple, 16> DummyNodes;
855  for (const MDNode *I : MD) {
856  DummyNodes.push_back(MDTuple::getTemporary(CalledFunc->getContext(), None));
857  MDMap[I].reset(DummyNodes.back().get());
858  }
859 
860  // Create new metadata nodes to replace the dummy nodes, replacing old
861  // metadata references with either a dummy node or an already-created new
862  // node.
863  for (const MDNode *I : MD) {
865  for (unsigned i = 0, ie = I->getNumOperands(); i != ie; ++i) {
866  const Metadata *V = I->getOperand(i);
867  if (const MDNode *M = dyn_cast<MDNode>(V))
868  NewOps.push_back(MDMap[M]);
869  else
870  NewOps.push_back(const_cast<Metadata *>(V));
871  }
872 
873  MDNode *NewM = MDNode::get(CalledFunc->getContext(), NewOps);
874  MDTuple *TempM = cast<MDTuple>(MDMap[I]);
875  assert(TempM->isTemporary() && "Expected temporary node");
876 
877  TempM->replaceAllUsesWith(NewM);
878  }
879 
880  // Now replace the metadata in the new inlined instructions with the
881  // repacements from the map.
882  for (ValueToValueMapTy::iterator VMI = VMap.begin(), VMIE = VMap.end();
883  VMI != VMIE; ++VMI) {
884  if (!VMI->second)
885  continue;
886 
887  Instruction *NI = dyn_cast<Instruction>(VMI->second);
888  if (!NI)
889  continue;
890 
892  MDNode *NewMD = MDMap[M];
893  // If the call site also had alias scope metadata (a list of scopes to
894  // which instructions inside it might belong), propagate those scopes to
895  // the inlined instructions.
896  if (MDNode *CSM =
898  NewMD = MDNode::concatenate(NewMD, CSM);
900  } else if (NI->mayReadOrWriteMemory()) {
901  if (MDNode *M =
904  }
905 
907  MDNode *NewMD = MDMap[M];
908  // If the call site also had noalias metadata (a list of scopes with
909  // which instructions inside it don't alias), propagate those scopes to
910  // the inlined instructions.
911  if (MDNode *CSM =
913  NewMD = MDNode::concatenate(NewMD, CSM);
915  } else if (NI->mayReadOrWriteMemory()) {
918  }
919  }
920 }
921 
922 /// If the inlined function has noalias arguments,
923 /// then add new alias scopes for each noalias argument, tag the mapped noalias
924 /// parameters with noalias metadata specifying the new scope, and tag all
925 /// non-derived loads, stores and memory intrinsics with the new alias scopes.
927  const DataLayout &DL, AAResults *CalleeAAR) {
929  return;
930 
931  const Function *CalledFunc = CS.getCalledFunction();
933 
934  for (const Argument &Arg : CalledFunc->args())
935  if (Arg.hasNoAliasAttr() && !Arg.use_empty())
936  NoAliasArgs.push_back(&Arg);
937 
938  if (NoAliasArgs.empty())
939  return;
940 
941  // To do a good job, if a noalias variable is captured, we need to know if
942  // the capture point dominates the particular use we're considering.
943  DominatorTree DT;
944  DT.recalculate(const_cast<Function&>(*CalledFunc));
945 
946  // noalias indicates that pointer values based on the argument do not alias
947  // pointer values which are not based on it. So we add a new "scope" for each
948  // noalias function argument. Accesses using pointers based on that argument
949  // become part of that alias scope, accesses using pointers not based on that
950  // argument are tagged as noalias with that scope.
951 
953  MDBuilder MDB(CalledFunc->getContext());
954 
955  // Create a new scope domain for this function.
956  MDNode *NewDomain =
957  MDB.createAnonymousAliasScopeDomain(CalledFunc->getName());
958  for (unsigned i = 0, e = NoAliasArgs.size(); i != e; ++i) {
959  const Argument *A = NoAliasArgs[i];
960 
961  std::string Name = CalledFunc->getName();
962  if (A->hasName()) {
963  Name += ": %";
964  Name += A->getName();
965  } else {
966  Name += ": argument ";
967  Name += utostr(i);
968  }
969 
970  // Note: We always create a new anonymous root here. This is true regardless
971  // of the linkage of the callee because the aliasing "scope" is not just a
972  // property of the callee, but also all control dependencies in the caller.
973  MDNode *NewScope = MDB.createAnonymousAliasScope(NewDomain, Name);
974  NewScopes.insert(std::make_pair(A, NewScope));
975  }
976 
977  // Iterate over all new instructions in the map; for all memory-access
978  // instructions, add the alias scope metadata.
979  for (ValueToValueMapTy::iterator VMI = VMap.begin(), VMIE = VMap.end();
980  VMI != VMIE; ++VMI) {
981  if (const Instruction *I = dyn_cast<Instruction>(VMI->first)) {
982  if (!VMI->second)
983  continue;
984 
985  Instruction *NI = dyn_cast<Instruction>(VMI->second);
986  if (!NI)
987  continue;
988 
989  bool IsArgMemOnlyCall = false, IsFuncCall = false;
991 
992  if (const LoadInst *LI = dyn_cast<LoadInst>(I))
993  PtrArgs.push_back(LI->getPointerOperand());
994  else if (const StoreInst *SI = dyn_cast<StoreInst>(I))
995  PtrArgs.push_back(SI->getPointerOperand());
996  else if (const VAArgInst *VAAI = dyn_cast<VAArgInst>(I))
997  PtrArgs.push_back(VAAI->getPointerOperand());
998  else if (const AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(I))
999  PtrArgs.push_back(CXI->getPointerOperand());
1000  else if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(I))
1001  PtrArgs.push_back(RMWI->getPointerOperand());
1002  else if (const auto *Call = dyn_cast<CallBase>(I)) {
1003  // If we know that the call does not access memory, then we'll still
1004  // know that about the inlined clone of this call site, and we don't
1005  // need to add metadata.
1006  if (Call->doesNotAccessMemory())
1007  continue;
1008 
1009  IsFuncCall = true;
1010  if (CalleeAAR) {
1011  FunctionModRefBehavior MRB = CalleeAAR->getModRefBehavior(Call);
1012  if (MRB == FMRB_OnlyAccessesArgumentPointees ||
1014  IsArgMemOnlyCall = true;
1015  }
1016 
1017  for (Value *Arg : Call->args()) {
1018  // We need to check the underlying objects of all arguments, not just
1019  // the pointer arguments, because we might be passing pointers as
1020  // integers, etc.
1021  // However, if we know that the call only accesses pointer arguments,
1022  // then we only need to check the pointer arguments.
1023  if (IsArgMemOnlyCall && !Arg->getType()->isPointerTy())
1024  continue;
1025 
1026  PtrArgs.push_back(Arg);
1027  }
1028  }
1029 
1030  // If we found no pointers, then this instruction is not suitable for
1031  // pairing with an instruction to receive aliasing metadata.
1032  // However, if this is a call, this we might just alias with none of the
1033  // noalias arguments.
1034  if (PtrArgs.empty() && !IsFuncCall)
1035  continue;
1036 
1037  // It is possible that there is only one underlying object, but you
1038  // need to go through several PHIs to see it, and thus could be
1039  // repeated in the Objects list.
1042 
1044  for (const Value *V : PtrArgs) {
1045  SmallVector<Value *, 4> Objects;
1046  GetUnderlyingObjects(const_cast<Value*>(V),
1047  Objects, DL, /* LI = */ nullptr);
1048 
1049  for (Value *O : Objects)
1050  ObjSet.insert(O);
1051  }
1052 
1053  // Figure out if we're derived from anything that is not a noalias
1054  // argument.
1055  bool CanDeriveViaCapture = false, UsesAliasingPtr = false;
1056  for (const Value *V : ObjSet) {
1057  // Is this value a constant that cannot be derived from any pointer
1058  // value (we need to exclude constant expressions, for example, that
1059  // are formed from arithmetic on global symbols).
1060  bool IsNonPtrConst = isa<ConstantInt>(V) || isa<ConstantFP>(V) ||
1061  isa<ConstantPointerNull>(V) ||
1062  isa<ConstantDataVector>(V) || isa<UndefValue>(V);
1063  if (IsNonPtrConst)
1064  continue;
1065 
1066  // If this is anything other than a noalias argument, then we cannot
1067  // completely describe the aliasing properties using alias.scope
1068  // metadata (and, thus, won't add any).
1069  if (const Argument *A = dyn_cast<Argument>(V)) {
1070  if (!A->hasNoAliasAttr())
1071  UsesAliasingPtr = true;
1072  } else {
1073  UsesAliasingPtr = true;
1074  }
1075 
1076  // If this is not some identified function-local object (which cannot
1077  // directly alias a noalias argument), or some other argument (which,
1078  // by definition, also cannot alias a noalias argument), then we could
1079  // alias a noalias argument that has been captured).
1080  if (!isa<Argument>(V) &&
1081  !isIdentifiedFunctionLocal(const_cast<Value*>(V)))
1082  CanDeriveViaCapture = true;
1083  }
1084 
1085  // A function call can always get captured noalias pointers (via other
1086  // parameters, globals, etc.).
1087  if (IsFuncCall && !IsArgMemOnlyCall)
1088  CanDeriveViaCapture = true;
1089 
1090  // First, we want to figure out all of the sets with which we definitely
1091  // don't alias. Iterate over all noalias set, and add those for which:
1092  // 1. The noalias argument is not in the set of objects from which we
1093  // definitely derive.
1094  // 2. The noalias argument has not yet been captured.
1095  // An arbitrary function that might load pointers could see captured
1096  // noalias arguments via other noalias arguments or globals, and so we
1097  // must always check for prior capture.
1098  for (const Argument *A : NoAliasArgs) {
1099  if (!ObjSet.count(A) && (!CanDeriveViaCapture ||
1100  // It might be tempting to skip the
1101  // PointerMayBeCapturedBefore check if
1102  // A->hasNoCaptureAttr() is true, but this is
1103  // incorrect because nocapture only guarantees
1104  // that no copies outlive the function, not
1105  // that the value cannot be locally captured.
1107  /* ReturnCaptures */ false,
1108  /* StoreCaptures */ false, I, &DT)))
1109  NoAliases.push_back(NewScopes[A]);
1110  }
1111 
1112  if (!NoAliases.empty())
1116  MDNode::get(CalledFunc->getContext(), NoAliases)));
1117 
1118  // Next, we want to figure out all of the sets to which we might belong.
1119  // We might belong to a set if the noalias argument is in the set of
1120  // underlying objects. If there is some non-noalias argument in our list
1121  // of underlying objects, then we cannot add a scope because the fact
1122  // that some access does not alias with any set of our noalias arguments
1123  // cannot itself guarantee that it does not alias with this access
1124  // (because there is some pointer of unknown origin involved and the
1125  // other access might also depend on this pointer). We also cannot add
1126  // scopes to arbitrary functions unless we know they don't access any
1127  // non-parameter pointer-values.
1128  bool CanAddScopes = !UsesAliasingPtr;
1129  if (CanAddScopes && IsFuncCall)
1130  CanAddScopes = IsArgMemOnlyCall;
1131 
1132  if (CanAddScopes)
1133  for (const Argument *A : NoAliasArgs) {
1134  if (ObjSet.count(A))
1135  Scopes.push_back(NewScopes[A]);
1136  }
1137 
1138  if (!Scopes.empty())
1139  NI->setMetadata(
1142  MDNode::get(CalledFunc->getContext(), Scopes)));
1143  }
1144  }
1145 }
1146 
1147 /// If the inlined function has non-byval align arguments, then
1148 /// add @llvm.assume-based alignment assumptions to preserve this information.
1151  return;
1152 
1153  AssumptionCache *AC = &(*IFI.GetAssumptionCache)(*CS.getCaller());
1154  auto &DL = CS.getCaller()->getParent()->getDataLayout();
1155 
1156  // To avoid inserting redundant assumptions, we should check for assumptions
1157  // already in the caller. To do this, we might need a DT of the caller.
1158  DominatorTree DT;
1159  bool DTCalculated = false;
1160 
1161  Function *CalledFunc = CS.getCalledFunction();
1162  for (Argument &Arg : CalledFunc->args()) {
1163  unsigned Align = Arg.getType()->isPointerTy() ? Arg.getParamAlignment() : 0;
1164  if (Align && !Arg.hasByValOrInAllocaAttr() && !Arg.hasNUses(0)) {
1165  if (!DTCalculated) {
1166  DT.recalculate(*CS.getCaller());
1167  DTCalculated = true;
1168  }
1169 
1170  // If we can already prove the asserted alignment in the context of the
1171  // caller, then don't bother inserting the assumption.
1172  Value *ArgVal = CS.getArgument(Arg.getArgNo());
1173  if (getKnownAlignment(ArgVal, DL, CS.getInstruction(), AC, &DT) >= Align)
1174  continue;
1175 
1176  CallInst *NewAsmp = IRBuilder<>(CS.getInstruction())
1177  .CreateAlignmentAssumption(DL, ArgVal, Align);
1178  AC->registerAssumption(NewAsmp);
1179  }
1180  }
1181 }
1182 
1183 /// Once we have cloned code over from a callee into the caller,
1184 /// update the specified callgraph to reflect the changes we made.
1185 /// Note that it's possible that not all code was copied over, so only
1186 /// some edges of the callgraph may remain.
1188  Function::iterator FirstNewBlock,
1189  ValueToValueMapTy &VMap,
1190  InlineFunctionInfo &IFI) {
1191  CallGraph &CG = *IFI.CG;
1192  const Function *Caller = CS.getCaller();
1193  const Function *Callee = CS.getCalledFunction();
1194  CallGraphNode *CalleeNode = CG[Callee];
1195  CallGraphNode *CallerNode = CG[Caller];
1196 
1197  // Since we inlined some uninlined call sites in the callee into the caller,
1198  // add edges from the caller to all of the callees of the callee.
1199  CallGraphNode::iterator I = CalleeNode->begin(), E = CalleeNode->end();
1200 
1201  // Consider the case where CalleeNode == CallerNode.
1203  if (CalleeNode == CallerNode) {
1204  CallCache.assign(I, E);
1205  I = CallCache.begin();
1206  E = CallCache.end();
1207  }
1208 
1209  for (; I != E; ++I) {
1210  const Value *OrigCall = I->first;
1211 
1212  ValueToValueMapTy::iterator VMI = VMap.find(OrigCall);
1213  // Only copy the edge if the call was inlined!
1214  if (VMI == VMap.end() || VMI->second == nullptr)
1215  continue;
1216 
1217  // If the call was inlined, but then constant folded, there is no edge to
1218  // add. Check for this case.
1219  Instruction *NewCall = dyn_cast<Instruction>(VMI->second);
1220  if (!NewCall)
1221  continue;
1222 
1223  // We do not treat intrinsic calls like real function calls because we
1224  // expect them to become inline code; do not add an edge for an intrinsic.
1225  CallSite CS = CallSite(NewCall);
1226  if (CS && CS.getCalledFunction() && CS.getCalledFunction()->isIntrinsic())
1227  continue;
1228 
1229  // Remember that this call site got inlined for the client of
1230  // InlineFunction.
1231  IFI.InlinedCalls.push_back(NewCall);
1232 
1233  // It's possible that inlining the callsite will cause it to go from an
1234  // indirect to a direct call by resolving a function pointer. If this
1235  // happens, set the callee of the new call site to a more precise
1236  // destination. This can also happen if the call graph node of the caller
1237  // was just unnecessarily imprecise.
1238  if (!I->second->getFunction())
1239  if (Function *F = CallSite(NewCall).getCalledFunction()) {
1240  // Indirect call site resolved to direct call.
1241  CallerNode->addCalledFunction(CallSite(NewCall), CG[F]);
1242 
1243  continue;
1244  }
1245 
1246  CallerNode->addCalledFunction(CallSite(NewCall), I->second);
1247  }
1248 
1249  // Update the call graph by deleting the edge from Callee to Caller. We must
1250  // do this after the loop above in case Caller and Callee are the same.
1251  CallerNode->removeCallEdgeFor(CS);
1252 }
1253 
1254 static void HandleByValArgumentInit(Value *Dst, Value *Src, Module *M,
1255  BasicBlock *InsertBlock,
1256  InlineFunctionInfo &IFI) {
1257  Type *AggTy = cast<PointerType>(Src->getType())->getElementType();
1258  IRBuilder<> Builder(InsertBlock, InsertBlock->begin());
1259 
1260  Value *Size = Builder.getInt64(M->getDataLayout().getTypeStoreSize(AggTy));
1261 
1262  // Always generate a memcpy of alignment 1 here because we don't know
1263  // the alignment of the src pointer. Other optimizations can infer
1264  // better alignment.
1265  Builder.CreateMemCpy(Dst, /*DstAlign*/1, Src, /*SrcAlign*/1, Size);
1266 }
1267 
1268 /// When inlining a call site that has a byval argument,
1269 /// we have to make the implicit memcpy explicit by adding it.
1271  const Function *CalledFunc,
1272  InlineFunctionInfo &IFI,
1273  unsigned ByValAlignment) {
1274  PointerType *ArgTy = cast<PointerType>(Arg->getType());
1275  Type *AggTy = ArgTy->getElementType();
1276 
1277  Function *Caller = TheCall->getFunction();
1278  const DataLayout &DL = Caller->getParent()->getDataLayout();
1279 
1280  // If the called function is readonly, then it could not mutate the caller's
1281  // copy of the byval'd memory. In this case, it is safe to elide the copy and
1282  // temporary.
1283  if (CalledFunc->onlyReadsMemory()) {
1284  // If the byval argument has a specified alignment that is greater than the
1285  // passed in pointer, then we either have to round up the input pointer or
1286  // give up on this transformation.
1287  if (ByValAlignment <= 1) // 0 = unspecified, 1 = no particular alignment.
1288  return Arg;
1289 
1290  AssumptionCache *AC =
1291  IFI.GetAssumptionCache ? &(*IFI.GetAssumptionCache)(*Caller) : nullptr;
1292 
1293  // If the pointer is already known to be sufficiently aligned, or if we can
1294  // round it up to a larger alignment, then we don't need a temporary.
1295  if (getOrEnforceKnownAlignment(Arg, ByValAlignment, DL, TheCall, AC) >=
1296  ByValAlignment)
1297  return Arg;
1298 
1299  // Otherwise, we have to make a memcpy to get a safe alignment. This is bad
1300  // for code quality, but rarely happens and is required for correctness.
1301  }
1302 
1303  // Create the alloca. If we have DataLayout, use nice alignment.
1304  unsigned Align = DL.getPrefTypeAlignment(AggTy);
1305 
1306  // If the byval had an alignment specified, we *must* use at least that
1307  // alignment, as it is required by the byval argument (and uses of the
1308  // pointer inside the callee).
1309  Align = std::max(Align, ByValAlignment);
1310 
1311  Value *NewAlloca = new AllocaInst(AggTy, DL.getAllocaAddrSpace(),
1312  nullptr, Align, Arg->getName(),
1313  &*Caller->begin()->begin());
1314  IFI.StaticAllocas.push_back(cast<AllocaInst>(NewAlloca));
1315 
1316  // Uses of the argument in the function should use our new alloca
1317  // instead.
1318  return NewAlloca;
1319 }
1320 
1321 // Check whether this Value is used by a lifetime intrinsic.
1323  for (User *U : V->users())
1324  if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(U))
1325  if (II->isLifetimeStartOrEnd())
1326  return true;
1327  return false;
1328 }
1329 
1330 // Check whether the given alloca already has
1331 // lifetime.start or lifetime.end intrinsics.
1332 static bool hasLifetimeMarkers(AllocaInst *AI) {
1333  Type *Ty = AI->getType();
1334  Type *Int8PtrTy = Type::getInt8PtrTy(Ty->getContext(),
1335  Ty->getPointerAddressSpace());
1336  if (Ty == Int8PtrTy)
1337  return isUsedByLifetimeMarker(AI);
1338 
1339  // Do a scan to find all the casts to i8*.
1340  for (User *U : AI->users()) {
1341  if (U->getType() != Int8PtrTy) continue;
1342  if (U->stripPointerCasts() != AI) continue;
1343  if (isUsedByLifetimeMarker(U))
1344  return true;
1345  }
1346  return false;
1347 }
1348 
1349 /// Return the result of AI->isStaticAlloca() if AI were moved to the entry
1350 /// block. Allocas used in inalloca calls and allocas of dynamic array size
1351 /// cannot be static.
1352 static bool allocaWouldBeStaticInEntry(const AllocaInst *AI ) {
1353  return isa<Constant>(AI->getArraySize()) && !AI->isUsedWithInAlloca();
1354 }
1355 
1356 /// Update inlined instructions' line numbers to
1357 /// to encode location where these instructions are inlined.
1359  Instruction *TheCall, bool CalleeHasDebugInfo) {
1360  const DebugLoc &TheCallDL = TheCall->getDebugLoc();
1361  if (!TheCallDL)
1362  return;
1363 
1364  auto &Ctx = Fn->getContext();
1365  DILocation *InlinedAtNode = TheCallDL;
1366 
1367  // Create a unique call site, not to be confused with any other call from the
1368  // same location.
1369  InlinedAtNode = DILocation::getDistinct(
1370  Ctx, InlinedAtNode->getLine(), InlinedAtNode->getColumn(),
1371  InlinedAtNode->getScope(), InlinedAtNode->getInlinedAt());
1372 
1373  // Cache the inlined-at nodes as they're built so they are reused, without
1374  // this every instruction's inlined-at chain would become distinct from each
1375  // other.
1377 
1378  for (; FI != Fn->end(); ++FI) {
1379  for (BasicBlock::iterator BI = FI->begin(), BE = FI->end();
1380  BI != BE; ++BI) {
1381  if (DebugLoc DL = BI->getDebugLoc()) {
1382  auto IA = DebugLoc::appendInlinedAt(DL, InlinedAtNode, BI->getContext(),
1383  IANodes);
1384  auto IDL = DebugLoc::get(DL.getLine(), DL.getCol(), DL.getScope(), IA);
1385  BI->setDebugLoc(IDL);
1386  continue;
1387  }
1388 
1389  if (CalleeHasDebugInfo)
1390  continue;
1391 
1392  // If the inlined instruction has no line number, make it look as if it
1393  // originates from the call location. This is important for
1394  // ((__always_inline__, __nodebug__)) functions which must use caller
1395  // location for all instructions in their function body.
1396 
1397  // Don't update static allocas, as they may get moved later.
1398  if (auto *AI = dyn_cast<AllocaInst>(BI))
1400  continue;
1401 
1402  BI->setDebugLoc(TheCallDL);
1403  }
1404  }
1405 }
1406 
1407 /// Update the block frequencies of the caller after a callee has been inlined.
1408 ///
1409 /// Each block cloned into the caller has its block frequency scaled by the
1410 /// ratio of CallSiteFreq/CalleeEntryFreq. This ensures that the cloned copy of
1411 /// callee's entry block gets the same frequency as the callsite block and the
1412 /// relative frequencies of all cloned blocks remain the same after cloning.
1413 static void updateCallerBFI(BasicBlock *CallSiteBlock,
1414  const ValueToValueMapTy &VMap,
1415  BlockFrequencyInfo *CallerBFI,
1416  BlockFrequencyInfo *CalleeBFI,
1417  const BasicBlock &CalleeEntryBlock) {
1419  for (auto const &Entry : VMap) {
1420  if (!isa<BasicBlock>(Entry.first) || !Entry.second)
1421  continue;
1422  auto *OrigBB = cast<BasicBlock>(Entry.first);
1423  auto *ClonedBB = cast<BasicBlock>(Entry.second);
1424  uint64_t Freq = CalleeBFI->getBlockFreq(OrigBB).getFrequency();
1425  if (!ClonedBBs.insert(ClonedBB).second) {
1426  // Multiple blocks in the callee might get mapped to one cloned block in
1427  // the caller since we prune the callee as we clone it. When that happens,
1428  // we want to use the maximum among the original blocks' frequencies.
1429  uint64_t NewFreq = CallerBFI->getBlockFreq(ClonedBB).getFrequency();
1430  if (NewFreq > Freq)
1431  Freq = NewFreq;
1432  }
1433  CallerBFI->setBlockFreq(ClonedBB, Freq);
1434  }
1435  BasicBlock *EntryClone = cast<BasicBlock>(VMap.lookup(&CalleeEntryBlock));
1436  CallerBFI->setBlockFreqAndScale(
1437  EntryClone, CallerBFI->getBlockFreq(CallSiteBlock).getFrequency(),
1438  ClonedBBs);
1439 }
1440 
1441 /// Update the branch metadata for cloned call instructions.
1442 static void updateCallProfile(Function *Callee, const ValueToValueMapTy &VMap,
1443  const ProfileCount &CalleeEntryCount,
1444  const Instruction *TheCall,
1445  ProfileSummaryInfo *PSI,
1446  BlockFrequencyInfo *CallerBFI) {
1447  if (!CalleeEntryCount.hasValue() || CalleeEntryCount.isSynthetic() ||
1448  CalleeEntryCount.getCount() < 1)
1449  return;
1450  auto CallSiteCount = PSI ? PSI->getProfileCount(TheCall, CallerBFI) : None;
1451  uint64_t CallCount =
1452  std::min(CallSiteCount.hasValue() ? CallSiteCount.getValue() : 0,
1453  CalleeEntryCount.getCount());
1454 
1455  for (auto const &Entry : VMap)
1456  if (isa<CallInst>(Entry.first))
1457  if (auto *CI = dyn_cast_or_null<CallInst>(Entry.second))
1458  CI->updateProfWeight(CallCount, CalleeEntryCount.getCount());
1459  for (BasicBlock &BB : *Callee)
1460  // No need to update the callsite if it is pruned during inlining.
1461  if (VMap.count(&BB))
1462  for (Instruction &I : BB)
1463  if (CallInst *CI = dyn_cast<CallInst>(&I))
1464  CI->updateProfWeight(CalleeEntryCount.getCount() - CallCount,
1465  CalleeEntryCount.getCount());
1466 }
1467 
1468 /// Update the entry count of callee after inlining.
1469 ///
1470 /// The callsite's block count is subtracted from the callee's function entry
1471 /// count.
1472 static void updateCalleeCount(BlockFrequencyInfo *CallerBFI, BasicBlock *CallBB,
1473  Instruction *CallInst, Function *Callee,
1474  ProfileSummaryInfo *PSI) {
1475  // If the callee has a original count of N, and the estimated count of
1476  // callsite is M, the new callee count is set to N - M. M is estimated from
1477  // the caller's entry count, its entry block frequency and the block frequency
1478  // of the callsite.
1479  auto CalleeCount = Callee->getEntryCount();
1480  if (!CalleeCount.hasValue() || !PSI)
1481  return;
1482  auto CallCount = PSI->getProfileCount(CallInst, CallerBFI);
1483  if (!CallCount.hasValue())
1484  return;
1485  // Since CallSiteCount is an estimate, it could exceed the original callee
1486  // count and has to be set to 0.
1487  if (CallCount.getValue() > CalleeCount.getCount())
1488  CalleeCount.setCount(0);
1489  else
1490  CalleeCount.setCount(CalleeCount.getCount() - CallCount.getValue());
1491  Callee->setEntryCount(CalleeCount);
1492 }
1493 
1494 /// This function inlines the called function into the basic block of the
1495 /// caller. This returns false if it is not possible to inline this call.
1496 /// The program is still in a well defined state if this occurs though.
1497 ///
1498 /// Note that this only does one level of inlining. For example, if the
1499 /// instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now
1500 /// exists in the instruction stream. Similarly this will inline a recursive
1501 /// function by one level.
1503  AAResults *CalleeAAR,
1504  bool InsertLifetime,
1505  Function *ForwardVarArgsTo) {
1506  Instruction *TheCall = CS.getInstruction();
1507  assert(TheCall->getParent() && TheCall->getFunction()
1508  && "Instruction not in function!");
1509 
1510  // If IFI has any state in it, zap it before we fill it in.
1511  IFI.reset();
1512 
1513  Function *CalledFunc = CS.getCalledFunction();
1514  if (!CalledFunc || // Can't inline external function or indirect
1515  CalledFunc->isDeclaration()) // call!
1516  return "external or indirect";
1517 
1518  // The inliner does not know how to inline through calls with operand bundles
1519  // in general ...
1520  if (CS.hasOperandBundles()) {
1521  for (int i = 0, e = CS.getNumOperandBundles(); i != e; ++i) {
1523  // ... but it knows how to inline through "deopt" operand bundles ...
1524  if (Tag == LLVMContext::OB_deopt)
1525  continue;
1526  // ... and "funclet" operand bundles.
1527  if (Tag == LLVMContext::OB_funclet)
1528  continue;
1529 
1530  return "unsupported operand bundle";
1531  }
1532  }
1533 
1534  // If the call to the callee cannot throw, set the 'nounwind' flag on any
1535  // calls that we inline.
1536  bool MarkNoUnwind = CS.doesNotThrow();
1537 
1538  BasicBlock *OrigBB = TheCall->getParent();
1539  Function *Caller = OrigBB->getParent();
1540 
1541  // GC poses two hazards to inlining, which only occur when the callee has GC:
1542  // 1. If the caller has no GC, then the callee's GC must be propagated to the
1543  // caller.
1544  // 2. If the caller has a differing GC, it is invalid to inline.
1545  if (CalledFunc->hasGC()) {
1546  if (!Caller->hasGC())
1547  Caller->setGC(CalledFunc->getGC());
1548  else if (CalledFunc->getGC() != Caller->getGC())
1549  return "incompatible GC";
1550  }
1551 
1552  // Get the personality function from the callee if it contains a landing pad.
1553  Constant *CalledPersonality =
1554  CalledFunc->hasPersonalityFn()
1555  ? CalledFunc->getPersonalityFn()->stripPointerCasts()
1556  : nullptr;
1557 
1558  // Find the personality function used by the landing pads of the caller. If it
1559  // exists, then check to see that it matches the personality function used in
1560  // the callee.
1561  Constant *CallerPersonality =
1562  Caller->hasPersonalityFn()
1563  ? Caller->getPersonalityFn()->stripPointerCasts()
1564  : nullptr;
1565  if (CalledPersonality) {
1566  if (!CallerPersonality)
1567  Caller->setPersonalityFn(CalledPersonality);
1568  // If the personality functions match, then we can perform the
1569  // inlining. Otherwise, we can't inline.
1570  // TODO: This isn't 100% true. Some personality functions are proper
1571  // supersets of others and can be used in place of the other.
1572  else if (CalledPersonality != CallerPersonality)
1573  return "incompatible personality";
1574  }
1575 
1576  // We need to figure out which funclet the callsite was in so that we may
1577  // properly nest the callee.
1578  Instruction *CallSiteEHPad = nullptr;
1579  if (CallerPersonality) {
1580  EHPersonality Personality = classifyEHPersonality(CallerPersonality);
1581  if (isScopedEHPersonality(Personality)) {
1582  Optional<OperandBundleUse> ParentFunclet =
1584  if (ParentFunclet)
1585  CallSiteEHPad = cast<FuncletPadInst>(ParentFunclet->Inputs.front());
1586 
1587  // OK, the inlining site is legal. What about the target function?
1588 
1589  if (CallSiteEHPad) {
1590  if (Personality == EHPersonality::MSVC_CXX) {
1591  // The MSVC personality cannot tolerate catches getting inlined into
1592  // cleanup funclets.
1593  if (isa<CleanupPadInst>(CallSiteEHPad)) {
1594  // Ok, the call site is within a cleanuppad. Let's check the callee
1595  // for catchpads.
1596  for (const BasicBlock &CalledBB : *CalledFunc) {
1597  if (isa<CatchSwitchInst>(CalledBB.getFirstNonPHI()))
1598  return "catch in cleanup funclet";
1599  }
1600  }
1601  } else if (isAsynchronousEHPersonality(Personality)) {
1602  // SEH is even less tolerant, there may not be any sort of exceptional
1603  // funclet in the callee.
1604  for (const BasicBlock &CalledBB : *CalledFunc) {
1605  if (CalledBB.isEHPad())
1606  return "SEH in cleanup funclet";
1607  }
1608  }
1609  }
1610  }
1611  }
1612 
1613  // Determine if we are dealing with a call in an EHPad which does not unwind
1614  // to caller.
1615  bool EHPadForCallUnwindsLocally = false;
1616  if (CallSiteEHPad && CS.isCall()) {
1617  UnwindDestMemoTy FuncletUnwindMap;
1618  Value *CallSiteUnwindDestToken =
1619  getUnwindDestToken(CallSiteEHPad, FuncletUnwindMap);
1620 
1621  EHPadForCallUnwindsLocally =
1622  CallSiteUnwindDestToken &&
1623  !isa<ConstantTokenNone>(CallSiteUnwindDestToken);
1624  }
1625 
1626  // Get an iterator to the last basic block in the function, which will have
1627  // the new function inlined after it.
1628  Function::iterator LastBlock = --Caller->end();
1629 
1630  // Make sure to capture all of the return instructions from the cloned
1631  // function.
1633  ClonedCodeInfo InlinedFunctionInfo;
1634  Function::iterator FirstNewBlock;
1635 
1636  { // Scope to destroy VMap after cloning.
1637  ValueToValueMapTy VMap;
1638  // Keep a list of pair (dst, src) to emit byval initializations.
1640 
1641  auto &DL = Caller->getParent()->getDataLayout();
1642 
1643  // Calculate the vector of arguments to pass into the function cloner, which
1644  // matches up the formal to the actual argument values.
1646  unsigned ArgNo = 0;
1647  for (Function::arg_iterator I = CalledFunc->arg_begin(),
1648  E = CalledFunc->arg_end(); I != E; ++I, ++AI, ++ArgNo) {
1649  Value *ActualArg = *AI;
1650 
1651  // When byval arguments actually inlined, we need to make the copy implied
1652  // by them explicit. However, we don't do this if the callee is readonly
1653  // or readnone, because the copy would be unneeded: the callee doesn't
1654  // modify the struct.
1655  if (CS.isByValArgument(ArgNo)) {
1656  ActualArg = HandleByValArgument(ActualArg, TheCall, CalledFunc, IFI,
1657  CalledFunc->getParamAlignment(ArgNo));
1658  if (ActualArg != *AI)
1659  ByValInit.push_back(std::make_pair(ActualArg, (Value*) *AI));
1660  }
1661 
1662  VMap[&*I] = ActualArg;
1663  }
1664 
1665  // Add alignment assumptions if necessary. We do this before the inlined
1666  // instructions are actually cloned into the caller so that we can easily
1667  // check what will be known at the start of the inlined code.
1668  AddAlignmentAssumptions(CS, IFI);
1669 
1670  // We want the inliner to prune the code as it copies. We would LOVE to
1671  // have no dead or constant instructions leftover after inlining occurs
1672  // (which can happen, e.g., because an argument was constant), but we'll be
1673  // happy with whatever the cloner can do.
1674  CloneAndPruneFunctionInto(Caller, CalledFunc, VMap,
1675  /*ModuleLevelChanges=*/false, Returns, ".i",
1676  &InlinedFunctionInfo, TheCall);
1677  // Remember the first block that is newly cloned over.
1678  FirstNewBlock = LastBlock; ++FirstNewBlock;
1679 
1680  if (IFI.CallerBFI != nullptr && IFI.CalleeBFI != nullptr)
1681  // Update the BFI of blocks cloned into the caller.
1682  updateCallerBFI(OrigBB, VMap, IFI.CallerBFI, IFI.CalleeBFI,
1683  CalledFunc->front());
1684 
1685  updateCallProfile(CalledFunc, VMap, CalledFunc->getEntryCount(), TheCall,
1686  IFI.PSI, IFI.CallerBFI);
1687  // Update the profile count of callee.
1688  updateCalleeCount(IFI.CallerBFI, OrigBB, TheCall, CalledFunc, IFI.PSI);
1689 
1690  // Inject byval arguments initialization.
1691  for (std::pair<Value*, Value*> &Init : ByValInit)
1692  HandleByValArgumentInit(Init.first, Init.second, Caller->getParent(),
1693  &*FirstNewBlock, IFI);
1694 
1695  Optional<OperandBundleUse> ParentDeopt =
1697  if (ParentDeopt) {
1699 
1700  for (auto &VH : InlinedFunctionInfo.OperandBundleCallSites) {
1701  Instruction *I = dyn_cast_or_null<Instruction>(VH);
1702  if (!I) continue; // instruction was DCE'd or RAUW'ed to undef
1703 
1704  OpDefs.clear();
1705 
1706  CallSite ICS(I);
1707  OpDefs.reserve(ICS.getNumOperandBundles());
1708 
1709  for (unsigned i = 0, e = ICS.getNumOperandBundles(); i < e; ++i) {
1710  auto ChildOB = ICS.getOperandBundleAt(i);
1711  if (ChildOB.getTagID() != LLVMContext::OB_deopt) {
1712  // If the inlined call has other operand bundles, let them be
1713  OpDefs.emplace_back(ChildOB);
1714  continue;
1715  }
1716 
1717  // It may be useful to separate this logic (of handling operand
1718  // bundles) out to a separate "policy" component if this gets crowded.
1719  // Prepend the parent's deoptimization continuation to the newly
1720  // inlined call's deoptimization continuation.
1721  std::vector<Value *> MergedDeoptArgs;
1722  MergedDeoptArgs.reserve(ParentDeopt->Inputs.size() +
1723  ChildOB.Inputs.size());
1724 
1725  MergedDeoptArgs.insert(MergedDeoptArgs.end(),
1726  ParentDeopt->Inputs.begin(),
1727  ParentDeopt->Inputs.end());
1728  MergedDeoptArgs.insert(MergedDeoptArgs.end(), ChildOB.Inputs.begin(),
1729  ChildOB.Inputs.end());
1730 
1731  OpDefs.emplace_back("deopt", std::move(MergedDeoptArgs));
1732  }
1733 
1734  Instruction *NewI = nullptr;
1735  if (isa<CallInst>(I))
1736  NewI = CallInst::Create(cast<CallInst>(I), OpDefs, I);
1737  else
1738  NewI = InvokeInst::Create(cast<InvokeInst>(I), OpDefs, I);
1739 
1740  // Note: the RAUW does the appropriate fixup in VMap, so we need to do
1741  // this even if the call returns void.
1742  I->replaceAllUsesWith(NewI);
1743 
1744  VH = nullptr;
1745  I->eraseFromParent();
1746  }
1747  }
1748 
1749  // Update the callgraph if requested.
1750  if (IFI.CG)
1751  UpdateCallGraphAfterInlining(CS, FirstNewBlock, VMap, IFI);
1752 
1753  // For 'nodebug' functions, the associated DISubprogram is always null.
1754  // Conservatively avoid propagating the callsite debug location to
1755  // instructions inlined from a function whose DISubprogram is not null.
1756  fixupLineNumbers(Caller, FirstNewBlock, TheCall,
1757  CalledFunc->getSubprogram() != nullptr);
1758 
1759  // Clone existing noalias metadata if necessary.
1760  CloneAliasScopeMetadata(CS, VMap);
1761 
1762  // Add noalias metadata if necessary.
1763  AddAliasScopeMetadata(CS, VMap, DL, CalleeAAR);
1764 
1765  // Propagate llvm.mem.parallel_loop_access if necessary.
1767 
1768  // Register any cloned assumptions.
1769  if (IFI.GetAssumptionCache)
1770  for (BasicBlock &NewBlock :
1771  make_range(FirstNewBlock->getIterator(), Caller->end()))
1772  for (Instruction &I : NewBlock) {
1773  if (auto *II = dyn_cast<IntrinsicInst>(&I))
1774  if (II->getIntrinsicID() == Intrinsic::assume)
1775  (*IFI.GetAssumptionCache)(*Caller).registerAssumption(II);
1776  }
1777  }
1778 
1779  // If there are any alloca instructions in the block that used to be the entry
1780  // block for the callee, move them to the entry block of the caller. First
1781  // calculate which instruction they should be inserted before. We insert the
1782  // instructions at the end of the current alloca list.
1783  {
1784  BasicBlock::iterator InsertPoint = Caller->begin()->begin();
1785  for (BasicBlock::iterator I = FirstNewBlock->begin(),
1786  E = FirstNewBlock->end(); I != E; ) {
1787  AllocaInst *AI = dyn_cast<AllocaInst>(I++);
1788  if (!AI) continue;
1789 
1790  // If the alloca is now dead, remove it. This often occurs due to code
1791  // specialization.
1792  if (AI->use_empty()) {
1793  AI->eraseFromParent();
1794  continue;
1795  }
1796 
1797  if (!allocaWouldBeStaticInEntry(AI))
1798  continue;
1799 
1800  // Keep track of the static allocas that we inline into the caller.
1801  IFI.StaticAllocas.push_back(AI);
1802 
1803  // Scan for the block of allocas that we can move over, and move them
1804  // all at once.
1805  while (isa<AllocaInst>(I) &&
1806  allocaWouldBeStaticInEntry(cast<AllocaInst>(I))) {
1807  IFI.StaticAllocas.push_back(cast<AllocaInst>(I));
1808  ++I;
1809  }
1810 
1811  // Transfer all of the allocas over in a block. Using splice means
1812  // that the instructions aren't removed from the symbol table, then
1813  // reinserted.
1814  Caller->getEntryBlock().getInstList().splice(
1815  InsertPoint, FirstNewBlock->getInstList(), AI->getIterator(), I);
1816  }
1817  // Move any dbg.declares describing the allocas into the entry basic block.
1818  DIBuilder DIB(*Caller->getParent());
1819  for (auto &AI : IFI.StaticAllocas)
1822  }
1823 
1824  SmallVector<Value*,4> VarArgsToForward;
1825  SmallVector<AttributeSet, 4> VarArgsAttrs;
1826  for (unsigned i = CalledFunc->getFunctionType()->getNumParams();
1827  i < CS.getNumArgOperands(); i++) {
1828  VarArgsToForward.push_back(CS.getArgOperand(i));
1829  VarArgsAttrs.push_back(CS.getAttributes().getParamAttributes(i));
1830  }
1831 
1832  bool InlinedMustTailCalls = false, InlinedDeoptimizeCalls = false;
1833  if (InlinedFunctionInfo.ContainsCalls) {
1834  CallInst::TailCallKind CallSiteTailKind = CallInst::TCK_None;
1835  if (CallInst *CI = dyn_cast<CallInst>(TheCall))
1836  CallSiteTailKind = CI->getTailCallKind();
1837 
1838  // For inlining purposes, the "notail" marker is the same as no marker.
1839  if (CallSiteTailKind == CallInst::TCK_NoTail)
1840  CallSiteTailKind = CallInst::TCK_None;
1841 
1842  for (Function::iterator BB = FirstNewBlock, E = Caller->end(); BB != E;
1843  ++BB) {
1844  for (auto II = BB->begin(); II != BB->end();) {
1845  Instruction &I = *II++;
1846  CallInst *CI = dyn_cast<CallInst>(&I);
1847  if (!CI)
1848  continue;
1849 
1850  // Forward varargs from inlined call site to calls to the
1851  // ForwardVarArgsTo function, if requested, and to musttail calls.
1852  if (!VarArgsToForward.empty() &&
1853  ((ForwardVarArgsTo &&
1854  CI->getCalledFunction() == ForwardVarArgsTo) ||
1855  CI->isMustTailCall())) {
1856  // Collect attributes for non-vararg parameters.
1859  if (!Attrs.isEmpty() || !VarArgsAttrs.empty()) {
1860  for (unsigned ArgNo = 0;
1861  ArgNo < CI->getFunctionType()->getNumParams(); ++ArgNo)
1862  ArgAttrs.push_back(Attrs.getParamAttributes(ArgNo));
1863  }
1864 
1865  // Add VarArg attributes.
1866  ArgAttrs.append(VarArgsAttrs.begin(), VarArgsAttrs.end());
1867  Attrs = AttributeList::get(CI->getContext(), Attrs.getFnAttributes(),
1868  Attrs.getRetAttributes(), ArgAttrs);
1869  // Add VarArgs to existing parameters.
1870  SmallVector<Value *, 6> Params(CI->arg_operands());
1871  Params.append(VarArgsToForward.begin(), VarArgsToForward.end());
1872  CallInst *NewCI =
1874  : CI->getCalledValue(),
1875  Params, "", CI);
1876  NewCI->setDebugLoc(CI->getDebugLoc());
1877  NewCI->setAttributes(Attrs);
1878  NewCI->setCallingConv(CI->getCallingConv());
1879  CI->replaceAllUsesWith(NewCI);
1880  CI->eraseFromParent();
1881  CI = NewCI;
1882  }
1883 
1884  if (Function *F = CI->getCalledFunction())
1885  InlinedDeoptimizeCalls |=
1886  F->getIntrinsicID() == Intrinsic::experimental_deoptimize;
1887 
1888  // We need to reduce the strength of any inlined tail calls. For
1889  // musttail, we have to avoid introducing potential unbounded stack
1890  // growth. For example, if functions 'f' and 'g' are mutually recursive
1891  // with musttail, we can inline 'g' into 'f' so long as we preserve
1892  // musttail on the cloned call to 'f'. If either the inlined call site
1893  // or the cloned call site is *not* musttail, the program already has
1894  // one frame of stack growth, so it's safe to remove musttail. Here is
1895  // a table of example transformations:
1896  //
1897  // f -> musttail g -> musttail f ==> f -> musttail f
1898  // f -> musttail g -> tail f ==> f -> tail f
1899  // f -> g -> musttail f ==> f -> f
1900  // f -> g -> tail f ==> f -> f
1901  //
1902  // Inlined notail calls should remain notail calls.
1903  CallInst::TailCallKind ChildTCK = CI->getTailCallKind();
1904  if (ChildTCK != CallInst::TCK_NoTail)
1905  ChildTCK = std::min(CallSiteTailKind, ChildTCK);
1906  CI->setTailCallKind(ChildTCK);
1907  InlinedMustTailCalls |= CI->isMustTailCall();
1908 
1909  // Calls inlined through a 'nounwind' call site should be marked
1910  // 'nounwind'.
1911  if (MarkNoUnwind)
1912  CI->setDoesNotThrow();
1913  }
1914  }
1915  }
1916 
1917  // Leave lifetime markers for the static alloca's, scoping them to the
1918  // function we just inlined.
1919  if (InsertLifetime && !IFI.StaticAllocas.empty()) {
1920  IRBuilder<> builder(&FirstNewBlock->front());
1921  for (unsigned ai = 0, ae = IFI.StaticAllocas.size(); ai != ae; ++ai) {
1922  AllocaInst *AI = IFI.StaticAllocas[ai];
1923  // Don't mark swifterror allocas. They can't have bitcast uses.
1924  if (AI->isSwiftError())
1925  continue;
1926 
1927  // If the alloca is already scoped to something smaller than the whole
1928  // function then there's no need to add redundant, less accurate markers.
1929  if (hasLifetimeMarkers(AI))
1930  continue;
1931 
1932  // Try to determine the size of the allocation.
1933  ConstantInt *AllocaSize = nullptr;
1934  if (ConstantInt *AIArraySize =
1935  dyn_cast<ConstantInt>(AI->getArraySize())) {
1936  auto &DL = Caller->getParent()->getDataLayout();
1937  Type *AllocaType = AI->getAllocatedType();
1938  uint64_t AllocaTypeSize = DL.getTypeAllocSize(AllocaType);
1939  uint64_t AllocaArraySize = AIArraySize->getLimitedValue();
1940 
1941  // Don't add markers for zero-sized allocas.
1942  if (AllocaArraySize == 0)
1943  continue;
1944 
1945  // Check that array size doesn't saturate uint64_t and doesn't
1946  // overflow when it's multiplied by type size.
1947  if (AllocaArraySize != std::numeric_limits<uint64_t>::max() &&
1948  std::numeric_limits<uint64_t>::max() / AllocaArraySize >=
1949  AllocaTypeSize) {
1950  AllocaSize = ConstantInt::get(Type::getInt64Ty(AI->getContext()),
1951  AllocaArraySize * AllocaTypeSize);
1952  }
1953  }
1954 
1955  builder.CreateLifetimeStart(AI, AllocaSize);
1956  for (ReturnInst *RI : Returns) {
1957  // Don't insert llvm.lifetime.end calls between a musttail or deoptimize
1958  // call and a return. The return kills all local allocas.
1959  if (InlinedMustTailCalls &&
1961  continue;
1962  if (InlinedDeoptimizeCalls &&
1964  continue;
1965  IRBuilder<>(RI).CreateLifetimeEnd(AI, AllocaSize);
1966  }
1967  }
1968  }
1969 
1970  // If the inlined code contained dynamic alloca instructions, wrap the inlined
1971  // code with llvm.stacksave/llvm.stackrestore intrinsics.
1972  if (InlinedFunctionInfo.ContainsDynamicAllocas) {
1973  Module *M = Caller->getParent();
1974  // Get the two intrinsics we care about.
1977 
1978  // Insert the llvm.stacksave.
1979  CallInst *SavedPtr = IRBuilder<>(&*FirstNewBlock, FirstNewBlock->begin())
1980  .CreateCall(StackSave, {}, "savedstack");
1981 
1982  // Insert a call to llvm.stackrestore before any return instructions in the
1983  // inlined function.
1984  for (ReturnInst *RI : Returns) {
1985  // Don't insert llvm.stackrestore calls between a musttail or deoptimize
1986  // call and a return. The return will restore the stack pointer.
1987  if (InlinedMustTailCalls && RI->getParent()->getTerminatingMustTailCall())
1988  continue;
1989  if (InlinedDeoptimizeCalls && RI->getParent()->getTerminatingDeoptimizeCall())
1990  continue;
1991  IRBuilder<>(RI).CreateCall(StackRestore, SavedPtr);
1992  }
1993  }
1994 
1995  // If we are inlining for an invoke instruction, we must make sure to rewrite
1996  // any call instructions into invoke instructions. This is sensitive to which
1997  // funclet pads were top-level in the inlinee, so must be done before
1998  // rewriting the "parent pad" links.
1999  if (auto *II = dyn_cast<InvokeInst>(TheCall)) {
2000  BasicBlock *UnwindDest = II->getUnwindDest();
2001  Instruction *FirstNonPHI = UnwindDest->getFirstNonPHI();
2002  if (isa<LandingPadInst>(FirstNonPHI)) {
2003  HandleInlinedLandingPad(II, &*FirstNewBlock, InlinedFunctionInfo);
2004  } else {
2005  HandleInlinedEHPad(II, &*FirstNewBlock, InlinedFunctionInfo);
2006  }
2007  }
2008 
2009  // Update the lexical scopes of the new funclets and callsites.
2010  // Anything that had 'none' as its parent is now nested inside the callsite's
2011  // EHPad.
2012 
2013  if (CallSiteEHPad) {
2014  for (Function::iterator BB = FirstNewBlock->getIterator(),
2015  E = Caller->end();
2016  BB != E; ++BB) {
2017  // Add bundle operands to any top-level call sites.
2019  for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E;) {
2020  Instruction *I = &*BBI++;
2021  CallSite CS(I);
2022  if (!CS)
2023  continue;
2024 
2025  // Skip call sites which are nounwind intrinsics.
2026  auto *CalledFn =
2028  if (CalledFn && CalledFn->isIntrinsic() && CS.doesNotThrow())
2029  continue;
2030 
2031  // Skip call sites which already have a "funclet" bundle.
2033  continue;
2034 
2035  CS.getOperandBundlesAsDefs(OpBundles);
2036  OpBundles.emplace_back("funclet", CallSiteEHPad);
2037 
2038  Instruction *NewInst;
2039  if (CS.isCall())
2040  NewInst = CallInst::Create(cast<CallInst>(I), OpBundles, I);
2041  else
2042  NewInst = InvokeInst::Create(cast<InvokeInst>(I), OpBundles, I);
2043  NewInst->takeName(I);
2044  I->replaceAllUsesWith(NewInst);
2045  I->eraseFromParent();
2046 
2047  OpBundles.clear();
2048  }
2049 
2050  // It is problematic if the inlinee has a cleanupret which unwinds to
2051  // caller and we inline it into a call site which doesn't unwind but into
2052  // an EH pad that does. Such an edge must be dynamically unreachable.
2053  // As such, we replace the cleanupret with unreachable.
2054  if (auto *CleanupRet = dyn_cast<CleanupReturnInst>(BB->getTerminator()))
2055  if (CleanupRet->unwindsToCaller() && EHPadForCallUnwindsLocally)
2056  changeToUnreachable(CleanupRet, /*UseLLVMTrap=*/false);
2057 
2058  Instruction *I = BB->getFirstNonPHI();
2059  if (!I->isEHPad())
2060  continue;
2061 
2062  if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(I)) {
2063  if (isa<ConstantTokenNone>(CatchSwitch->getParentPad()))
2064  CatchSwitch->setParentPad(CallSiteEHPad);
2065  } else {
2066  auto *FPI = cast<FuncletPadInst>(I);
2067  if (isa<ConstantTokenNone>(FPI->getParentPad()))
2068  FPI->setParentPad(CallSiteEHPad);
2069  }
2070  }
2071  }
2072 
2073  if (InlinedDeoptimizeCalls) {
2074  // We need to at least remove the deoptimizing returns from the Return set,
2075  // so that the control flow from those returns does not get merged into the
2076  // caller (but terminate it instead). If the caller's return type does not
2077  // match the callee's return type, we also need to change the return type of
2078  // the intrinsic.
2079  if (Caller->getReturnType() == TheCall->getType()) {
2080  auto NewEnd = llvm::remove_if(Returns, [](ReturnInst *RI) {
2081  return RI->getParent()->getTerminatingDeoptimizeCall() != nullptr;
2082  });
2083  Returns.erase(NewEnd, Returns.end());
2084  } else {
2085  SmallVector<ReturnInst *, 8> NormalReturns;
2086  Function *NewDeoptIntrinsic = Intrinsic::getDeclaration(
2088  {Caller->getReturnType()});
2089 
2090  for (ReturnInst *RI : Returns) {
2091  CallInst *DeoptCall = RI->getParent()->getTerminatingDeoptimizeCall();
2092  if (!DeoptCall) {
2093  NormalReturns.push_back(RI);
2094  continue;
2095  }
2096 
2097  // The calling convention on the deoptimize call itself may be bogus,
2098  // since the code we're inlining may have undefined behavior (and may
2099  // never actually execute at runtime); but all
2100  // @llvm.experimental.deoptimize declarations have to have the same
2101  // calling convention in a well-formed module.
2102  auto CallingConv = DeoptCall->getCalledFunction()->getCallingConv();
2103  NewDeoptIntrinsic->setCallingConv(CallingConv);
2104  auto *CurBB = RI->getParent();
2105  RI->eraseFromParent();
2106 
2107  SmallVector<Value *, 4> CallArgs(DeoptCall->arg_begin(),
2108  DeoptCall->arg_end());
2109 
2111  DeoptCall->getOperandBundlesAsDefs(OpBundles);
2112  DeoptCall->eraseFromParent();
2113  assert(!OpBundles.empty() &&
2114  "Expected at least the deopt operand bundle");
2115 
2116  IRBuilder<> Builder(CurBB);
2117  CallInst *NewDeoptCall =
2118  Builder.CreateCall(NewDeoptIntrinsic, CallArgs, OpBundles);
2119  NewDeoptCall->setCallingConv(CallingConv);
2120  if (NewDeoptCall->getType()->isVoidTy())
2121  Builder.CreateRetVoid();
2122  else
2123  Builder.CreateRet(NewDeoptCall);
2124  }
2125 
2126  // Leave behind the normal returns so we can merge control flow.
2127  std::swap(Returns, NormalReturns);
2128  }
2129  }
2130 
2131  // Handle any inlined musttail call sites. In order for a new call site to be
2132  // musttail, the source of the clone and the inlined call site must have been
2133  // musttail. Therefore it's safe to return without merging control into the
2134  // phi below.
2135  if (InlinedMustTailCalls) {
2136  // Check if we need to bitcast the result of any musttail calls.
2137  Type *NewRetTy = Caller->getReturnType();
2138  bool NeedBitCast = !TheCall->use_empty() && TheCall->getType() != NewRetTy;
2139 
2140  // Handle the returns preceded by musttail calls separately.
2141  SmallVector<ReturnInst *, 8> NormalReturns;
2142  for (ReturnInst *RI : Returns) {
2143  CallInst *ReturnedMustTail =
2145  if (!ReturnedMustTail) {
2146  NormalReturns.push_back(RI);
2147  continue;
2148  }
2149  if (!NeedBitCast)
2150  continue;
2151 
2152  // Delete the old return and any preceding bitcast.
2153  BasicBlock *CurBB = RI->getParent();
2154  auto *OldCast = dyn_cast_or_null<BitCastInst>(RI->getReturnValue());
2155  RI->eraseFromParent();
2156  if (OldCast)
2157  OldCast->eraseFromParent();
2158 
2159  // Insert a new bitcast and return with the right type.
2160  IRBuilder<> Builder(CurBB);
2161  Builder.CreateRet(Builder.CreateBitCast(ReturnedMustTail, NewRetTy));
2162  }
2163 
2164  // Leave behind the normal returns so we can merge control flow.
2165  std::swap(Returns, NormalReturns);
2166  }
2167 
2168  // Now that all of the transforms on the inlined code have taken place but
2169  // before we splice the inlined code into the CFG and lose track of which
2170  // blocks were actually inlined, collect the call sites. We only do this if
2171  // call graph updates weren't requested, as those provide value handle based
2172  // tracking of inlined call sites instead.
2173  if (InlinedFunctionInfo.ContainsCalls && !IFI.CG) {
2174  // Otherwise just collect the raw call sites that were inlined.
2175  for (BasicBlock &NewBB :
2176  make_range(FirstNewBlock->getIterator(), Caller->end()))
2177  for (Instruction &I : NewBB)
2178  if (auto CS = CallSite(&I))
2179  IFI.InlinedCallSites.push_back(CS);
2180  }
2181 
2182  // If we cloned in _exactly one_ basic block, and if that block ends in a
2183  // return instruction, we splice the body of the inlined callee directly into
2184  // the calling basic block.
2185  if (Returns.size() == 1 && std::distance(FirstNewBlock, Caller->end()) == 1) {
2186  // Move all of the instructions right before the call.
2187  OrigBB->getInstList().splice(TheCall->getIterator(),
2188  FirstNewBlock->getInstList(),
2189  FirstNewBlock->begin(), FirstNewBlock->end());
2190  // Remove the cloned basic block.
2191  Caller->getBasicBlockList().pop_back();
2192 
2193  // If the call site was an invoke instruction, add a branch to the normal
2194  // destination.
2195  if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
2196  BranchInst *NewBr = BranchInst::Create(II->getNormalDest(), TheCall);
2197  NewBr->setDebugLoc(Returns[0]->getDebugLoc());
2198  }
2199 
2200  // If the return instruction returned a value, replace uses of the call with
2201  // uses of the returned value.
2202  if (!TheCall->use_empty()) {
2203  ReturnInst *R = Returns[0];
2204  if (TheCall == R->getReturnValue())
2205  TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
2206  else
2207  TheCall->replaceAllUsesWith(R->getReturnValue());
2208  }
2209  // Since we are now done with the Call/Invoke, we can delete it.
2210  TheCall->eraseFromParent();
2211 
2212  // Since we are now done with the return instruction, delete it also.
2213  Returns[0]->eraseFromParent();
2214 
2215  // We are now done with the inlining.
2216  return true;
2217  }
2218 
2219  // Otherwise, we have the normal case, of more than one block to inline or
2220  // multiple return sites.
2221 
2222  // We want to clone the entire callee function into the hole between the
2223  // "starter" and "ender" blocks. How we accomplish this depends on whether
2224  // this is an invoke instruction or a call instruction.
2225  BasicBlock *AfterCallBB;
2226  BranchInst *CreatedBranchToNormalDest = nullptr;
2227  if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
2228 
2229  // Add an unconditional branch to make this look like the CallInst case...
2230  CreatedBranchToNormalDest = BranchInst::Create(II->getNormalDest(), TheCall);
2231 
2232  // Split the basic block. This guarantees that no PHI nodes will have to be
2233  // updated due to new incoming edges, and make the invoke case more
2234  // symmetric to the call case.
2235  AfterCallBB =
2236  OrigBB->splitBasicBlock(CreatedBranchToNormalDest->getIterator(),
2237  CalledFunc->getName() + ".exit");
2238 
2239  } else { // It's a call
2240  // If this is a call instruction, we need to split the basic block that
2241  // the call lives in.
2242  //
2243  AfterCallBB = OrigBB->splitBasicBlock(TheCall->getIterator(),
2244  CalledFunc->getName() + ".exit");
2245  }
2246 
2247  if (IFI.CallerBFI) {
2248  // Copy original BB's block frequency to AfterCallBB
2249  IFI.CallerBFI->setBlockFreq(
2250  AfterCallBB, IFI.CallerBFI->getBlockFreq(OrigBB).getFrequency());
2251  }
2252 
2253  // Change the branch that used to go to AfterCallBB to branch to the first
2254  // basic block of the inlined function.
2255  //
2256  Instruction *Br = OrigBB->getTerminator();
2257  assert(Br && Br->getOpcode() == Instruction::Br &&
2258  "splitBasicBlock broken!");
2259  Br->setOperand(0, &*FirstNewBlock);
2260 
2261  // Now that the function is correct, make it a little bit nicer. In
2262  // particular, move the basic blocks inserted from the end of the function
2263  // into the space made by splitting the source basic block.
2264  Caller->getBasicBlockList().splice(AfterCallBB->getIterator(),
2265  Caller->getBasicBlockList(), FirstNewBlock,
2266  Caller->end());
2267 
2268  // Handle all of the return instructions that we just cloned in, and eliminate
2269  // any users of the original call/invoke instruction.
2270  Type *RTy = CalledFunc->getReturnType();
2271 
2272  PHINode *PHI = nullptr;
2273  if (Returns.size() > 1) {
2274  // The PHI node should go at the front of the new basic block to merge all
2275  // possible incoming values.
2276  if (!TheCall->use_empty()) {
2277  PHI = PHINode::Create(RTy, Returns.size(), TheCall->getName(),
2278  &AfterCallBB->front());
2279  // Anything that used the result of the function call should now use the
2280  // PHI node as their operand.
2281  TheCall->replaceAllUsesWith(PHI);
2282  }
2283 
2284  // Loop over all of the return instructions adding entries to the PHI node
2285  // as appropriate.
2286  if (PHI) {
2287  for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
2288  ReturnInst *RI = Returns[i];
2289  assert(RI->getReturnValue()->getType() == PHI->getType() &&
2290  "Ret value not consistent in function!");
2291  PHI->addIncoming(RI->getReturnValue(), RI->getParent());
2292  }
2293  }
2294 
2295  // Add a branch to the merge points and remove return instructions.
2296  DebugLoc Loc;
2297  for (unsigned i = 0, e = Returns.size(); i != e; ++i) {
2298  ReturnInst *RI = Returns[i];
2299  BranchInst* BI = BranchInst::Create(AfterCallBB, RI);
2300  Loc = RI->getDebugLoc();
2301  BI->setDebugLoc(Loc);
2302  RI->eraseFromParent();
2303  }
2304  // We need to set the debug location to *somewhere* inside the
2305  // inlined function. The line number may be nonsensical, but the
2306  // instruction will at least be associated with the right
2307  // function.
2308  if (CreatedBranchToNormalDest)
2309  CreatedBranchToNormalDest->setDebugLoc(Loc);
2310  } else if (!Returns.empty()) {
2311  // Otherwise, if there is exactly one return value, just replace anything
2312  // using the return value of the call with the computed value.
2313  if (!TheCall->use_empty()) {
2314  if (TheCall == Returns[0]->getReturnValue())
2315  TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
2316  else
2317  TheCall->replaceAllUsesWith(Returns[0]->getReturnValue());
2318  }
2319 
2320  // Update PHI nodes that use the ReturnBB to use the AfterCallBB.
2321  BasicBlock *ReturnBB = Returns[0]->getParent();
2322  ReturnBB->replaceAllUsesWith(AfterCallBB);
2323 
2324  // Splice the code from the return block into the block that it will return
2325  // to, which contains the code that was after the call.
2326  AfterCallBB->getInstList().splice(AfterCallBB->begin(),
2327  ReturnBB->getInstList());
2328 
2329  if (CreatedBranchToNormalDest)
2330  CreatedBranchToNormalDest->setDebugLoc(Returns[0]->getDebugLoc());
2331 
2332  // Delete the return instruction now and empty ReturnBB now.
2333  Returns[0]->eraseFromParent();
2334  ReturnBB->eraseFromParent();
2335  } else if (!TheCall->use_empty()) {
2336  // No returns, but something is using the return value of the call. Just
2337  // nuke the result.
2338  TheCall->replaceAllUsesWith(UndefValue::get(TheCall->getType()));
2339  }
2340 
2341  // Since we are now done with the Call/Invoke, we can delete it.
2342  TheCall->eraseFromParent();
2343 
2344  // If we inlined any musttail calls and the original return is now
2345  // unreachable, delete it. It can only contain a bitcast and ret.
2346  if (InlinedMustTailCalls && pred_begin(AfterCallBB) == pred_end(AfterCallBB))
2347  AfterCallBB->eraseFromParent();
2348 
2349  // We should always be able to fold the entry block of the function into the
2350  // single predecessor of the block...
2351  assert(cast<BranchInst>(Br)->isUnconditional() && "splitBasicBlock broken!");
2352  BasicBlock *CalleeEntry = cast<BranchInst>(Br)->getSuccessor(0);
2353 
2354  // Splice the code entry block into calling block, right before the
2355  // unconditional branch.
2356  CalleeEntry->replaceAllUsesWith(OrigBB); // Update PHI nodes
2357  OrigBB->getInstList().splice(Br->getIterator(), CalleeEntry->getInstList());
2358 
2359  // Remove the unconditional branch.
2360  OrigBB->getInstList().erase(Br);
2361 
2362  // Now we can remove the CalleeEntry block, which is now empty.
2363  Caller->getBasicBlockList().erase(CalleeEntry);
2364 
2365  // If we inserted a phi node, check to see if it has a single value (e.g. all
2366  // the entries are the same or undef). If so, remove the PHI so it doesn't
2367  // block other optimizations.
2368  if (PHI) {
2369  AssumptionCache *AC =
2370  IFI.GetAssumptionCache ? &(*IFI.GetAssumptionCache)(*Caller) : nullptr;
2371  auto &DL = Caller->getParent()->getDataLayout();
2372  if (Value *V = SimplifyInstruction(PHI, {DL, nullptr, nullptr, AC})) {
2373  PHI->replaceAllUsesWith(V);
2374  PHI->eraseFromParent();
2375  }
2376  }
2377 
2378  return true;
2379 }
bool onlyReadsMemory() const
Determine if the function does not access or only reads memory.
Definition: Function.h:468
Return a value (possibly void), from a function.
bool isIntrinsic() const
isIntrinsic - Returns true if the function&#39;s name starts with "llvm.".
Definition: Function.h:199
SymbolTableList< Instruction >::iterator eraseFromParent()
This method unlinks &#39;this&#39; from the containing basic block and deletes it.
Definition: Instruction.cpp:68
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs=false)
Notify the BasicBlock that the predecessor Pred is no longer able to reach it.
Definition: BasicBlock.cpp:302
DILocation * get() const
Get the underlying DILocation.
Definition: DebugLoc.cpp:22
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
static cl::opt< bool > EnableNoAliasConversion("enable-noalias-to-md-conversion", cl::init(true), cl::Hidden, cl::desc("Convert noalias attributes to metadata during inlining."))
unsigned getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign, const DataLayout &DL, const Instruction *CxtI=nullptr, AssumptionCache *AC=nullptr, const DominatorTree *DT=nullptr)
Try to ensure that the alignment of V is at least PrefAlign bytes.
Definition: Local.cpp:1184
static void updateCallProfile(Function *Callee, const ValueToValueMapTy &VMap, const ProfileCount &CalleeEntryCount, const Instruction *TheCall, ProfileSummaryInfo *PSI, BlockFrequencyInfo *CallerBFI)
Update the branch metadata for cloned call instructions.
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)
This class represents an incoming formal argument to a Function.
Definition: Argument.h:30
bool replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress, DIBuilder &Builder, bool DerefBefore, int Offset, bool DerefAfter)
Replaces llvm.dbg.declare instruction when the alloca it describes is replaced with a new value...
Definition: Local.cpp:1540
iterator erase(iterator where)
Definition: ilist.h:267
This class represents lattice values for constants.
Definition: AllocatorList.h:24
CallGraph * CG
If non-null, InlineFunction will update the callgraph to reflect the changes it makes.
Definition: Cloning.h:187
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:65
iterator end()
Definition: Function.h:658
an instruction that atomically checks whether a specified value is in a memory location, and, if it is, stores a new value there.
Definition: Instructions.h:529
static DebugLoc appendInlinedAt(DebugLoc DL, DILocation *InlinedAt, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode *> &Cache, bool ReplaceLast=false)
Rebuild the entire inlined-at chain for this instruction so that the top of the chain now is inlined-...
Definition: DebugLoc.cpp:83
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
std::function< AssumptionCache &(Function &)> * GetAssumptionCache
Definition: Cloning.h:188
void push_back(const T &Elt)
Definition: SmallVector.h:218
void recalculate(ParentType &Func)
recalculate - compute a dominator tree for the given function
This provides a very simple, boring adaptor for a begin and end iterator into a range type...
unsigned getParamAlignment(unsigned ArgNo) const
Extract the alignment for a call or parameter (0=unknown).
Definition: Function.h:428
Analysis providing profile information.
const CallInst * getTerminatingMustTailCall() const
Returns the call instruction marked &#39;musttail&#39; prior to the terminating return instruction of this ba...
Definition: BasicBlock.cpp:144
This class represents a function call, abstracting a target machine&#39;s calling convention.
void setGC(std::string Str)
Definition: Function.cpp:470
This file contains the declarations for metadata subclasses.
static void updateCalleeCount(BlockFrequencyInfo *CallerBFI, BasicBlock *CallBB, Instruction *CallInst, Function *Callee, ProfileSummaryInfo *PSI)
Update the entry count of callee after inlining.
A cache of @llvm.assume calls within a function.
bool isSwiftError() const
Return true if this alloca is used as a swifterror argument to a call.
Definition: Instructions.h:136
uint64_t getFrequency() const
Returns the frequency as a fixpoint number scaled by the entry frequency.
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:705
static void AddAlignmentAssumptions(CallSite CS, InlineFunctionInfo &IFI)
If the inlined function has non-byval align arguments, then add .assume-based alignment assumptions t...
Optional< uint64_t > getProfileCount(const Instruction *CallInst, BlockFrequencyInfo *BFI)
Returns the profile count for CallInst.
arg_iterator arg_end()
Definition: Function.h:680
A debug info location.
Definition: DebugLoc.h:34
Metadata node.
Definition: Metadata.h:864
F(f)
User::op_iterator arg_end()
Return the iterator pointing to the end of the argument list.
Definition: InstrTypes.h:1106
const MDOperand & getOperand(unsigned I) const
Definition: Metadata.h:1069
unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
Definition: DerivedTypes.h:503
An instruction for reading from memory.
Definition: Instructions.h:168
InlineResult InlineFunction(CallInst *C, InlineFunctionInfo &IFI, AAResults *CalleeAAR=nullptr, bool InsertLifetime=true)
This function inlines the called function into the basic block of the caller.
static void AddAliasScopeMetadata(CallSite CS, ValueToValueMapTy &VMap, const DataLayout &DL, AAResults *CalleeAAR)
If the inlined function has noalias arguments, then add new alias scopes for each noalias argument...
static IntegerType * getInt64Ty(LLVMContext &C)
Definition: Type.cpp:177
an instruction that atomically reads a memory location, combines it with another value, and then stores the result back.
Definition: Instructions.h:692
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:138
Constant * getClause(unsigned Idx) const
Get the value of the clause at index Idx.
void reserve(size_type N)
Definition: SmallVector.h:376
bool isMustTailCall() const
This class captures the data input to the InlineFunction call, and records the auxiliary results prod...
Definition: Cloning.h:174
iterator end()
Get an iterator to the end of the SetVector.
Definition: SetVector.h:93
A node in the call graph for a module.
Definition: CallGraph.h:165
Tuple of metadata.
Definition: Metadata.h:1106
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
Definition: Type.h:130
static void fixupLineNumbers(Function *Fn, Function::iterator FI, Instruction *TheCall, bool CalleeHasDebugInfo)
Update inlined instructions&#39; line numbers to to encode location where these instructions are inlined...
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
Definition: SmallPtrSet.h:344
iterator begin()
Instruction iterator methods.
Definition: BasicBlock.h:269
Function::ProfileCount ProfileCount
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition: DenseMap.h:221
void addCalledFunction(CallSite CS, CallGraphNode *M)
Adds a function to the list of functions called by this one.
Definition: CallGraph.h:233
unsigned getAllocaAddrSpace() const
Definition: DataLayout.h:258
amdgpu Simplify well known AMD library false Value Value const Twine & Name
const CallInst * getTerminatingDeoptimizeCall() const
Returns the call instruction calling @llvm.experimental.deoptimize prior to the terminating return in...
Definition: BasicBlock.cpp:175
unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap, bool PreserveLCSSA=false, DomTreeUpdater *DTU=nullptr)
Insert an unreachable instruction before the specified instruction, making it and the rest of the cod...
Definition: Local.cpp:1896
const DataLayout & getDataLayout() const
Get the data layout for the module&#39;s target platform.
Definition: Module.cpp:371
ProfileCount getEntryCount() const
Get the entry count for this function.
Definition: Function.cpp:1381
void setEntryCount(ProfileCount Count, const DenseSet< GlobalValue::GUID > *Imports=nullptr)
Set the entry count for this function.
Definition: Function.cpp:1363
iterator end()
Definition: CallGraph.h:191
static void HandleInlinedLandingPad(InvokeInst *II, BasicBlock *FirstNewBlock, ClonedCodeInfo &InlinedCodeInfo)
If we inlined an invoke site, we need to convert calls in the body of the inlined function into invok...
PointerType * getType() const
Overload to return most specific pointer type.
Definition: Instructions.h:97
TailCallKind getTailCallKind() const
A Use represents the edge between a Value definition and its users.
Definition: Use.h:56
uint32_t getTagID() const
Return the tag of this operand bundle as an integer.
Definition: InstrTypes.h:942
static void updateCallerBFI(BasicBlock *CallSiteBlock, const ValueToValueMapTy &VMap, BlockFrequencyInfo *CallerBFI, BlockFrequencyInfo *CalleeBFI, const BasicBlock &CalleeEntryBlock)
Update the block frequencies of the caller after a callee has been inlined.
ReturnInst * CreateRet(Value *V)
Create a &#39;ret <val>&#39; instruction.
Definition: IRBuilder.h:829
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition: IRBuilder.h:743
AttributeSet getRetAttributes() const
The attributes for the ret value are returned.
InstrTy * getInstruction() const
Definition: CallSite.h:92
static void CloneAliasScopeMetadata(CallSite CS, ValueToValueMapTy &VMap)
When inlining a function that contains noalias scope metadata, this metadata needs to be cloned so th...
The only memory references in this function (if it has any) are non-volatile loads from objects point...
void setBlockFreqAndScale(const BasicBlock *ReferenceBB, uint64_t Freq, SmallPtrSetImpl< BasicBlock *> &BlocksToScale)
Set the frequency of ReferenceBB to Freq and scale the frequencies of the blocks in BlocksToScale suc...
unsigned getNumClauses() const
Get the number of clauses for this landing pad.
std::vector< CallRecord > CalledFunctionsVector
Definition: CallGraph.h:172
bool isScopedEHPersonality(EHPersonality Pers)
Returns true if this personality uses scope-style EH IR instructions: catchswitch, catchpad/ret, and cleanuppad/ret.
FunctionModRefBehavior getModRefBehavior(const CallBase *Call)
Return the behavior of the given call site.
void addHandler(BasicBlock *Dest)
Add an entry to the switch instruction...
ValTy * getCalledValue() const
Return the pointer to function that is being called.
Definition: CallSite.h:100
This file provides interfaces used to build and manipulate a call graph, which is a very useful tool ...
bool doesNotThrow() const
Determine if the call cannot unwind.
Definition: InstrTypes.h:1555
static void UpdateCallGraphAfterInlining(CallSite CS, Function::iterator FirstNewBlock, ValueToValueMapTy &VMap, InlineFunctionInfo &IFI)
Once we have cloned code over from a callee into the caller, update the specified callgraph to reflec...
void CloneAndPruneFunctionInto(Function *NewFunc, const Function *OldFunc, ValueToValueMapTy &VMap, bool ModuleLevelChanges, SmallVectorImpl< ReturnInst *> &Returns, const char *NameSuffix="", ClonedCodeInfo *CodeInfo=nullptr, Instruction *TheCall=nullptr)
This works exactly like CloneFunctionInto, except that it does some simple constant prop and DCE on t...
Value * CreateBitCast(Value *V, Type *DestTy, const Twine &Name="")
Definition: IRBuilder.h:1732
static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB, ArrayRef< BasicBlock *> Preds, BranchInst *BI, bool HasLoopExit)
Update the PHI nodes in OrigBB to include the values coming from NewBB.
Type * getType() const
All values are typed, get the type of this value.
Definition: Value.h:245
std::vector< WeakTrackingVH > OperandBundleCallSites
All cloned call sites that have operand bundles attached are appended to this vector.
Definition: Cloning.h:78
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition: SetVector.h:142
LandingPadInst * getLandingPadInst() const
Get the landingpad instruction from the landing pad block (the unwind destination).
ValTy * getArgOperand(unsigned i) const
Definition: CallSite.h:297
LLVMContext & getContext() const
Definition: Metadata.h:924
FunctionModRefBehavior
Summary of how a function affects memory in the program.
AttributeSet getParamAttributes(unsigned ArgNo) const
The attributes for the argument or parameter at the given index are returned.
bool isUsedWithInAlloca() const
Return true if this alloca is used as an inalloca argument to a call.
Definition: Instructions.h:125
iterator find(const KeyT &Val)
Definition: ValueMap.h:162
iterator begin()
Get an iterator to the beginning of the SetVector.
Definition: SetVector.h:83
BlockFrequencyInfo * CalleeBFI
Definition: Cloning.h:190
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
Definition: Instruction.h:221
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
Definition: Instruction.h:126
iterator_range< User::op_iterator > arg_operands()
Definition: InstrTypes.h:1127
const std::string & getGC() const
Definition: Function.cpp:465
An instruction for storing to memory.
Definition: Instructions.h:321
bool hasPersonalityFn() const
Check whether this function has a personality function.
Definition: Function.h:702
void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition: Value.cpp:429
bool PointerMayBeCapturedBefore(const Value *V, bool ReturnCaptures, bool StoreCaptures, const Instruction *I, const DominatorTree *DT, bool IncludeI=false, OrderedBasicBlock *OBB=nullptr, unsigned MaxUsesToExplore=DefaultMaxUsesToExplore)
PointerMayBeCapturedBefore - Return true if this pointer value may be captured by the enclosing funct...
Debug location.
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
void takeName(Value *V)
Transfer the name from V to this value.
Definition: Value.cpp:291
iterator begin()
Definition: Function.h:656
InlineResult is basically true or false.
Definition: InlineCost.h:136
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree...
Definition: Dominators.h:145
amdgpu Simplify well known AMD library false Value * Callee
Function * getDeclaration(Module *M, ID id, ArrayRef< Type *> Tys=None)
Create or insert an LLVM Function declaration for an intrinsic, and return it.
Definition: Function.cpp:1020
Value * getOperand(unsigned i) const
Definition: User.h:170
Class to represent pointers.
Definition: DerivedTypes.h:467
Optional< OperandBundleUse > getOperandBundle(StringRef Name) const
Return an operand bundle by name, if present.
Definition: InstrTypes.h:1680
static BasicBlock * HandleCallsInBlockInlinedThroughInvoke(BasicBlock *BB, BasicBlock *UnwindEdge, UnwindDestMemoTy *FuncletUnwindMap=nullptr)
When we inline a basic block into an invoke, we have to turn all of the calls that can throw into inv...
bool isCall() const
Return true if a CallInst is enclosed.
Definition: CallSite.h:87
static bool isUsedByLifetimeMarker(Value *V)
iterator find(const_arg_type_t< KeyT > Val)
Definition: DenseMap.h:176
static cl::opt< bool > PreserveAlignmentAssumptions("preserve-alignment-assumptions-during-inlining", cl::init(true), cl::Hidden, cl::desc("Convert align attributes to assumptions during inlining."))
Optional< OperandBundleUse > getOperandBundle(StringRef Name) const
Definition: CallSite.h:555
bool isVoidTy() const
Return true if this is &#39;void&#39;.
Definition: Type.h:141
const BasicBlock & getEntryBlock() const
Definition: Function.h:640
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata *> MDs)
Return a temporary node.
Definition: Metadata.h:1153
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata *> MDs)
Definition: Metadata.h:1166
void setCallingConv(CallingConv::ID CC)
Definition: Function.h:217
SmallVector< CallSite, 8 > InlinedCallSites
All of the new call sites inlined into the caller.
Definition: Cloning.h:205
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:423
Type * getReturnType() const
Returns the type of the ret val.
Definition: Function.h:169
The landingpad instruction holds all of the information necessary to generate correct exception handl...
const Instruction * getFirstNonPHI() const
Returns a pointer to the first instruction in this block that is not a PHINode instruction.
Definition: BasicBlock.cpp:190
bool hasNUses(unsigned N) const
Return true if this Value has exactly N users.
Definition: Value.cpp:131
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
Definition: Instruction.h:308
uint64_t getCount() const
Definition: Function.h:272
Value * getCalledValue() const
Definition: InstrTypes.h:1174
bool hasName() const
Definition: Value.h:251
LLVM Basic Block Representation.
Definition: BasicBlock.h:58
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
DISubprogram * getSubprogram() const
Get the attached subprogram.
Definition: Metadata.cpp:1508
Conditional or Unconditional Branch instruction.
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This is an important base class in LLVM.
Definition: Constant.h:42
ArrayRef< Use > Inputs
Definition: InstrTypes.h:915
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator begin()
Definition: SmallVector.h:129
Resume the propagation of an exception.
static MDTuple * getDistinct(LLVMContext &Context, ArrayRef< Metadata *> MDs)
Definition: Metadata.h:1174
Value * getIncomingValueForBlock(const BasicBlock *BB) const
This file contains the declarations for the subclasses of Constant, which represent the different fla...
bool isPointerTy() const
True if this is an instance of PointerType.
Definition: Type.h:224
const Instruction & front() const
Definition: BasicBlock.h:281
FunctionType * getFunctionType() const
Definition: InstrTypes.h:1051
unsigned getNumParams() const
Return the number of fixed parameters this function type requires.
Definition: DerivedTypes.h:139
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
Definition: SmallPtrSet.h:371
Interval::pred_iterator pred_begin(Interval *I)
pred_begin/pred_end - define methods so that Intervals may be used just like BasicBlocks can with the...
Definition: Interval.h:113
unsigned getPrefTypeAlignment(Type *Ty) const
Returns the preferred stack/global alignment for the specified type.
Definition: DataLayout.cpp:740
EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
bool hasOperandBundles() const
Definition: CallSite.h:535
void splice(iterator where, iplist_impl &L2)
Definition: ilist.h:329
static Value * getUnwindDestTokenHelper(Instruction *EHPad, UnwindDestMemoTy &MemoMap)
Helper for getUnwindDestToken that does the descendant-ward part of the search.
ProfileSummaryInfo * PSI
Definition: Cloning.h:189
static bool hasLifetimeMarkers(AllocaInst *AI)
void setCallingConv(CallingConv::ID CC)
Definition: InstrTypes.h:1229
The only memory references in this function (if it has any) are non-volatile loads and stores from ob...
Interval::pred_iterator pred_end(Interval *I)
Definition: Interval.h:116
arg_iterator arg_begin()
Definition: Function.h:671
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
Definition: SmallPtrSet.h:382
self_iterator getIterator()
Definition: ilist_node.h:82
void setTailCallKind(TailCallKind TCK)
const Function * getFunction() const
Return the function this instruction belongs to.
Definition: Instruction.cpp:60
auto remove_if(R &&Range, UnaryPredicate P) -> decltype(adl_begin(Range))
Provide wrappers to std::remove_if which take ranges instead of having to pass begin/end explicitly...
Definition: STLExtras.h:1226
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function. ...
Definition: Function.cpp:193
static UndefValue * get(Type *T)
Static factory methods - Return an &#39;undef&#39; object of the specified type.
Definition: Constants.cpp:1415
MDNode * uniteAccessGroups(MDNode *AccGroups1, MDNode *AccGroups2)
Compute the union of two access-group lists.
const Constant * stripPointerCasts() const
Definition: Constant.h:174
const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs, and aliases.
Definition: Value.cpp:529
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
iterator erase(const_iterator CI)
Definition: SmallVector.h:445
unsigned getNumArgOperands() const
Definition: CallSite.h:293
Class to represent profile counts.
Definition: Function.h:261
const Value * getArraySize() const
Get the number of elements allocated.
Definition: Instructions.h:93
size_t size() const
Definition: SmallVector.h:53
static PointerType * getInt8PtrTy(LLVMContext &C, unsigned AS=0)
Definition: Type.cpp:220
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
Definition: Metadata.cpp:1226
Type * getAllocatedType() const
Return the type that is being allocated by the instruction.
Definition: Instructions.h:106
bool isIdentifiedFunctionLocal(const Value *V)
Return true if V is umabigously identified at the function-level.
iterator end()
Definition: ValueMap.h:142
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
static void HandleByValArgumentInit(Value *Dst, Value *Src, Module *M, BasicBlock *InsertBlock, InlineFunctionInfo &IFI)
const InstListType & getInstList() const
Return the underlying instruction list container.
Definition: BasicBlock.h:334
A SetVector that performs no allocations if smaller than a certain size.
Definition: SetVector.h:298
Iterator for intrusive lists based on ilist_node.
This is the shared class of boolean and integer constants.
Definition: Constants.h:84
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
ValTy * getArgument(unsigned ArgNo) const
Definition: CallSite.h:186
OperandBundleUse getOperandBundleAt(unsigned Index) const
Definition: CallSite.h:551
iterator end()
Definition: BasicBlock.h:271
CallingConv::ID getCallingConv() const
getCallingConv()/setCallingConv(CC) - These method get and set the calling convention of this functio...
Definition: Function.h:213
IterTy arg_begin() const
Definition: CallSite.h:571
Module.h This file contains the declarations for the Module class.
void setBlockFreq(const BasicBlock *BB, uint64_t Freq)
LLVM_NODISCARD T pop_back_val()
Definition: SmallVector.h:381
static Value * getParentPad(Value *EHPad)
Helper for getUnwindDestToken/getUnwindDestTokenHelper.
void getOperandBundlesAsDefs(SmallVectorImpl< OperandBundleDef > &Defs) const
Return the list of operand bundles attached to this instruction as a vector of OperandBundleDefs.
Definition: InstrTypes.h:1715
static cl::opt< bool > NoAliases("riscv-no-aliases", cl::desc("Disable the emission of assembler pseudo instructions"), cl::init(false), cl::Hidden)
static Value * getUnwindDestToken(Instruction *EHPad, UnwindDestMemoTy &MemoMap)
Given an EH pad, find where it unwinds.
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
If Ty is a vector type, return a Constant with a splat of the given value.
Definition: Constants.cpp:622
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=nullptr)
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
std::string utostr(uint64_t X, bool isNeg=false)
Definition: StringExtras.h:224
AttributeList getAttributes() const
Return the parameter attributes for this call.
Definition: InstrTypes.h:1244
BlockFrequency getBlockFreq(const BasicBlock *BB) const
getblockFreq - Return block frequency.
void setOperand(unsigned i, Value *Val)
Definition: User.h:175
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition: BitVector.h:941
FunctionType * getFunctionType() const
Returns the FunctionType for me.
Definition: Function.h:164
bool isCleanup() const
Return &#39;true&#39; if this landingpad instruction is a cleanup.
iterator_range< user_iterator > users()
Definition: Value.h:400
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
Definition: SmallVector.h:394
amdgpu Simplify well known AMD library false Value Value * Arg
bool ContainsCalls
This is set to true if the cloned code contains a normal call instruction.
Definition: Cloning.h:68
User::op_iterator arg_begin()
Return the iterator pointing to the beginning of the argument list.
Definition: InstrTypes.h:1100
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
SmallVector< AllocaInst *, 4 > StaticAllocas
InlineFunction fills this in with all static allocas that get copied into the caller.
Definition: Cloning.h:194
The basic data container for the call graph of a Module of IR.
Definition: CallGraph.h:74
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator end()
Definition: SmallVector.h:133
FunTy * getCaller() const
Return the caller function for this call site.
Definition: CallSite.h:267
bool hasGC() const
hasGC/getGC/setGC/clearGC - The name of the garbage collection algorithm to use during code generatio...
Definition: Function.h:349
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
Definition: Instruction.h:311
unsigned getNumOperandBundles() const
Definition: CallSite.h:531
void registerAssumption(CallInst *CI)
Add an @llvm.assume intrinsic to this function&#39;s cache.
void emplace_back(ArgTypes &&... Args)
Definition: SmallVector.h:652
static DebugLoc getDebugLoc(MachineBasicBlock::instr_iterator FirstMI, MachineBasicBlock::instr_iterator LastMI)
Return the first found DebugLoc that has a DILocation, given a range of instructions.
LLVM_NODISCARD bool empty() const
Definition: SmallVector.h:56
SmallVector< WeakTrackingVH, 8 > InlinedCalls
InlineFunction fills this in with callsites that were inlined from the callee.
Definition: Cloning.h:198
void getOperandBundlesAsDefs(SmallVectorImpl< OperandBundleDef > &Defs) const
Definition: CallSite.h:582
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore=nullptr)
CallingConv::ID getCallingConv() const
Definition: InstrTypes.h:1225
StringRef getName() const
Return a constant reference to the value&#39;s name.
Definition: Value.cpp:214
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation.
Definition: InstrTypes.h:1181
const Function * getParent() const
Return the enclosing method, or null if none.
Definition: BasicBlock.h:107
static MDNode * concatenate(MDNode *A, MDNode *B)
Methods for metadata merging.
Definition: Metadata.cpp:896
static void PropagateParallelLoopAccessMetadata(CallSite CS, ValueToValueMapTy &VMap)
When inlining a call site that has !llvm.mem.parallel_loop_access or llvm.access.group metadata...
SymbolTableList< BasicBlock >::iterator eraseFromParent()
Unlink &#39;this&#39; from the containing function and delete it.
Definition: BasicBlock.cpp:115
#define I(x, y, z)
Definition: MD5.cpp:58
bool empty() const
Determine if the SetVector is empty or not.
Definition: SetVector.h:73
bool doesNotThrow() const
Determine if the call cannot unwind.
Definition: CallSite.h:505
static Value * HandleByValArgument(Value *Arg, Instruction *TheCall, const Function *CalledFunc, InlineFunctionInfo &IFI, unsigned ByValAlignment)
When inlining a call site that has a byval argument, we have to make the implicit memcpy explicit by ...
iterator end()
Definition: DenseMap.h:109
This struct can be used to capture information about code being cloned, while it is being cloned...
Definition: Cloning.h:66
void setAttributes(AttributeList A)
Set the parameter attributes for this call.
Definition: InstrTypes.h:1248
unsigned getKnownAlignment(Value *V, const DataLayout &DL, const Instruction *CxtI=nullptr, AssumptionCache *AC=nullptr, const DominatorTree *DT=nullptr)
Try to infer an alignment for the specified pointer.
Definition: Local.h:268
LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:323
const BasicBlockListType & getBasicBlockList() const
Get the underlying elements of the Function...
Definition: Function.h:633
uint32_t Size
Definition: Profile.cpp:47
static ConstantTokenNone * get(LLVMContext &Context)
Return the ConstantTokenNone.
Definition: Constants.cpp:1130
BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction.
Definition: BasicBlock.cpp:408
Value * getReturnValue() const
Convenience accessor. Returns null if there is no return value.
std::vector< CallRecord >::iterator iterator
Definition: CallGraph.h:184
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition: DenseMap.h:171
bool isByValArgument(unsigned ArgNo) const
Determine whether this argument is passed by value.
Definition: CallSite.h:598
bool isDeclaration() const
Return true if the primary definition of this global value is outside of the current translation unit...
Definition: Globals.cpp:206
FunTy * getCalledFunction() const
Return the function being called if this is a direct call, otherwise return null (if it&#39;s an indirect...
Definition: CallSite.h:107
void GetUnderlyingObjects(Value *V, SmallVectorImpl< Value *> &Objects, const DataLayout &DL, LoopInfo *LI=nullptr, unsigned MaxLookup=6)
This method is similar to GetUnderlyingObject except that it can look through phi and select instruct...
static bool allocaWouldBeStaticInEntry(const AllocaInst *AI)
Return the result of AI->isStaticAlloca() if AI were moved to the entry block.
BlockFrequencyInfo * CallerBFI
Definition: Cloning.h:190
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
bool ContainsDynamicAllocas
This is set to true if the cloned code contains a &#39;dynamic&#39; alloca.
Definition: Cloning.h:73
const BasicBlock & front() const
Definition: Function.h:663
bool isAsynchronousEHPersonality(EHPersonality Pers)
Returns true if this personality function catches asynchronous exceptions.
BasicBlock * getUnwindDest() const
Module * getParent()
Get the module that this global value is contained inside of...
Definition: GlobalValue.h:566
LLVM Value Representation.
Definition: Value.h:73
Constant * getPersonalityFn() const
Get the personality function associated with this function.
Definition: Function.cpp:1299
uint64_t getTypeStoreSize(Type *Ty) const
Returns the maximum number of bytes that may be overwritten by storing the specified type...
Definition: DataLayout.h:419
A vector that has set insertion semantics.
Definition: SetVector.h:41
void removeCallEdgeFor(CallSite CS)
Removes the edge in the node for the specified call site.
Definition: CallGraph.cpp:188
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, Instruction *InsertBefore=nullptr)
AttributeSet getFnAttributes() const
The function attributes are returned.
BasicBlock * changeToInvokeAndSplitBasicBlock(CallInst *CI, BasicBlock *UnwindEdge)
Convert the CallInst to InvokeInst with the specified unwind edge basic block.
Definition: Local.cpp:1962
Invoke instruction.
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
Definition: Instruction.h:573
iterator begin()
Definition: CallGraph.h:190
void setPersonalityFn(Constant *Fn)
Definition: Function.cpp:1304
AttributeList getAttributes() const
Get the parameter attributes of the call.
Definition: CallSite.h:329
static void HandleInlinedEHPad(InvokeInst *II, BasicBlock *FirstNewBlock, ClonedCodeInfo &InlinedCodeInfo)
If we inlined an invoke site, we need to convert calls in the body of the inlined function into invok...
void pop_back()
Definition: ilist.h:318
unsigned getNumOperands() const
Return number of MDNode operands.
Definition: Metadata.h:1075
bool isEmpty() const
Return true if there are no attributes.
Definition: Attributes.h:656
Value * SimplifyInstruction(Instruction *I, const SimplifyQuery &Q, OptimizationRemarkEmitter *ORE=nullptr)
See if we can compute a simplified version of this instruction.
Root of the metadata hierarchy.
Definition: Metadata.h:58
void setDoesNotThrow()
Definition: InstrTypes.h:1556
bool use_empty() const
Definition: Value.h:323
iterator begin()
Definition: ValueMap.h:141
Type * getElementType() const
Definition: DerivedTypes.h:486
static AttributeList get(LLVMContext &C, ArrayRef< std::pair< unsigned, Attribute >> Attrs)
Create an AttributeList with the specified parameters in it.
Definition: Attributes.cpp:873
iterator_range< arg_iterator > args()
Definition: Function.h:689
A wrapper class for inspecting calls to intrinsic functions.
Definition: IntrinsicInst.h:44
const BasicBlock * getParent() const
Definition: Instruction.h:67
an instruction to allocate memory on the stack
Definition: Instructions.h:60
bool mayReadOrWriteMemory() const
Return true if this instruction may read or write memory.
Definition: Instruction.h:522