LLVM 23.0.0git
InlineFunction.cpp
Go to the documentation of this file.
1//===- InlineFunction.cpp - Code to perform function inlining -------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements inlining of a function into a call site, resolving
10// parameters and the return value as appropriate.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/ADT/DenseMap.h"
15#include "llvm/ADT/STLExtras.h"
16#include "llvm/ADT/SetVector.h"
35#include "llvm/IR/Argument.h"
37#include "llvm/IR/Attributes.h"
38#include "llvm/IR/BasicBlock.h"
39#include "llvm/IR/CFG.h"
40#include "llvm/IR/Constant.h"
42#include "llvm/IR/Constants.h"
43#include "llvm/IR/DataLayout.h"
44#include "llvm/IR/DebugInfo.h"
46#include "llvm/IR/DebugLoc.h"
48#include "llvm/IR/Dominators.h"
50#include "llvm/IR/Function.h"
52#include "llvm/IR/IRBuilder.h"
53#include "llvm/IR/InlineAsm.h"
54#include "llvm/IR/InstrTypes.h"
55#include "llvm/IR/Instruction.h"
58#include "llvm/IR/Intrinsics.h"
59#include "llvm/IR/LLVMContext.h"
60#include "llvm/IR/MDBuilder.h"
61#include "llvm/IR/Metadata.h"
62#include "llvm/IR/Module.h"
65#include "llvm/IR/Type.h"
66#include "llvm/IR/User.h"
67#include "llvm/IR/Value.h"
75#include <algorithm>
76#include <cassert>
77#include <cstdint>
78#include <deque>
79#include <iterator>
80#include <optional>
81#include <string>
82#include <utility>
83#include <vector>
84
85#define DEBUG_TYPE "inline-function"
86
87using namespace llvm;
88using namespace llvm::memprof;
90
91static cl::opt<bool>
92EnableNoAliasConversion("enable-noalias-to-md-conversion", cl::init(true),
94 cl::desc("Convert noalias attributes to metadata during inlining."));
95
96static cl::opt<bool>
97 UseNoAliasIntrinsic("use-noalias-intrinsic-during-inlining", cl::Hidden,
98 cl::init(true),
99 cl::desc("Use the llvm.experimental.noalias.scope.decl "
100 "intrinsic during inlining."));
101
102// Disabled by default, because the added alignment assumptions may increase
103// compile-time and block optimizations. This option is not suitable for use
104// with frontends that emit comprehensive parameter alignment annotations.
105static cl::opt<bool>
106PreserveAlignmentAssumptions("preserve-alignment-assumptions-during-inlining",
107 cl::init(false), cl::Hidden,
108 cl::desc("Convert align attributes to assumptions during inlining."));
109
111 "max-inst-checked-for-throw-during-inlining", cl::Hidden,
112 cl::desc("the maximum number of instructions analyzed for may throw during "
113 "attribute inference in inlined body"),
114 cl::init(4));
115
116namespace {
117
118 /// A class for recording information about inlining a landing pad.
119 class LandingPadInliningInfo {
120 /// Destination of the invoke's unwind.
121 BasicBlock *OuterResumeDest;
122
123 /// Destination for the callee's resume.
124 BasicBlock *InnerResumeDest = nullptr;
125
126 /// LandingPadInst associated with the invoke.
127 LandingPadInst *CallerLPad = nullptr;
128
129 /// PHI for EH values from landingpad insts.
130 PHINode *InnerEHValuesPHI = nullptr;
131
132 SmallVector<Value*, 8> UnwindDestPHIValues;
133
134 public:
135 LandingPadInliningInfo(InvokeInst *II)
136 : OuterResumeDest(II->getUnwindDest()) {
137 // If there are PHI nodes in the unwind destination block, we need to keep
138 // track of which values came into them from the invoke before removing
139 // the edge from this block.
140 BasicBlock *InvokeBB = II->getParent();
141 BasicBlock::iterator I = OuterResumeDest->begin();
142 for (; isa<PHINode>(I); ++I) {
143 // Save the value to use for this edge.
145 UnwindDestPHIValues.push_back(PHI->getIncomingValueForBlock(InvokeBB));
146 }
147
148 CallerLPad = cast<LandingPadInst>(I);
149 }
150
151 /// The outer unwind destination is the target of
152 /// unwind edges introduced for calls within the inlined function.
153 BasicBlock *getOuterResumeDest() const {
154 return OuterResumeDest;
155 }
156
157 BasicBlock *getInnerResumeDest();
158
159 LandingPadInst *getLandingPadInst() const { return CallerLPad; }
160
161 /// Forward the 'resume' instruction to the caller's landing pad block.
162 /// When the landing pad block has only one predecessor, this is
163 /// a simple branch. When there is more than one predecessor, we need to
164 /// split the landing pad block after the landingpad instruction and jump
165 /// to there.
166 void forwardResume(ResumeInst *RI,
167 SmallPtrSetImpl<LandingPadInst*> &InlinedLPads);
168
169 /// Add incoming-PHI values to the unwind destination block for the given
170 /// basic block, using the values for the original invoke's source block.
171 void addIncomingPHIValuesFor(BasicBlock *BB) const {
172 addIncomingPHIValuesForInto(BB, OuterResumeDest);
173 }
174
175 void addIncomingPHIValuesForInto(BasicBlock *src, BasicBlock *dest) const {
176 BasicBlock::iterator I = dest->begin();
177 for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
178 PHINode *phi = cast<PHINode>(I);
179 phi->addIncoming(UnwindDestPHIValues[i], src);
180 }
181 }
182 };
183} // end anonymous namespace
184
187 while (It != BB.end()) {
188 if (auto *IntrinsicCall = dyn_cast<ConvergenceControlInst>(It)) {
189 if (IntrinsicCall->isEntry()) {
190 return IntrinsicCall;
191 }
192 }
193 It = std::next(It);
194 }
195 return nullptr;
196}
197
198/// Get or create a target for the branch from ResumeInsts.
199BasicBlock *LandingPadInliningInfo::getInnerResumeDest() {
200 if (InnerResumeDest) return InnerResumeDest;
201
202 // Split the landing pad.
203 BasicBlock::iterator SplitPoint = ++CallerLPad->getIterator();
204 InnerResumeDest =
205 OuterResumeDest->splitBasicBlock(SplitPoint,
206 OuterResumeDest->getName() + ".body");
207
208 // The number of incoming edges we expect to the inner landing pad.
209 const unsigned PHICapacity = 2;
210
211 // Create corresponding new PHIs for all the PHIs in the outer landing pad.
212 BasicBlock::iterator InsertPoint = InnerResumeDest->begin();
213 BasicBlock::iterator I = OuterResumeDest->begin();
214 for (unsigned i = 0, e = UnwindDestPHIValues.size(); i != e; ++i, ++I) {
215 PHINode *OuterPHI = cast<PHINode>(I);
216 PHINode *InnerPHI = PHINode::Create(OuterPHI->getType(), PHICapacity,
217 OuterPHI->getName() + ".lpad-body");
218 InnerPHI->insertBefore(InsertPoint);
219 OuterPHI->replaceAllUsesWith(InnerPHI);
220 InnerPHI->addIncoming(OuterPHI, OuterResumeDest);
221 }
222
223 // Create a PHI for the exception values.
224 InnerEHValuesPHI =
225 PHINode::Create(CallerLPad->getType(), PHICapacity, "eh.lpad-body");
226 InnerEHValuesPHI->insertBefore(InsertPoint);
227 CallerLPad->replaceAllUsesWith(InnerEHValuesPHI);
228 InnerEHValuesPHI->addIncoming(CallerLPad, OuterResumeDest);
229
230 // All done.
231 return InnerResumeDest;
232}
233
234/// Forward the 'resume' instruction to the caller's landing pad block.
235/// When the landing pad block has only one predecessor, this is a simple
236/// branch. When there is more than one predecessor, we need to split the
237/// landing pad block after the landingpad instruction and jump to there.
238void LandingPadInliningInfo::forwardResume(
239 ResumeInst *RI, SmallPtrSetImpl<LandingPadInst *> &InlinedLPads) {
240 BasicBlock *Dest = getInnerResumeDest();
241 BasicBlock *Src = RI->getParent();
242
243 auto *BI = UncondBrInst::Create(Dest, Src);
244 BI->setDebugLoc(RI->getDebugLoc());
245
246 // Update the PHIs in the destination. They were inserted in an order which
247 // makes this work.
248 addIncomingPHIValuesForInto(Src, Dest);
249
250 InnerEHValuesPHI->addIncoming(RI->getOperand(0), Src);
251 RI->eraseFromParent();
252}
253
254/// Helper for getUnwindDestToken/getUnwindDestTokenHelper.
255static Value *getParentPad(Value *EHPad) {
256 if (auto *FPI = dyn_cast<FuncletPadInst>(EHPad))
257 return FPI->getParentPad();
258 return cast<CatchSwitchInst>(EHPad)->getParentPad();
259}
260
262
263/// Helper for getUnwindDestToken that does the descendant-ward part of
264/// the search.
266 UnwindDestMemoTy &MemoMap) {
267 SmallVector<Instruction *, 8> Worklist(1, EHPad);
268
269 while (!Worklist.empty()) {
270 Instruction *CurrentPad = Worklist.pop_back_val();
271 // We only put pads on the worklist that aren't in the MemoMap. When
272 // we find an unwind dest for a pad we may update its ancestors, but
273 // the queue only ever contains uncles/great-uncles/etc. of CurrentPad,
274 // so they should never get updated while queued on the worklist.
275 assert(!MemoMap.count(CurrentPad));
276 Value *UnwindDestToken = nullptr;
277 if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(CurrentPad)) {
278 if (CatchSwitch->hasUnwindDest()) {
279 UnwindDestToken = &*CatchSwitch->getUnwindDest()->getFirstNonPHIIt();
280 } else {
281 // Catchswitch doesn't have a 'nounwind' variant, and one might be
282 // annotated as "unwinds to caller" when really it's nounwind (see
283 // e.g. SimplifyCFGOpt::SimplifyUnreachable), so we can't infer the
284 // parent's unwind dest from this. We can check its catchpads'
285 // descendants, since they might include a cleanuppad with an
286 // "unwinds to caller" cleanupret, which can be trusted.
287 for (auto HI = CatchSwitch->handler_begin(),
288 HE = CatchSwitch->handler_end();
289 HI != HE && !UnwindDestToken; ++HI) {
290 BasicBlock *HandlerBlock = *HI;
291 auto *CatchPad =
292 cast<CatchPadInst>(&*HandlerBlock->getFirstNonPHIIt());
293 for (User *Child : CatchPad->users()) {
294 // Intentionally ignore invokes here -- since the catchswitch is
295 // marked "unwind to caller", it would be a verifier error if it
296 // contained an invoke which unwinds out of it, so any invoke we'd
297 // encounter must unwind to some child of the catch.
298 if (!isa<CleanupPadInst>(Child) && !isa<CatchSwitchInst>(Child))
299 continue;
300
301 Instruction *ChildPad = cast<Instruction>(Child);
302 auto Memo = MemoMap.find(ChildPad);
303 if (Memo == MemoMap.end()) {
304 // Haven't figured out this child pad yet; queue it.
305 Worklist.push_back(ChildPad);
306 continue;
307 }
308 // We've already checked this child, but might have found that
309 // it offers no proof either way.
310 Value *ChildUnwindDestToken = Memo->second;
311 if (!ChildUnwindDestToken)
312 continue;
313 // We already know the child's unwind dest, which can either
314 // be ConstantTokenNone to indicate unwind to caller, or can
315 // be another child of the catchpad. Only the former indicates
316 // the unwind dest of the catchswitch.
317 if (isa<ConstantTokenNone>(ChildUnwindDestToken)) {
318 UnwindDestToken = ChildUnwindDestToken;
319 break;
320 }
321 assert(getParentPad(ChildUnwindDestToken) == CatchPad);
322 }
323 }
324 }
325 } else {
326 auto *CleanupPad = cast<CleanupPadInst>(CurrentPad);
327 for (User *U : CleanupPad->users()) {
328 if (auto *CleanupRet = dyn_cast<CleanupReturnInst>(U)) {
329 if (BasicBlock *RetUnwindDest = CleanupRet->getUnwindDest())
330 UnwindDestToken = &*RetUnwindDest->getFirstNonPHIIt();
331 else
332 UnwindDestToken = ConstantTokenNone::get(CleanupPad->getContext());
333 break;
334 }
335 Value *ChildUnwindDestToken;
336 if (auto *Invoke = dyn_cast<InvokeInst>(U)) {
337 ChildUnwindDestToken = &*Invoke->getUnwindDest()->getFirstNonPHIIt();
338 } else if (isa<CleanupPadInst>(U) || isa<CatchSwitchInst>(U)) {
339 Instruction *ChildPad = cast<Instruction>(U);
340 auto Memo = MemoMap.find(ChildPad);
341 if (Memo == MemoMap.end()) {
342 // Haven't resolved this child yet; queue it and keep searching.
343 Worklist.push_back(ChildPad);
344 continue;
345 }
346 // We've checked this child, but still need to ignore it if it
347 // had no proof either way.
348 ChildUnwindDestToken = Memo->second;
349 if (!ChildUnwindDestToken)
350 continue;
351 } else {
352 // Not a relevant user of the cleanuppad
353 continue;
354 }
355 // In a well-formed program, the child/invoke must either unwind to
356 // an(other) child of the cleanup, or exit the cleanup. In the
357 // first case, continue searching.
358 if (isa<Instruction>(ChildUnwindDestToken) &&
359 getParentPad(ChildUnwindDestToken) == CleanupPad)
360 continue;
361 UnwindDestToken = ChildUnwindDestToken;
362 break;
363 }
364 }
365 // If we haven't found an unwind dest for CurrentPad, we may have queued its
366 // children, so move on to the next in the worklist.
367 if (!UnwindDestToken)
368 continue;
369
370 // Now we know that CurrentPad unwinds to UnwindDestToken. It also exits
371 // any ancestors of CurrentPad up to but not including UnwindDestToken's
372 // parent pad. Record this in the memo map, and check to see if the
373 // original EHPad being queried is one of the ones exited.
374 Value *UnwindParent;
375 if (auto *UnwindPad = dyn_cast<Instruction>(UnwindDestToken))
376 UnwindParent = getParentPad(UnwindPad);
377 else
378 UnwindParent = nullptr;
379 bool ExitedOriginalPad = false;
380 for (Instruction *ExitedPad = CurrentPad;
381 ExitedPad && ExitedPad != UnwindParent;
382 ExitedPad = dyn_cast<Instruction>(getParentPad(ExitedPad))) {
383 // Skip over catchpads since they just follow their catchswitches.
384 if (isa<CatchPadInst>(ExitedPad))
385 continue;
386 MemoMap[ExitedPad] = UnwindDestToken;
387 ExitedOriginalPad |= (ExitedPad == EHPad);
388 }
389
390 if (ExitedOriginalPad)
391 return UnwindDestToken;
392
393 // Continue the search.
394 }
395
396 // No definitive information is contained within this funclet.
397 return nullptr;
398}
399
400/// Given an EH pad, find where it unwinds. If it unwinds to an EH pad,
401/// return that pad instruction. If it unwinds to caller, return
402/// ConstantTokenNone. If it does not have a definitive unwind destination,
403/// return nullptr.
404///
405/// This routine gets invoked for calls in funclets in inlinees when inlining
406/// an invoke. Since many funclets don't have calls inside them, it's queried
407/// on-demand rather than building a map of pads to unwind dests up front.
408/// Determining a funclet's unwind dest may require recursively searching its
409/// descendants, and also ancestors and cousins if the descendants don't provide
410/// an answer. Since most funclets will have their unwind dest immediately
411/// available as the unwind dest of a catchswitch or cleanupret, this routine
412/// searches top-down from the given pad and then up. To avoid worst-case
413/// quadratic run-time given that approach, it uses a memo map to avoid
414/// re-processing funclet trees. The callers that rewrite the IR as they go
415/// take advantage of this, for correctness, by checking/forcing rewritten
416/// pads' entries to match the original callee view.
418 UnwindDestMemoTy &MemoMap) {
419 // Catchpads unwind to the same place as their catchswitch;
420 // redirct any queries on catchpads so the code below can
421 // deal with just catchswitches and cleanuppads.
422 if (auto *CPI = dyn_cast<CatchPadInst>(EHPad))
423 EHPad = CPI->getCatchSwitch();
424
425 // Check if we've already determined the unwind dest for this pad.
426 auto Memo = MemoMap.find(EHPad);
427 if (Memo != MemoMap.end())
428 return Memo->second;
429
430 // Search EHPad and, if necessary, its descendants.
431 Value *UnwindDestToken = getUnwindDestTokenHelper(EHPad, MemoMap);
432 assert((UnwindDestToken == nullptr) != (MemoMap.count(EHPad) != 0));
433 if (UnwindDestToken)
434 return UnwindDestToken;
435
436 // No information is available for this EHPad from itself or any of its
437 // descendants. An unwind all the way out to a pad in the caller would
438 // need also to agree with the unwind dest of the parent funclet, so
439 // search up the chain to try to find a funclet with information. Put
440 // null entries in the memo map to avoid re-processing as we go up.
441 MemoMap[EHPad] = nullptr;
442#ifndef NDEBUG
444 TempMemos.insert(EHPad);
445#endif
446 Instruction *LastUselessPad = EHPad;
447 Value *AncestorToken;
448 for (AncestorToken = getParentPad(EHPad);
449 auto *AncestorPad = dyn_cast<Instruction>(AncestorToken);
450 AncestorToken = getParentPad(AncestorToken)) {
451 // Skip over catchpads since they just follow their catchswitches.
452 if (isa<CatchPadInst>(AncestorPad))
453 continue;
454 // If the MemoMap had an entry mapping AncestorPad to nullptr, since we
455 // haven't yet called getUnwindDestTokenHelper for AncestorPad in this
456 // call to getUnwindDestToken, that would mean that AncestorPad had no
457 // information in itself, its descendants, or its ancestors. If that
458 // were the case, then we should also have recorded the lack of information
459 // for the descendant that we're coming from. So assert that we don't
460 // find a null entry in the MemoMap for AncestorPad.
461 assert(!MemoMap.count(AncestorPad) || MemoMap[AncestorPad]);
462 auto AncestorMemo = MemoMap.find(AncestorPad);
463 if (AncestorMemo == MemoMap.end()) {
464 UnwindDestToken = getUnwindDestTokenHelper(AncestorPad, MemoMap);
465 } else {
466 UnwindDestToken = AncestorMemo->second;
467 }
468 if (UnwindDestToken)
469 break;
470 LastUselessPad = AncestorPad;
471 MemoMap[LastUselessPad] = nullptr;
472#ifndef NDEBUG
473 TempMemos.insert(LastUselessPad);
474#endif
475 }
476
477 // We know that getUnwindDestTokenHelper was called on LastUselessPad and
478 // returned nullptr (and likewise for EHPad and any of its ancestors up to
479 // LastUselessPad), so LastUselessPad has no information from below. Since
480 // getUnwindDestTokenHelper must investigate all downward paths through
481 // no-information nodes to prove that a node has no information like this,
482 // and since any time it finds information it records it in the MemoMap for
483 // not just the immediately-containing funclet but also any ancestors also
484 // exited, it must be the case that, walking downward from LastUselessPad,
485 // visiting just those nodes which have not been mapped to an unwind dest
486 // by getUnwindDestTokenHelper (the nullptr TempMemos notwithstanding, since
487 // they are just used to keep getUnwindDestTokenHelper from repeating work),
488 // any node visited must have been exhaustively searched with no information
489 // for it found.
490 SmallVector<Instruction *, 8> Worklist(1, LastUselessPad);
491 while (!Worklist.empty()) {
492 Instruction *UselessPad = Worklist.pop_back_val();
493 auto Memo = MemoMap.find(UselessPad);
494 if (Memo != MemoMap.end() && Memo->second) {
495 // Here the name 'UselessPad' is a bit of a misnomer, because we've found
496 // that it is a funclet that does have information about unwinding to
497 // a particular destination; its parent was a useless pad.
498 // Since its parent has no information, the unwind edge must not escape
499 // the parent, and must target a sibling of this pad. This local unwind
500 // gives us no information about EHPad. Leave it and the subtree rooted
501 // at it alone.
502 assert(getParentPad(Memo->second) == getParentPad(UselessPad));
503 continue;
504 }
505 // We know we don't have information for UselesPad. If it has an entry in
506 // the MemoMap (mapping it to nullptr), it must be one of the TempMemos
507 // added on this invocation of getUnwindDestToken; if a previous invocation
508 // recorded nullptr, it would have had to prove that the ancestors of
509 // UselessPad, which include LastUselessPad, had no information, and that
510 // in turn would have required proving that the descendants of
511 // LastUselesPad, which include EHPad, have no information about
512 // LastUselessPad, which would imply that EHPad was mapped to nullptr in
513 // the MemoMap on that invocation, which isn't the case if we got here.
514 assert(!MemoMap.count(UselessPad) || TempMemos.count(UselessPad));
515 // Assert as we enumerate users that 'UselessPad' doesn't have any unwind
516 // information that we'd be contradicting by making a map entry for it
517 // (which is something that getUnwindDestTokenHelper must have proved for
518 // us to get here). Just assert on is direct users here; the checks in
519 // this downward walk at its descendants will verify that they don't have
520 // any unwind edges that exit 'UselessPad' either (i.e. they either have no
521 // unwind edges or unwind to a sibling).
522 MemoMap[UselessPad] = UnwindDestToken;
523 if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(UselessPad)) {
524 assert(CatchSwitch->getUnwindDest() == nullptr && "Expected useless pad");
525 for (BasicBlock *HandlerBlock : CatchSwitch->handlers()) {
526 auto *CatchPad = &*HandlerBlock->getFirstNonPHIIt();
527 for (User *U : CatchPad->users()) {
528 assert((!isa<InvokeInst>(U) ||
530 ->getUnwindDest()
531 ->getFirstNonPHIIt()) == CatchPad)) &&
532 "Expected useless pad");
534 Worklist.push_back(cast<Instruction>(U));
535 }
536 }
537 } else {
538 assert(isa<CleanupPadInst>(UselessPad));
539 for (User *U : UselessPad->users()) {
540 assert(!isa<CleanupReturnInst>(U) && "Expected useless pad");
541 assert(
542 (!isa<InvokeInst>(U) ||
544 &*cast<InvokeInst>(U)->getUnwindDest()->getFirstNonPHIIt()) ==
545 UselessPad)) &&
546 "Expected useless pad");
548 Worklist.push_back(cast<Instruction>(U));
549 }
550 }
551 }
552
553 return UnwindDestToken;
554}
555
556/// When we inline a basic block into an invoke,
557/// we have to turn all of the calls that can throw into invokes.
558/// This function analyze BB to see if there are any calls, and if so,
559/// it rewrites them to be invokes that jump to InvokeDest and fills in the PHI
560/// nodes in that block with the values specified in InvokeDestPHIValues.
562 BasicBlock *BB, BasicBlock *UnwindEdge,
563 SmallSetVector<const Value *, 4> &OriginallyIndirectCalls,
564 UnwindDestMemoTy *FuncletUnwindMap = nullptr) {
566 // We only need to check for function calls: inlined invoke
567 // instructions require no special handling.
569
570 if (!CI || CI->doesNotThrow())
571 continue;
572
573 // We do not need to (and in fact, cannot) convert possibly throwing calls
574 // to @llvm.experimental_deoptimize (resp. @llvm.experimental.guard) into
575 // invokes. The caller's "segment" of the deoptimization continuation
576 // attached to the newly inlined @llvm.experimental_deoptimize
577 // (resp. @llvm.experimental.guard) call should contain the exception
578 // handling logic, if any.
579 if (auto *F = CI->getCalledFunction())
580 if (F->getIntrinsicID() == Intrinsic::experimental_deoptimize ||
581 F->getIntrinsicID() == Intrinsic::experimental_guard)
582 continue;
583
584 if (auto FuncletBundle = CI->getOperandBundle(LLVMContext::OB_funclet)) {
585 // This call is nested inside a funclet. If that funclet has an unwind
586 // destination within the inlinee, then unwinding out of this call would
587 // be UB. Rewriting this call to an invoke which targets the inlined
588 // invoke's unwind dest would give the call's parent funclet multiple
589 // unwind destinations, which is something that subsequent EH table
590 // generation can't handle and that the veirifer rejects. So when we
591 // see such a call, leave it as a call.
592 auto *FuncletPad = cast<Instruction>(FuncletBundle->Inputs[0]);
593 Value *UnwindDestToken =
594 getUnwindDestToken(FuncletPad, *FuncletUnwindMap);
595 if (UnwindDestToken && !isa<ConstantTokenNone>(UnwindDestToken))
596 continue;
597#ifndef NDEBUG
598 Instruction *MemoKey;
599 if (auto *CatchPad = dyn_cast<CatchPadInst>(FuncletPad))
600 MemoKey = CatchPad->getCatchSwitch();
601 else
602 MemoKey = FuncletPad;
603 assert(FuncletUnwindMap->count(MemoKey) &&
604 (*FuncletUnwindMap)[MemoKey] == UnwindDestToken &&
605 "must get memoized to avoid confusing later searches");
606#endif // NDEBUG
607 }
608
609 bool WasIndirect = OriginallyIndirectCalls.remove(CI);
610 changeToInvokeAndSplitBasicBlock(CI, UnwindEdge);
611 if (WasIndirect)
612 OriginallyIndirectCalls.insert(BB->getTerminator());
613 return BB;
614 }
615 return nullptr;
616}
617
618/// If we inlined an invoke site, we need to convert calls
619/// in the body of the inlined function into invokes.
620///
621/// II is the invoke instruction being inlined. FirstNewBlock is the first
622/// block of the inlined code (the last block is the end of the function),
623/// and InlineCodeInfo is information about the code that got inlined.
624static void HandleInlinedLandingPad(InvokeInst *II, BasicBlock *FirstNewBlock,
625 ClonedCodeInfo &InlinedCodeInfo) {
626 BasicBlock *InvokeDest = II->getUnwindDest();
627
628 Function *Caller = FirstNewBlock->getParent();
629
630 // The inlined code is currently at the end of the function, scan from the
631 // start of the inlined code to its end, checking for stuff we need to
632 // rewrite.
633 LandingPadInliningInfo Invoke(II);
634
635 // Get all of the inlined landing pad instructions.
637 for (Function::iterator I = FirstNewBlock->getIterator(), E = Caller->end();
638 I != E; ++I)
639 if (InvokeInst *II = dyn_cast<InvokeInst>(I->getTerminator()))
640 InlinedLPads.insert(II->getLandingPadInst());
641
642 // Append the clauses from the outer landing pad instruction into the inlined
643 // landing pad instructions.
644 LandingPadInst *OuterLPad = Invoke.getLandingPadInst();
645 for (LandingPadInst *InlinedLPad : InlinedLPads) {
646 unsigned OuterNum = OuterLPad->getNumClauses();
647 InlinedLPad->reserveClauses(OuterNum);
648 for (unsigned OuterIdx = 0; OuterIdx != OuterNum; ++OuterIdx)
649 InlinedLPad->addClause(OuterLPad->getClause(OuterIdx));
650 if (OuterLPad->isCleanup())
651 InlinedLPad->setCleanup(true);
652 }
653
654 for (Function::iterator BB = FirstNewBlock->getIterator(), E = Caller->end();
655 BB != E; ++BB) {
656 if (InlinedCodeInfo.ContainsCalls)
658 &*BB, Invoke.getOuterResumeDest(),
659 InlinedCodeInfo.OriginallyIndirectCalls))
660 // Update any PHI nodes in the exceptional block to indicate that there
661 // is now a new entry in them.
662 Invoke.addIncomingPHIValuesFor(NewBB);
663
664 // Forward any resumes that are remaining here.
665 if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator()))
666 Invoke.forwardResume(RI, InlinedLPads);
667 }
668
669 // Now that everything is happy, we have one final detail. The PHI nodes in
670 // the exception destination block still have entries due to the original
671 // invoke instruction. Eliminate these entries (which might even delete the
672 // PHI node) now.
673 InvokeDest->removePredecessor(II->getParent());
674}
675
676/// If we inlined an invoke site, we need to convert calls
677/// in the body of the inlined function into invokes.
678///
679/// II is the invoke instruction being inlined. FirstNewBlock is the first
680/// block of the inlined code (the last block is the end of the function),
681/// and InlineCodeInfo is information about the code that got inlined.
682static void HandleInlinedEHPad(InvokeInst *II, BasicBlock *FirstNewBlock,
683 ClonedCodeInfo &InlinedCodeInfo) {
684 BasicBlock *UnwindDest = II->getUnwindDest();
685 Function *Caller = FirstNewBlock->getParent();
686
687 assert(UnwindDest->getFirstNonPHIIt()->isEHPad() && "unexpected BasicBlock!");
688
689 // If there are PHI nodes in the unwind destination block, we need to keep
690 // track of which values came into them from the invoke before removing the
691 // edge from this block.
692 SmallVector<Value *, 8> UnwindDestPHIValues;
693 BasicBlock *InvokeBB = II->getParent();
694 for (PHINode &PHI : UnwindDest->phis()) {
695 // Save the value to use for this edge.
696 UnwindDestPHIValues.push_back(PHI.getIncomingValueForBlock(InvokeBB));
697 }
698
699 // Add incoming-PHI values to the unwind destination block for the given basic
700 // block, using the values for the original invoke's source block.
701 auto UpdatePHINodes = [&](BasicBlock *Src) {
702 BasicBlock::iterator I = UnwindDest->begin();
703 for (Value *V : UnwindDestPHIValues) {
705 PHI->addIncoming(V, Src);
706 ++I;
707 }
708 };
709
710 // This connects all the instructions which 'unwind to caller' to the invoke
711 // destination.
712 UnwindDestMemoTy FuncletUnwindMap;
713 for (Function::iterator BB = FirstNewBlock->getIterator(), E = Caller->end();
714 BB != E; ++BB) {
715 if (auto *CRI = dyn_cast<CleanupReturnInst>(BB->getTerminator())) {
716 if (CRI->unwindsToCaller()) {
717 auto *CleanupPad = CRI->getCleanupPad();
718 CleanupReturnInst::Create(CleanupPad, UnwindDest, CRI->getIterator());
719 CRI->eraseFromParent();
720 UpdatePHINodes(&*BB);
721 // Finding a cleanupret with an unwind destination would confuse
722 // subsequent calls to getUnwindDestToken, so map the cleanuppad
723 // to short-circuit any such calls and recognize this as an "unwind
724 // to caller" cleanup.
725 assert(!FuncletUnwindMap.count(CleanupPad) ||
726 isa<ConstantTokenNone>(FuncletUnwindMap[CleanupPad]));
727 FuncletUnwindMap[CleanupPad] =
728 ConstantTokenNone::get(Caller->getContext());
729 }
730 }
731
732 BasicBlock::iterator I = BB->getFirstNonPHIIt();
733 if (!I->isEHPad())
734 continue;
735
736 Instruction *Replacement = nullptr;
737 if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(I)) {
738 if (CatchSwitch->unwindsToCaller()) {
739 Value *UnwindDestToken;
740 if (auto *ParentPad =
741 dyn_cast<Instruction>(CatchSwitch->getParentPad())) {
742 // This catchswitch is nested inside another funclet. If that
743 // funclet has an unwind destination within the inlinee, then
744 // unwinding out of this catchswitch would be UB. Rewriting this
745 // catchswitch to unwind to the inlined invoke's unwind dest would
746 // give the parent funclet multiple unwind destinations, which is
747 // something that subsequent EH table generation can't handle and
748 // that the veirifer rejects. So when we see such a call, leave it
749 // as "unwind to caller".
750 UnwindDestToken = getUnwindDestToken(ParentPad, FuncletUnwindMap);
751 if (UnwindDestToken && !isa<ConstantTokenNone>(UnwindDestToken))
752 continue;
753 } else {
754 // This catchswitch has no parent to inherit constraints from, and
755 // none of its descendants can have an unwind edge that exits it and
756 // targets another funclet in the inlinee. It may or may not have a
757 // descendant that definitively has an unwind to caller. In either
758 // case, we'll have to assume that any unwinds out of it may need to
759 // be routed to the caller, so treat it as though it has a definitive
760 // unwind to caller.
761 UnwindDestToken = ConstantTokenNone::get(Caller->getContext());
762 }
763 auto *NewCatchSwitch = CatchSwitchInst::Create(
764 CatchSwitch->getParentPad(), UnwindDest,
765 CatchSwitch->getNumHandlers(), CatchSwitch->getName(),
766 CatchSwitch->getIterator());
767 for (BasicBlock *PadBB : CatchSwitch->handlers())
768 NewCatchSwitch->addHandler(PadBB);
769 // Propagate info for the old catchswitch over to the new one in
770 // the unwind map. This also serves to short-circuit any subsequent
771 // checks for the unwind dest of this catchswitch, which would get
772 // confused if they found the outer handler in the callee.
773 FuncletUnwindMap[NewCatchSwitch] = UnwindDestToken;
774 Replacement = NewCatchSwitch;
775 }
776 } else if (!isa<FuncletPadInst>(I)) {
777 llvm_unreachable("unexpected EHPad!");
778 }
779
780 if (Replacement) {
781 Replacement->takeName(&*I);
782 I->replaceAllUsesWith(Replacement);
783 I->eraseFromParent();
784 UpdatePHINodes(&*BB);
785 }
786 }
787
788 if (InlinedCodeInfo.ContainsCalls)
789 for (Function::iterator BB = FirstNewBlock->getIterator(),
790 E = Caller->end();
791 BB != E; ++BB)
793 &*BB, UnwindDest, InlinedCodeInfo.OriginallyIndirectCalls,
794 &FuncletUnwindMap))
795 // Update any PHI nodes in the exceptional block to indicate that there
796 // is now a new entry in them.
797 UpdatePHINodes(NewBB);
798
799 // Now that everything is happy, we have one final detail. The PHI nodes in
800 // the exception destination block still have entries due to the original
801 // invoke instruction. Eliminate these entries (which might even delete the
802 // PHI node) now.
803 UnwindDest->removePredecessor(InvokeBB);
804}
805
806static bool haveCommonPrefix(MDNode *MIBStackContext,
807 MDNode *CallsiteStackContext) {
808 assert(MIBStackContext->getNumOperands() > 0 &&
809 CallsiteStackContext->getNumOperands() > 0);
810 // Because of the context trimming performed during matching, the callsite
811 // context could have more stack ids than the MIB. We match up to the end of
812 // the shortest stack context.
813 for (auto MIBStackIter = MIBStackContext->op_begin(),
814 CallsiteStackIter = CallsiteStackContext->op_begin();
815 MIBStackIter != MIBStackContext->op_end() &&
816 CallsiteStackIter != CallsiteStackContext->op_end();
817 MIBStackIter++, CallsiteStackIter++) {
818 auto *Val1 = mdconst::dyn_extract<ConstantInt>(*MIBStackIter);
819 auto *Val2 = mdconst::dyn_extract<ConstantInt>(*CallsiteStackIter);
820 assert(Val1 && Val2);
821 if (Val1->getZExtValue() != Val2->getZExtValue())
822 return false;
823 }
824 return true;
825}
826
828 Call->setMetadata(LLVMContext::MD_memprof, nullptr);
829}
830
832 Call->setMetadata(LLVMContext::MD_callsite, nullptr);
833}
834
836 const std::vector<Metadata *> &MIBList,
838 assert(!MIBList.empty());
839 // Remove existing memprof, which will either be replaced or may not be needed
840 // if we are able to use a single allocation type function attribute.
843 for (Metadata *MIB : MIBList)
844 CallStack.addCallStack(cast<MDNode>(MIB));
845 bool MemprofMDAttached = CallStack.buildAndAttachMIBMetadata(CI);
846 assert(MemprofMDAttached == CI->hasMetadata(LLVMContext::MD_memprof));
847 if (!MemprofMDAttached)
848 // If we used a function attribute remove the callsite metadata as well.
850}
851
852// Update the metadata on the inlined copy ClonedCall of a call OrigCall in the
853// inlined callee body, based on the callsite metadata InlinedCallsiteMD from
854// the call that was inlined.
855static void propagateMemProfHelper(const CallBase *OrigCall,
856 CallBase *ClonedCall,
857 MDNode *InlinedCallsiteMD,
859 MDNode *OrigCallsiteMD = ClonedCall->getMetadata(LLVMContext::MD_callsite);
860 MDNode *ClonedCallsiteMD = nullptr;
861 // Check if the call originally had callsite metadata, and update it for the
862 // new call in the inlined body.
863 if (OrigCallsiteMD) {
864 // The cloned call's context is now the concatenation of the original call's
865 // callsite metadata and the callsite metadata on the call where it was
866 // inlined.
867 ClonedCallsiteMD = MDNode::concatenate(OrigCallsiteMD, InlinedCallsiteMD);
868 ClonedCall->setMetadata(LLVMContext::MD_callsite, ClonedCallsiteMD);
869 }
870
871 // Update any memprof metadata on the cloned call.
872 MDNode *OrigMemProfMD = ClonedCall->getMetadata(LLVMContext::MD_memprof);
873 if (!OrigMemProfMD)
874 return;
875 // We currently expect that allocations with memprof metadata also have
876 // callsite metadata for the allocation's part of the context.
877 assert(OrigCallsiteMD);
878
879 // New call's MIB list.
880 std::vector<Metadata *> NewMIBList;
881
882 // For each MIB metadata, check if its call stack context starts with the
883 // new clone's callsite metadata. If so, that MIB goes onto the cloned call in
884 // the inlined body. If not, it stays on the out-of-line original call.
885 for (auto &MIBOp : OrigMemProfMD->operands()) {
886 MDNode *MIB = dyn_cast<MDNode>(MIBOp);
887 // Stack is first operand of MIB.
888 MDNode *StackMD = getMIBStackNode(MIB);
889 assert(StackMD);
890 // See if the new cloned callsite context matches this profiled context.
891 if (haveCommonPrefix(StackMD, ClonedCallsiteMD))
892 // Add it to the cloned call's MIB list.
893 NewMIBList.push_back(MIB);
894 }
895 if (NewMIBList.empty()) {
896 removeMemProfMetadata(ClonedCall);
897 removeCallsiteMetadata(ClonedCall);
898 return;
899 }
900 if (NewMIBList.size() < OrigMemProfMD->getNumOperands())
901 updateMemprofMetadata(ClonedCall, NewMIBList, ORE);
902}
903
904// Update memprof related metadata (!memprof and !callsite) based on the
905// inlining of Callee into the callsite at CB. The updates include merging the
906// inlined callee's callsite metadata with that of the inlined call,
907// and moving the subset of any memprof contexts to the inlined callee
908// allocations if they match the new inlined call stack.
909static void
911 bool ContainsMemProfMetadata,
914 MDNode *CallsiteMD = CB.getMetadata(LLVMContext::MD_callsite);
915 // Only need to update if the inlined callsite had callsite metadata, or if
916 // there was any memprof metadata inlined.
917 if (!CallsiteMD && !ContainsMemProfMetadata)
918 return;
919
920 // Propagate metadata onto the cloned calls in the inlined callee.
921 for (const auto &Entry : VMap) {
922 // See if this is a call that has been inlined and remapped, and not
923 // simplified away in the process.
924 auto *OrigCall = dyn_cast_or_null<CallBase>(Entry.first);
925 auto *ClonedCall = dyn_cast_or_null<CallBase>(Entry.second);
926 if (!OrigCall || !ClonedCall)
927 continue;
928 // If the inlined callsite did not have any callsite metadata, then it isn't
929 // involved in any profiled call contexts, and we can remove any memprof
930 // metadata on the cloned call.
931 if (!CallsiteMD) {
932 removeMemProfMetadata(ClonedCall);
933 removeCallsiteMetadata(ClonedCall);
934 continue;
935 }
936 propagateMemProfHelper(OrigCall, ClonedCall, CallsiteMD, ORE);
937 }
938}
939
940/// Collect all calls that produce RetVal, following only pointer-preserving
941/// instructions (cast, phi, select).
944 SmallVector<Value *, 8> Worklist{RetVal};
946 while (!Worklist.empty()) {
947 Value *V = Worklist.pop_back_val();
948 if (!V->getType()->isPointerTy() || !Visited.insert(V).second)
949 continue;
950 if (auto *CB = dyn_cast<CallBase>(V))
951 Out.push_back(CB);
953 Worklist.push_back(cast<CastInst>(V)->getOperand(0));
954 else if (auto *PN = dyn_cast<PHINode>(V))
955 append_range(Worklist, PN->incoming_values());
956 else if (auto *SI = dyn_cast<SelectInst>(V)) {
957 Worklist.push_back(SI->getTrueValue());
958 Worklist.push_back(SI->getFalseValue());
959 }
960 }
961}
962
963/// When inlining a call that carries !alloc_token metadata, propagate that
964/// metadata onto calls exposed by inlining the wrapper body. Propagation is
965/// restricted to return-value producing calls, which avoids instrumenting
966/// unrelated calls in the wrapper body.
967static void
970 ClonedCodeInfo &InlinedFunctionInfo) {
971 MDNode *AllocTokenMD = CB.getMetadata(LLVMContext::MD_alloc_token);
972 if (!AllocTokenMD)
973 return;
974
976 for (BasicBlock &BB : *CalledFunc)
977 if (auto *RI = dyn_cast<ReturnInst>(BB.getTerminator()))
978 if (Value *RV = RI->getReturnValue())
979 collectPointerReturningCalls(RV, AllocCalls);
980
981 for (CallBase *OrigCall : AllocCalls) {
982 auto *ClonedCall = dyn_cast_or_null<CallBase>(VMap.lookup(OrigCall));
983 if (!ClonedCall)
984 continue;
985 // Skip calls simplified during inlining; propagation may be incorrect.
986 if (InlinedFunctionInfo.isSimplified(OrigCall, ClonedCall))
987 continue;
988 // Fill missing only: never overwrite a more specific token the wrapper
989 // already set on an internal allocation.
990 if (ClonedCall->getMetadata(LLVMContext::MD_alloc_token))
991 continue;
992 ClonedCall->setMetadata(LLVMContext::MD_alloc_token, AllocTokenMD);
993 }
994}
995
996/// When inlining a call site that has !llvm.mem.parallel_loop_access,
997/// !llvm.access.group, !alias.scope or !noalias metadata, that metadata should
998/// be propagated to all memory-accessing cloned instructions.
1000 Function::iterator FEnd) {
1001 MDNode *MemParallelLoopAccess =
1002 CB.getMetadata(LLVMContext::MD_mem_parallel_loop_access);
1003 MDNode *AccessGroup = CB.getMetadata(LLVMContext::MD_access_group);
1004 MDNode *AliasScope = CB.getMetadata(LLVMContext::MD_alias_scope);
1005 MDNode *NoAlias = CB.getMetadata(LLVMContext::MD_noalias);
1006 if (!MemParallelLoopAccess && !AccessGroup && !AliasScope && !NoAlias)
1007 return;
1008
1009 for (BasicBlock &BB : make_range(FStart, FEnd)) {
1010 for (Instruction &I : BB) {
1011 // This metadata is only relevant for instructions that access memory.
1012 if (!I.mayReadOrWriteMemory())
1013 continue;
1014
1015 if (MemParallelLoopAccess) {
1016 // TODO: This probably should not overwrite MemParalleLoopAccess.
1017 MemParallelLoopAccess = MDNode::concatenate(
1018 I.getMetadata(LLVMContext::MD_mem_parallel_loop_access),
1019 MemParallelLoopAccess);
1020 I.setMetadata(LLVMContext::MD_mem_parallel_loop_access,
1021 MemParallelLoopAccess);
1022 }
1023
1024 if (AccessGroup)
1025 I.setMetadata(LLVMContext::MD_access_group, uniteAccessGroups(
1026 I.getMetadata(LLVMContext::MD_access_group), AccessGroup));
1027
1028 if (AliasScope)
1029 I.setMetadata(LLVMContext::MD_alias_scope, MDNode::concatenate(
1030 I.getMetadata(LLVMContext::MD_alias_scope), AliasScope));
1031
1032 if (NoAlias)
1033 I.setMetadata(LLVMContext::MD_noalias, MDNode::concatenate(
1034 I.getMetadata(LLVMContext::MD_noalias), NoAlias));
1035 }
1036 }
1037}
1038
1039/// Track inlining chain via inlined.from metadata for dontcall diagnostics.
1040static void PropagateInlinedFromMetadata(CallBase &CB, StringRef CalledFuncName,
1041 StringRef CallerFuncName,
1042 Function::iterator FStart,
1043 Function::iterator FEnd) {
1044 LLVMContext &Ctx = CB.getContext();
1045 uint64_t InlineSiteLoc = 0;
1046 if (auto *MD = CB.getMetadata("srcloc"))
1047 if (auto *CI = mdconst::dyn_extract<ConstantInt>(MD->getOperand(0)))
1048 InlineSiteLoc = CI->getZExtValue();
1049
1050 auto *I64Ty = Type::getInt64Ty(Ctx);
1051 auto MakeMDInt = [&](uint64_t V) {
1052 return ConstantAsMetadata::get(ConstantInt::get(I64Ty, V));
1053 };
1054
1055 for (BasicBlock &BB : make_range(FStart, FEnd)) {
1056 for (Instruction &I : BB) {
1057 auto *CI = dyn_cast<CallInst>(&I);
1058 if (!CI || !CI->getMetadata("srcloc"))
1059 continue;
1060 auto *Callee = CI->getCalledFunction();
1061 if (!Callee || (!Callee->hasFnAttribute("dontcall-error") &&
1062 !Callee->hasFnAttribute("dontcall-warn")))
1063 continue;
1064
1066 if (MDNode *Existing = CI->getMetadata("inlined.from"))
1067 append_range(Ops, Existing->operands());
1068 else {
1069 Ops.push_back(MDString::get(Ctx, CalledFuncName));
1070 Ops.push_back(MakeMDInt(0));
1071 }
1072 Ops.push_back(MDString::get(Ctx, CallerFuncName));
1073 Ops.push_back(MakeMDInt(InlineSiteLoc));
1074 CI->setMetadata("inlined.from", MDNode::get(Ctx, Ops));
1075 }
1076 }
1077}
1078
1079/// Bundle operands of the inlined function must be added to inlined call sites.
1081 Instruction *CallSiteEHPad) {
1082 for (Instruction &II : llvm::make_early_inc_range(*InlinedBB)) {
1084 if (!I)
1085 continue;
1086 // Skip call sites which already have a "funclet" bundle.
1087 if (I->getOperandBundle(LLVMContext::OB_funclet))
1088 continue;
1089 // Skip call sites which are nounwind intrinsics (as long as they don't
1090 // lower into regular function calls in the course of IR transformations).
1091 auto *CalledFn =
1092 dyn_cast<Function>(I->getCalledOperand()->stripPointerCasts());
1093 if (CalledFn && CalledFn->isIntrinsic() && I->doesNotThrow() &&
1094 !IntrinsicInst::mayLowerToFunctionCall(CalledFn->getIntrinsicID()))
1095 continue;
1096
1098 I->getOperandBundlesAsDefs(OpBundles);
1099 OpBundles.emplace_back("funclet", CallSiteEHPad);
1100
1101 Instruction *NewInst = CallBase::Create(I, OpBundles, I->getIterator());
1102 NewInst->takeName(I);
1103 I->replaceAllUsesWith(NewInst);
1104 I->eraseFromParent();
1105 }
1106}
1107
1108namespace {
1109/// Utility for cloning !noalias and !alias.scope metadata. When a code region
1110/// using scoped alias metadata is inlined, the aliasing relationships may not
1111/// hold between the two version. It is necessary to create a deep clone of the
1112/// metadata, putting the two versions in separate scope domains.
1113class ScopedAliasMetadataDeepCloner {
1114 using MetadataMap = DenseMap<const MDNode *, TrackingMDNodeRef>;
1115 SetVector<const MDNode *> MD;
1116 MetadataMap MDMap;
1117 void addRecursiveMetadataUses();
1118
1119public:
1120 ScopedAliasMetadataDeepCloner(const Function *F);
1121
1122 /// Create a new clone of the scoped alias metadata, which will be used by
1123 /// subsequent remap() calls.
1124 void clone();
1125
1126 /// Remap instructions in the given range from the original to the cloned
1127 /// metadata.
1128 void remap(Function::iterator FStart, Function::iterator FEnd);
1129};
1130} // namespace
1131
1132ScopedAliasMetadataDeepCloner::ScopedAliasMetadataDeepCloner(
1133 const Function *F) {
1134 for (const BasicBlock &BB : *F) {
1135 for (const Instruction &I : BB) {
1136 if (const MDNode *M = I.getMetadata(LLVMContext::MD_alias_scope))
1137 MD.insert(M);
1138 if (const MDNode *M = I.getMetadata(LLVMContext::MD_noalias))
1139 MD.insert(M);
1140
1141 // We also need to clone the metadata in noalias intrinsics.
1142 if (const auto *Decl = dyn_cast<NoAliasScopeDeclInst>(&I))
1143 MD.insert(Decl->getScopeList());
1144 }
1145 }
1146 addRecursiveMetadataUses();
1147}
1148
1149void ScopedAliasMetadataDeepCloner::addRecursiveMetadataUses() {
1150 SmallVector<const Metadata *, 16> Queue(MD.begin(), MD.end());
1151 while (!Queue.empty()) {
1152 const MDNode *M = cast<MDNode>(Queue.pop_back_val());
1153 for (const Metadata *Op : M->operands())
1154 if (const MDNode *OpMD = dyn_cast<MDNode>(Op))
1155 if (MD.insert(OpMD))
1156 Queue.push_back(OpMD);
1157 }
1158}
1159
1160void ScopedAliasMetadataDeepCloner::clone() {
1161 assert(MDMap.empty() && "clone() already called ?");
1162
1164 for (const MDNode *I : MD) {
1165 DummyNodes.push_back(MDTuple::getTemporary(I->getContext(), {}));
1166 MDMap[I].reset(DummyNodes.back().get());
1167 }
1168
1169 // Create new metadata nodes to replace the dummy nodes, replacing old
1170 // metadata references with either a dummy node or an already-created new
1171 // node.
1173 for (const MDNode *I : MD) {
1174 for (const Metadata *Op : I->operands()) {
1175 if (const MDNode *M = dyn_cast<MDNode>(Op))
1176 NewOps.push_back(MDMap[M]);
1177 else
1178 NewOps.push_back(const_cast<Metadata *>(Op));
1179 }
1180
1181 MDNode *NewM = MDNode::get(I->getContext(), NewOps);
1182 MDTuple *TempM = cast<MDTuple>(MDMap[I]);
1183 assert(TempM->isTemporary() && "Expected temporary node");
1184
1185 TempM->replaceAllUsesWith(NewM);
1186 NewOps.clear();
1187 }
1188}
1189
1190void ScopedAliasMetadataDeepCloner::remap(Function::iterator FStart,
1191 Function::iterator FEnd) {
1192 if (MDMap.empty())
1193 return; // Nothing to do.
1194
1195 for (BasicBlock &BB : make_range(FStart, FEnd)) {
1196 for (Instruction &I : BB) {
1197 // TODO: The null checks for the MDMap.lookup() results should no longer
1198 // be necessary.
1199 if (MDNode *M = I.getMetadata(LLVMContext::MD_alias_scope))
1200 if (MDNode *MNew = MDMap.lookup(M))
1201 I.setMetadata(LLVMContext::MD_alias_scope, MNew);
1202
1203 if (MDNode *M = I.getMetadata(LLVMContext::MD_noalias))
1204 if (MDNode *MNew = MDMap.lookup(M))
1205 I.setMetadata(LLVMContext::MD_noalias, MNew);
1206
1207 if (auto *Decl = dyn_cast<NoAliasScopeDeclInst>(&I))
1208 if (MDNode *MNew = MDMap.lookup(Decl->getScopeList()))
1209 Decl->setScopeList(MNew);
1210 }
1211 }
1212}
1213
1214/// If the inlined function has noalias arguments,
1215/// then add new alias scopes for each noalias argument, tag the mapped noalias
1216/// parameters with noalias metadata specifying the new scope, and tag all
1217/// non-derived loads, stores and memory intrinsics with the new alias scopes.
1219 const DataLayout &DL, AAResults *CalleeAAR,
1220 ClonedCodeInfo &InlinedFunctionInfo) {
1222 return;
1223
1224 const Function *CalledFunc = CB.getCalledFunction();
1226
1227 for (const Argument &Arg : CalledFunc->args())
1228 if (CB.paramHasAttr(Arg.getArgNo(), Attribute::NoAlias) && !Arg.use_empty())
1229 NoAliasArgs.push_back(&Arg);
1230
1231 if (NoAliasArgs.empty())
1232 return;
1233
1234 // To do a good job, if a noalias variable is captured, we need to know if
1235 // the capture point dominates the particular use we're considering.
1236 DominatorTree DT;
1237 DT.recalculate(const_cast<Function&>(*CalledFunc));
1238
1239 // noalias indicates that pointer values based on the argument do not alias
1240 // pointer values which are not based on it. So we add a new "scope" for each
1241 // noalias function argument. Accesses using pointers based on that argument
1242 // become part of that alias scope, accesses using pointers not based on that
1243 // argument are tagged as noalias with that scope.
1244
1246 MDBuilder MDB(CalledFunc->getContext());
1247
1248 // Create a new scope domain for this function.
1249 MDNode *NewDomain =
1250 MDB.createAnonymousAliasScopeDomain(CalledFunc->getName());
1251 for (unsigned i = 0, e = NoAliasArgs.size(); i != e; ++i) {
1252 const Argument *A = NoAliasArgs[i];
1253
1254 std::string Name = std::string(CalledFunc->getName());
1255 if (A->hasName()) {
1256 Name += ": %";
1257 Name += A->getName();
1258 } else {
1259 Name += ": argument ";
1260 Name += utostr(i);
1261 }
1262
1263 // Note: We always create a new anonymous root here. This is true regardless
1264 // of the linkage of the callee because the aliasing "scope" is not just a
1265 // property of the callee, but also all control dependencies in the caller.
1266 MDNode *NewScope = MDB.createAnonymousAliasScope(NewDomain, Name);
1267 NewScopes.insert(std::make_pair(A, NewScope));
1268
1269 if (UseNoAliasIntrinsic) {
1270 // Introduce a llvm.experimental.noalias.scope.decl for the noalias
1271 // argument.
1272 MDNode *AScopeList = MDNode::get(CalledFunc->getContext(), NewScope);
1273 auto *NoAliasDecl =
1274 IRBuilder<>(&CB).CreateNoAliasScopeDeclaration(AScopeList);
1275 // Ignore the result for now. The result will be used when the
1276 // llvm.noalias intrinsic is introduced.
1277 (void)NoAliasDecl;
1278 }
1279 }
1280
1281 // Iterate over all new instructions in the map; for all memory-access
1282 // instructions, add the alias scope metadata.
1283 for (ValueToValueMapTy::iterator VMI = VMap.begin(), VMIE = VMap.end();
1284 VMI != VMIE; ++VMI) {
1285 if (const Instruction *I = dyn_cast<Instruction>(VMI->first)) {
1286 if (!VMI->second)
1287 continue;
1288
1289 Instruction *NI = dyn_cast<Instruction>(VMI->second);
1290 if (!NI || InlinedFunctionInfo.isSimplified(I, NI))
1291 continue;
1292
1293 bool IsArgMemOnlyCall = false, IsFuncCall = false;
1295
1296 if (const LoadInst *LI = dyn_cast<LoadInst>(I))
1297 PtrArgs.push_back(LI->getPointerOperand());
1298 else if (const StoreInst *SI = dyn_cast<StoreInst>(I))
1299 PtrArgs.push_back(SI->getPointerOperand());
1300 else if (const VAArgInst *VAAI = dyn_cast<VAArgInst>(I))
1301 PtrArgs.push_back(VAAI->getPointerOperand());
1302 else if (const AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(I))
1303 PtrArgs.push_back(CXI->getPointerOperand());
1304 else if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(I))
1305 PtrArgs.push_back(RMWI->getPointerOperand());
1306 else if (const auto *Call = dyn_cast<CallBase>(I)) {
1307 // If we know that the call does not access memory, then we'll still
1308 // know that about the inlined clone of this call site, and we don't
1309 // need to add metadata.
1310 if (Call->doesNotAccessMemory())
1311 continue;
1312
1313 IsFuncCall = true;
1314 if (CalleeAAR) {
1315 MemoryEffects ME = CalleeAAR->getMemoryEffects(Call);
1316
1317 // We'll retain this knowledge without additional metadata.
1319 continue;
1320
1321 if (ME.onlyAccessesArgPointees())
1322 IsArgMemOnlyCall = true;
1323 }
1324
1325 for (Value *Arg : Call->args()) {
1326 // Only care about pointer arguments. If a noalias argument is
1327 // accessed through a non-pointer argument, it must be captured
1328 // first (e.g. via ptrtoint), and we protect against captures below.
1329 if (!Arg->getType()->isPointerTy())
1330 continue;
1331
1332 PtrArgs.push_back(Arg);
1333 }
1334 }
1335
1336 // If we found no pointers, then this instruction is not suitable for
1337 // pairing with an instruction to receive aliasing metadata.
1338 // However, if this is a call, this we might just alias with none of the
1339 // noalias arguments.
1340 if (PtrArgs.empty() && !IsFuncCall)
1341 continue;
1342
1343 // It is possible that there is only one underlying object, but you
1344 // need to go through several PHIs to see it, and thus could be
1345 // repeated in the Objects list.
1348
1349 for (const Value *V : PtrArgs) {
1351 getUnderlyingObjects(V, Objects, /* LI = */ nullptr);
1352
1353 ObjSet.insert_range(Objects);
1354 }
1355
1356 // Figure out if we're derived from anything that is not a noalias
1357 // argument.
1358 bool RequiresNoCaptureBefore = false, UsesAliasingPtr = false,
1359 UsesUnknownObject = false;
1360 for (const Value *V : ObjSet) {
1361 // Is this value a constant that cannot be derived from any pointer
1362 // value (we need to exclude constant expressions, for example, that
1363 // are formed from arithmetic on global symbols).
1364 bool IsNonPtrConst = isa<ConstantInt>(V) || isa<ConstantFP>(V) ||
1367 if (IsNonPtrConst)
1368 continue;
1369
1370 // If this is anything other than a noalias argument, then we cannot
1371 // completely describe the aliasing properties using alias.scope
1372 // metadata (and, thus, won't add any).
1373 if (const Argument *A = dyn_cast<Argument>(V)) {
1374 if (!CB.paramHasAttr(A->getArgNo(), Attribute::NoAlias))
1375 UsesAliasingPtr = true;
1376 } else {
1377 UsesAliasingPtr = true;
1378 }
1379
1380 if (isEscapeSource(V)) {
1381 // An escape source can only alias with a noalias argument if it has
1382 // been captured beforehand.
1383 RequiresNoCaptureBefore = true;
1384 } else if (!isa<Argument>(V) && !isIdentifiedObject(V)) {
1385 // If this is neither an escape source, nor some identified object
1386 // (which cannot directly alias a noalias argument), nor some other
1387 // argument (which, by definition, also cannot alias a noalias
1388 // argument), conservatively do not make any assumptions.
1389 UsesUnknownObject = true;
1390 }
1391 }
1392
1393 // Nothing we can do if the used underlying object cannot be reliably
1394 // determined.
1395 if (UsesUnknownObject)
1396 continue;
1397
1398 // A function call can always get captured noalias pointers (via other
1399 // parameters, globals, etc.).
1400 if (IsFuncCall && !IsArgMemOnlyCall)
1401 RequiresNoCaptureBefore = true;
1402
1403 // First, we want to figure out all of the sets with which we definitely
1404 // don't alias. Iterate over all noalias set, and add those for which:
1405 // 1. The noalias argument is not in the set of objects from which we
1406 // definitely derive.
1407 // 2. The noalias argument has not yet been captured.
1408 // An arbitrary function that might load pointers could see captured
1409 // noalias arguments via other noalias arguments or globals, and so we
1410 // must always check for prior capture.
1411 for (const Argument *A : NoAliasArgs) {
1412 if (ObjSet.contains(A))
1413 continue; // May be based on a noalias argument.
1414
1415 // It might be tempting to skip the PointerMayBeCapturedBefore check if
1416 // A->hasNoCaptureAttr() is true, but this is incorrect because
1417 // nocapture only guarantees that no copies outlive the function, not
1418 // that the value cannot be locally captured.
1419 if (!RequiresNoCaptureBefore ||
1421 A, /*ReturnCaptures=*/false, I, &DT, /*IncludeI=*/false,
1423 NoAliases.push_back(NewScopes[A]);
1424 }
1425
1426 if (!NoAliases.empty())
1427 NI->setMetadata(LLVMContext::MD_noalias,
1429 NI->getMetadata(LLVMContext::MD_noalias),
1430 MDNode::get(CalledFunc->getContext(), NoAliases)));
1431
1432 // Next, we want to figure out all of the sets to which we might belong.
1433 // We might belong to a set if the noalias argument is in the set of
1434 // underlying objects. If there is some non-noalias argument in our list
1435 // of underlying objects, then we cannot add a scope because the fact
1436 // that some access does not alias with any set of our noalias arguments
1437 // cannot itself guarantee that it does not alias with this access
1438 // (because there is some pointer of unknown origin involved and the
1439 // other access might also depend on this pointer). We also cannot add
1440 // scopes to arbitrary functions unless we know they don't access any
1441 // non-parameter pointer-values.
1442 bool CanAddScopes = !UsesAliasingPtr;
1443 if (CanAddScopes && IsFuncCall)
1444 CanAddScopes = IsArgMemOnlyCall;
1445
1446 if (CanAddScopes)
1447 for (const Argument *A : NoAliasArgs) {
1448 if (ObjSet.count(A))
1449 Scopes.push_back(NewScopes[A]);
1450 }
1451
1452 if (!Scopes.empty())
1453 NI->setMetadata(
1454 LLVMContext::MD_alias_scope,
1455 MDNode::concatenate(NI->getMetadata(LLVMContext::MD_alias_scope),
1456 MDNode::get(CalledFunc->getContext(), Scopes)));
1457 }
1458 }
1459}
1460
1462 ReturnInst *End) {
1463
1464 assert(Begin->getParent() == End->getParent() &&
1465 "Expected to be in same basic block!");
1466 auto BeginIt = Begin->getIterator();
1467 assert(BeginIt != End->getIterator() && "Non-empty BB has empty iterator");
1469 ++BeginIt, End->getIterator(), InlinerAttributeWindow + 1);
1470}
1471
1472// Add attributes from CB params and Fn attributes that can always be propagated
1473// to the corresponding argument / inner callbases.
1475 ValueToValueMapTy &VMap,
1476 ClonedCodeInfo &InlinedFunctionInfo) {
1477 auto *CalledFunction = CB.getCalledFunction();
1478 auto &Context = CalledFunction->getContext();
1479
1480 // Collect valid attributes for all params.
1481 SmallVector<AttrBuilder> ValidObjParamAttrs, ValidExactParamAttrs;
1482 bool HasAttrToPropagate = false;
1483
1484 // Attributes we can only propagate if the exact parameter is forwarded.
1485 // We can propagate both poison generating and UB generating attributes
1486 // without any extra checks. The only attribute that is tricky to propagate
1487 // is `noundef` (skipped for now) as that can create new UB where previous
1488 // behavior was just using a poison value.
1489 static const Attribute::AttrKind ExactAttrsToPropagate[] = {
1490 Attribute::Dereferenceable, Attribute::DereferenceableOrNull,
1491 Attribute::NonNull, Attribute::NoFPClass,
1492 Attribute::Alignment, Attribute::Range};
1493
1494 for (unsigned I = 0, E = CB.arg_size(); I < E; ++I) {
1495 ValidObjParamAttrs.emplace_back(AttrBuilder{CB.getContext()});
1496 ValidExactParamAttrs.emplace_back(AttrBuilder{CB.getContext()});
1497 // Access attributes can be propagated to any param with the same underlying
1498 // object as the argument.
1499 if (CB.paramHasAttr(I, Attribute::ReadNone))
1500 ValidObjParamAttrs.back().addAttribute(Attribute::ReadNone);
1501 if (CB.paramHasAttr(I, Attribute::ReadOnly))
1502 ValidObjParamAttrs.back().addAttribute(Attribute::ReadOnly);
1503
1504 for (Attribute::AttrKind AK : ExactAttrsToPropagate) {
1505 Attribute Attr = CB.getParamAttr(I, AK);
1506 if (Attr.isValid())
1507 ValidExactParamAttrs.back().addAttribute(Attr);
1508 }
1509
1510 HasAttrToPropagate |= ValidObjParamAttrs.back().hasAttributes();
1511 HasAttrToPropagate |= ValidExactParamAttrs.back().hasAttributes();
1512 }
1513
1514 // Won't be able to propagate anything.
1515 if (!HasAttrToPropagate)
1516 return;
1517
1518 for (BasicBlock &BB : *CalledFunction) {
1519 for (Instruction &Ins : BB) {
1520 const auto *InnerCB = dyn_cast<CallBase>(&Ins);
1521 if (!InnerCB)
1522 continue;
1523 auto *NewInnerCB = dyn_cast_or_null<CallBase>(VMap.lookup(InnerCB));
1524 if (!NewInnerCB)
1525 continue;
1526 // The InnerCB might have be simplified during the inlining
1527 // process which can make propagation incorrect.
1528 if (InlinedFunctionInfo.isSimplified(InnerCB, NewInnerCB))
1529 continue;
1530
1531 AttributeList AL = NewInnerCB->getAttributes();
1532 for (unsigned I = 0, E = InnerCB->arg_size(); I < E; ++I) {
1533 // It's unsound or requires special handling to propagate
1534 // attributes to byval arguments. Even if CalledFunction
1535 // doesn't e.g. write to the argument (readonly), the call to
1536 // NewInnerCB may write to its by-value copy.
1537 if (NewInnerCB->paramHasAttr(I, Attribute::ByVal))
1538 continue;
1539
1540 // Don't bother propagating attrs to constants.
1541 if (match(NewInnerCB->getArgOperand(I),
1543 continue;
1544
1545 // Check if the underlying value for the parameter is an argument.
1546 const Argument *Arg = dyn_cast<Argument>(InnerCB->getArgOperand(I));
1547 unsigned ArgNo;
1548 if (Arg) {
1549 ArgNo = Arg->getArgNo();
1550 // For dereferenceable, dereferenceable_or_null, align, etc...
1551 // we don't want to propagate if the existing param has the same
1552 // attribute with "better" constraints. So remove from the
1553 // new AL if the region of the existing param is larger than
1554 // what we can propagate.
1555 AttrBuilder NewAB{
1556 Context, AttributeSet::get(Context, ValidExactParamAttrs[ArgNo])};
1557 if (AL.getParamDereferenceableBytes(I) >
1558 NewAB.getDereferenceableBytes())
1559 NewAB.removeAttribute(Attribute::Dereferenceable);
1560 if (AL.getParamDereferenceableOrNullBytes(I) >
1561 NewAB.getDereferenceableOrNullBytes())
1562 NewAB.removeAttribute(Attribute::DereferenceableOrNull);
1563 if (AL.getParamAlignment(I).valueOrOne() >
1564 NewAB.getAlignment().valueOrOne())
1565 NewAB.removeAttribute(Attribute::Alignment);
1566 if (auto ExistingRange = AL.getParamRange(I)) {
1567 if (auto NewRange = NewAB.getRange()) {
1568 ConstantRange CombinedRange =
1569 ExistingRange->intersectWith(*NewRange);
1570 NewAB.removeAttribute(Attribute::Range);
1571 NewAB.addRangeAttr(CombinedRange);
1572 }
1573 }
1574
1575 if (FPClassTest ExistingNoFP = AL.getParamNoFPClass(I))
1576 NewAB.addNoFPClassAttr(ExistingNoFP | NewAB.getNoFPClass());
1577
1578 AL = AL.addParamAttributes(Context, I, NewAB);
1579 } else if (NewInnerCB->getArgOperand(I)->getType()->isPointerTy()) {
1580 // Check if the underlying value for the parameter is an argument.
1581 const Value *UnderlyingV =
1582 getUnderlyingObject(InnerCB->getArgOperand(I));
1583 Arg = dyn_cast<Argument>(UnderlyingV);
1584 if (!Arg)
1585 continue;
1586 ArgNo = Arg->getArgNo();
1587 } else {
1588 continue;
1589 }
1590
1591 // If so, propagate its access attributes.
1592 AL = AL.addParamAttributes(Context, I, ValidObjParamAttrs[ArgNo]);
1593
1594 // We can have conflicting attributes from the inner callsite and
1595 // to-be-inlined callsite. In that case, choose the most
1596 // restrictive.
1597
1598 // readonly + writeonly means we can never deref so make readnone.
1599 if (AL.hasParamAttr(I, Attribute::ReadOnly) &&
1600 AL.hasParamAttr(I, Attribute::WriteOnly))
1601 AL = AL.addParamAttribute(Context, I, Attribute::ReadNone);
1602
1603 // If have readnone, need to clear readonly/writeonly
1604 if (AL.hasParamAttr(I, Attribute::ReadNone)) {
1605 AL = AL.removeParamAttribute(Context, I, Attribute::ReadOnly);
1606 AL = AL.removeParamAttribute(Context, I, Attribute::WriteOnly);
1607 }
1608
1609 // Writable cannot exist in conjunction w/ readonly/readnone
1610 if (AL.hasParamAttr(I, Attribute::ReadOnly) ||
1611 AL.hasParamAttr(I, Attribute::ReadNone))
1612 AL = AL.removeParamAttribute(Context, I, Attribute::Writable);
1613 }
1614 NewInnerCB->setAttributes(AL);
1615 }
1616 }
1617}
1618
1619// Only allow these white listed attributes to be propagated back to the
1620// callee. This is because other attributes may only be valid on the call
1621// itself, i.e. attributes such as signext and zeroext.
1622
1623// Attributes that are always okay to propagate as if they are violated its
1624// immediate UB.
1626 AttrBuilder Valid(CB.getContext());
1627 if (auto DerefBytes = CB.getRetDereferenceableBytes())
1628 Valid.addDereferenceableAttr(DerefBytes);
1629 if (auto DerefOrNullBytes = CB.getRetDereferenceableOrNullBytes())
1630 Valid.addDereferenceableOrNullAttr(DerefOrNullBytes);
1631 if (CB.hasRetAttr(Attribute::NoAlias))
1632 Valid.addAttribute(Attribute::NoAlias);
1633 if (CB.hasRetAttr(Attribute::NoUndef))
1634 Valid.addAttribute(Attribute::NoUndef);
1635 return Valid;
1636}
1637
1638// Attributes that need additional checks as propagating them may change
1639// behavior or cause new UB.
1641 AttrBuilder Valid(CB.getContext());
1642 if (CB.hasRetAttr(Attribute::NonNull))
1643 Valid.addAttribute(Attribute::NonNull);
1644 if (CB.hasRetAttr(Attribute::Alignment))
1645 Valid.addAlignmentAttr(CB.getRetAlign());
1646 if (std::optional<ConstantRange> Range = CB.getRange())
1647 Valid.addRangeAttr(*Range);
1648 if (CB.hasRetAttr(Attribute::NoFPClass))
1649 Valid.addNoFPClassAttr(CB.getRetNoFPClass());
1650 return Valid;
1651}
1652
1654 ClonedCodeInfo &InlinedFunctionInfo) {
1655 AttrBuilder CallSiteValidUB = IdentifyValidUBGeneratingAttributes(CB);
1656 AttrBuilder CallSiteValidPG = IdentifyValidPoisonGeneratingAttributes(CB);
1657 if (!CallSiteValidUB.hasAttributes() && !CallSiteValidPG.hasAttributes())
1658 return;
1659 auto *CalledFunction = CB.getCalledFunction();
1660 auto &Context = CalledFunction->getContext();
1661
1662 for (auto &BB : *CalledFunction) {
1663 auto *RI = dyn_cast<ReturnInst>(BB.getTerminator());
1664 if (!RI || !isa<CallBase>(RI->getOperand(0)))
1665 continue;
1666 auto *RetVal = cast<CallBase>(RI->getOperand(0));
1667 // Check that the cloned RetVal exists and is a call, otherwise we cannot
1668 // add the attributes on the cloned RetVal. Simplification during inlining
1669 // could have transformed the cloned instruction.
1670 auto *NewRetVal = dyn_cast_or_null<CallBase>(VMap.lookup(RetVal));
1671 if (!NewRetVal)
1672 continue;
1673
1674 // The RetVal might have be simplified during the inlining
1675 // process which can make propagation incorrect.
1676 if (InlinedFunctionInfo.isSimplified(RetVal, NewRetVal))
1677 continue;
1678 // Backward propagation of attributes to the returned value may be incorrect
1679 // if it is control flow dependent.
1680 // Consider:
1681 // @callee {
1682 // %rv = call @foo()
1683 // %rv2 = call @bar()
1684 // if (%rv2 != null)
1685 // return %rv2
1686 // if (%rv == null)
1687 // exit()
1688 // return %rv
1689 // }
1690 // caller() {
1691 // %val = call nonnull @callee()
1692 // }
1693 // Here we cannot add the nonnull attribute on either foo or bar. So, we
1694 // limit the check to both RetVal and RI are in the same basic block and
1695 // there are no throwing/exiting instructions between these instructions.
1696 if (RI->getParent() != RetVal->getParent() ||
1698 continue;
1699 // Add to the existing attributes of NewRetVal, i.e. the cloned call
1700 // instruction.
1701 // NB! When we have the same attribute already existing on NewRetVal, but
1702 // with a differing value, the AttributeList's merge API honours the already
1703 // existing attribute value (i.e. attributes such as dereferenceable,
1704 // dereferenceable_or_null etc). See AttrBuilder::merge for more details.
1705 AttrBuilder ValidUB = IdentifyValidUBGeneratingAttributes(CB);
1706 AttrBuilder ValidPG = IdentifyValidPoisonGeneratingAttributes(CB);
1707 AttributeList AL = NewRetVal->getAttributes();
1708 if (ValidUB.getDereferenceableBytes() < AL.getRetDereferenceableBytes())
1709 ValidUB.removeAttribute(Attribute::Dereferenceable);
1710 if (ValidUB.getDereferenceableOrNullBytes() <
1711 AL.getRetDereferenceableOrNullBytes())
1712 ValidUB.removeAttribute(Attribute::DereferenceableOrNull);
1713 AttributeList NewAL = AL.addRetAttributes(Context, ValidUB);
1714 // Attributes that may generate poison returns are a bit tricky. If we
1715 // propagate them, other uses of the callsite might have their behavior
1716 // change or cause UB (if they have noundef) b.c of the new potential
1717 // poison.
1718 // Take the following three cases:
1719 //
1720 // 1)
1721 // define nonnull ptr @foo() {
1722 // %p = call ptr @bar()
1723 // call void @use(ptr %p) willreturn nounwind
1724 // ret ptr %p
1725 // }
1726 //
1727 // 2)
1728 // define noundef nonnull ptr @foo() {
1729 // %p = call ptr @bar()
1730 // call void @use(ptr %p) willreturn nounwind
1731 // ret ptr %p
1732 // }
1733 //
1734 // 3)
1735 // define nonnull ptr @foo() {
1736 // %p = call noundef ptr @bar()
1737 // ret ptr %p
1738 // }
1739 //
1740 // In case 1, we can't propagate nonnull because poison value in @use may
1741 // change behavior or trigger UB.
1742 // In case 2, we don't need to be concerned about propagating nonnull, as
1743 // any new poison at @use will trigger UB anyways.
1744 // In case 3, we can never propagate nonnull because it may create UB due to
1745 // the noundef on @bar.
1746 if (ValidPG.getAlignment().valueOrOne() < AL.getRetAlignment().valueOrOne())
1747 ValidPG.removeAttribute(Attribute::Alignment);
1748 if (ValidPG.hasAttributes()) {
1749 Attribute CBRange = ValidPG.getAttribute(Attribute::Range);
1750 if (CBRange.isValid()) {
1751 Attribute NewRange = AL.getRetAttr(Attribute::Range);
1752 if (NewRange.isValid()) {
1753 ValidPG.addRangeAttr(
1754 CBRange.getRange().intersectWith(NewRange.getRange()));
1755 }
1756 }
1757
1758 Attribute CBNoFPClass = ValidPG.getAttribute(Attribute::NoFPClass);
1759 if (CBNoFPClass.isValid() && AL.hasRetAttr(Attribute::NoFPClass)) {
1760 ValidPG.addNoFPClassAttr(
1761 CBNoFPClass.getNoFPClass() |
1762 AL.getRetAttr(Attribute::NoFPClass).getNoFPClass());
1763 }
1764
1765 // Three checks.
1766 // If the callsite has `noundef`, then a poison due to violating the
1767 // return attribute will create UB anyways so we can always propagate.
1768 // Otherwise, if the return value (callee to be inlined) has `noundef`, we
1769 // can't propagate as a new poison return will cause UB.
1770 // Finally, check if the return value has no uses whose behavior may
1771 // change/may cause UB if we potentially return poison. At the moment this
1772 // is implemented overly conservatively with a single-use check.
1773 // TODO: Update the single-use check to iterate through uses and only bail
1774 // if we have a potentially dangerous use.
1775
1776 if (CB.hasRetAttr(Attribute::NoUndef) ||
1777 (RetVal->hasOneUse() && !RetVal->hasRetAttr(Attribute::NoUndef)))
1778 NewAL = NewAL.addRetAttributes(Context, ValidPG);
1779 }
1780 NewRetVal->setAttributes(NewAL);
1781 }
1782}
1783
1784/// If the inlined function has non-byval align arguments, then
1785/// add @llvm.assume-based alignment assumptions to preserve this information.
1788 return;
1789
1791 auto &DL = CB.getDataLayout();
1792
1793 // To avoid inserting redundant assumptions, we should check for assumptions
1794 // already in the caller. To do this, we might need a DT of the caller.
1795 DominatorTree DT;
1796 bool DTCalculated = false;
1797
1798 Function *CalledFunc = CB.getCalledFunction();
1799 for (Argument &Arg : CalledFunc->args()) {
1800 if (!Arg.getType()->isPointerTy() || Arg.hasPassPointeeByValueCopyAttr() ||
1801 Arg.use_empty())
1802 continue;
1803 MaybeAlign Alignment = Arg.getParamAlign();
1804 if (!Alignment)
1805 continue;
1806
1807 if (!DTCalculated) {
1808 DT.recalculate(*CB.getCaller());
1809 DTCalculated = true;
1810 }
1811 // If we can already prove the asserted alignment in the context of the
1812 // caller, then don't bother inserting the assumption.
1813 Value *ArgVal = CB.getArgOperand(Arg.getArgNo());
1814 if (getKnownAlignment(ArgVal, DL, &CB, AC, &DT) >= *Alignment)
1815 continue;
1816
1817 CallInst *NewAsmp = IRBuilder<>(&CB).CreateAlignmentAssumption(
1818 DL, ArgVal, Alignment->value());
1820 }
1821}
1822
1823static void HandleByValArgumentInit(Type *ByValType, Value *Dst, Value *Src,
1824 MaybeAlign SrcAlign, Module *M,
1825 BasicBlock *InsertBlock,
1826 InlineFunctionInfo &IFI,
1827 Function *CalledFunc) {
1828 IRBuilder<> Builder(InsertBlock, InsertBlock->begin());
1829
1830 Value *Size =
1831 Builder.getInt64(M->getDataLayout().getTypeStoreSize(ByValType));
1832
1833 Align DstAlign = Dst->getPointerAlignment(M->getDataLayout());
1834
1835 // Generate a memcpy with the correct alignments.
1836 CallInst *CI = Builder.CreateMemCpy(Dst, DstAlign, Src, SrcAlign, Size);
1837
1838 // The verifier requires that all calls of debug-info-bearing functions
1839 // from debug-info-bearing functions have a debug location (for inlining
1840 // purposes). Assign a dummy location to satisfy the constraint.
1841 if (!CI->getDebugLoc() && InsertBlock->getParent()->getSubprogram())
1842 if (DISubprogram *SP = CalledFunc->getSubprogram())
1843 CI->setDebugLoc(DILocation::get(SP->getContext(), 0, 0, SP));
1844}
1845
1846/// When inlining a call site that has a byval argument,
1847/// we have to make the implicit memcpy explicit by adding it.
1848static Value *HandleByValArgument(Type *ByValType, Value *Arg,
1849 Instruction *TheCall,
1850 const Function *CalledFunc,
1851 InlineFunctionInfo &IFI,
1852 MaybeAlign ByValAlignment) {
1853 Function *Caller = TheCall->getFunction();
1854 const DataLayout &DL = Caller->getDataLayout();
1855
1856 // If the called function is readonly, then it could not mutate the caller's
1857 // copy of the byval'd memory. In this case, it is safe to elide the copy and
1858 // temporary.
1859 if (CalledFunc->onlyReadsMemory()) {
1860 // If the byval argument has a specified alignment that is greater than the
1861 // passed in pointer, then we either have to round up the input pointer or
1862 // give up on this transformation.
1863 if (ByValAlignment.valueOrOne() == 1)
1864 return Arg;
1865
1866 AssumptionCache *AC =
1867 IFI.GetAssumptionCache ? &IFI.GetAssumptionCache(*Caller) : nullptr;
1868
1869 // If the pointer is already known to be sufficiently aligned, or if we can
1870 // round it up to a larger alignment, then we don't need a temporary.
1871 if (getOrEnforceKnownAlignment(Arg, *ByValAlignment, DL, TheCall, AC) >=
1872 *ByValAlignment)
1873 return Arg;
1874
1875 // Otherwise, we have to make a memcpy to get a safe alignment. This is bad
1876 // for code quality, but rarely happens and is required for correctness.
1877 }
1878
1879 // Create the alloca. If we have DataLayout, use nice alignment.
1880 Align Alignment = DL.getPrefTypeAlign(ByValType);
1881
1882 // If the byval had an alignment specified, we *must* use at least that
1883 // alignment, as it is required by the byval argument (and uses of the
1884 // pointer inside the callee).
1885 if (ByValAlignment)
1886 Alignment = std::max(Alignment, *ByValAlignment);
1887
1888 AllocaInst *NewAlloca =
1889 new AllocaInst(ByValType, Arg->getType()->getPointerAddressSpace(),
1890 nullptr, Alignment, Arg->getName());
1892 NewAlloca->insertBefore(Caller->begin()->begin());
1893 IFI.StaticAllocas.push_back(NewAlloca);
1894
1895 // Uses of the argument in the function should use our new alloca
1896 // instead.
1897 return NewAlloca;
1898}
1899
1900// Check whether this Value is used by a lifetime intrinsic.
1902 for (User *U : V->users())
1904 return true;
1905 return false;
1906}
1907
1908// Check whether the given alloca already has
1909// lifetime.start or lifetime.end intrinsics.
1911 Type *Ty = AI->getType();
1912 Type *Int8PtrTy =
1913 PointerType::get(Ty->getContext(), Ty->getPointerAddressSpace());
1914 if (Ty == Int8PtrTy)
1915 return isUsedByLifetimeMarker(AI);
1916
1917 // Do a scan to find all the casts to i8*.
1918 for (User *U : AI->users()) {
1919 if (U->getType() != Int8PtrTy) continue;
1920 if (U->stripPointerCasts() != AI) continue;
1922 return true;
1923 }
1924 return false;
1925}
1926
1927/// Return the result of AI->isStaticAlloca() if AI were moved to the entry
1928/// block. Allocas used in inalloca calls and allocas of dynamic array size
1929/// cannot be static.
1931 return isa<Constant>(AI->getArraySize()) && !AI->isUsedWithInAlloca();
1932}
1933
1934/// Returns a DebugLoc for a new DILocation which is a clone of \p OrigDL
1935/// inlined at \p InlinedAt. \p IANodes is an inlined-at cache.
1936static DebugLoc inlineDebugLoc(DebugLoc OrigDL, DILocation *InlinedAt,
1937 LLVMContext &Ctx,
1939 auto IA = DebugLoc::appendInlinedAt(OrigDL, InlinedAt, Ctx, IANodes);
1940 return DILocation::get(Ctx, OrigDL.getLine(), OrigDL.getCol(),
1941 OrigDL.getScope(), IA, OrigDL.isImplicitCode(),
1942 OrigDL->getAtomGroup(), OrigDL->getAtomRank());
1943}
1944
1945/// Update inlined instructions' line numbers to
1946/// to encode location where these instructions are inlined.
1948 Instruction *TheCall, bool CalleeHasDebugInfo) {
1949 if (!TheCall->getDebugLoc())
1950 return;
1951
1952 // Don't propagate the source location atom from the call to inlined nodebug
1953 // instructions, and avoid putting it in the InlinedAt field of inlined
1954 // not-nodebug instructions. FIXME: Possibly worth transferring/generating
1955 // an atom for the returned value, otherwise we miss stepping on inlined
1956 // nodebug functions (which is different to existing behaviour).
1957 DebugLoc TheCallDL = TheCall->getDebugLoc()->getWithoutAtom();
1958
1959 auto &Ctx = Fn->getContext();
1960 DILocation *InlinedAtNode = TheCallDL;
1961
1962 // Create a unique call site, not to be confused with any other call from the
1963 // same location.
1964 InlinedAtNode = DILocation::getDistinct(
1965 Ctx, InlinedAtNode->getLine(), InlinedAtNode->getColumn(),
1966 InlinedAtNode->getScope(), InlinedAtNode->getInlinedAt());
1967
1968 // Cache the inlined-at nodes as they're built so they are reused, without
1969 // this every instruction's inlined-at chain would become distinct from each
1970 // other.
1972
1973 // Check if we are not generating inline line tables and want to use
1974 // the call site location instead.
1975 bool NoInlineLineTables = Fn->hasFnAttribute("no-inline-line-tables");
1976
1977 // Helper-util for updating the metadata attached to an instruction.
1978 auto UpdateInst = [&](Instruction &I) {
1979 // Loop metadata needs to be updated so that the start and end locs
1980 // reference inlined-at locations.
1981 auto updateLoopInfoLoc = [&Ctx, &InlinedAtNode,
1982 &IANodes](Metadata *MD) -> Metadata * {
1983 if (auto *Loc = dyn_cast_or_null<DILocation>(MD))
1984 return inlineDebugLoc(Loc, InlinedAtNode, Ctx, IANodes).get();
1985 return MD;
1986 };
1987 updateLoopMetadataDebugLocations(I, updateLoopInfoLoc);
1988
1989 if (!NoInlineLineTables)
1990 if (DebugLoc DL = I.getDebugLoc()) {
1991 DebugLoc IDL =
1992 inlineDebugLoc(DL, InlinedAtNode, I.getContext(), IANodes);
1993 I.setDebugLoc(IDL);
1994 return;
1995 }
1996
1997 if (CalleeHasDebugInfo && !NoInlineLineTables)
1998 return;
1999
2000 // If the inlined instruction has no line number, or if inline info
2001 // is not being generated, make it look as if it originates from the call
2002 // location. This is important for ((__always_inline, __nodebug__))
2003 // functions which must use caller location for all instructions in their
2004 // function body.
2005
2006 // Don't update static allocas, as they may get moved later.
2007 if (auto *AI = dyn_cast<AllocaInst>(&I))
2009 return;
2010
2011 // Do not force a debug loc for pseudo probes, since they do not need to
2012 // be debuggable, and also they are expected to have a zero/null dwarf
2013 // discriminator at this point which could be violated otherwise.
2015 return;
2016
2017 I.setDebugLoc(TheCallDL);
2018 };
2019
2020 // Helper-util for updating debug-info records attached to instructions.
2021 auto UpdateDVR = [&](DbgRecord *DVR) {
2022 assert(DVR->getDebugLoc() && "Debug Value must have debug loc");
2023 if (NoInlineLineTables) {
2024 DVR->setDebugLoc(TheCallDL);
2025 return;
2026 }
2027 DebugLoc DL = DVR->getDebugLoc();
2028 DebugLoc IDL =
2029 inlineDebugLoc(DL, InlinedAtNode,
2030 DVR->getMarker()->getParent()->getContext(), IANodes);
2031 DVR->setDebugLoc(IDL);
2032 };
2033
2034 // Iterate over all instructions, updating metadata and debug-info records.
2035 for (; FI != Fn->end(); ++FI) {
2036 for (Instruction &I : *FI) {
2037 UpdateInst(I);
2038 for (DbgRecord &DVR : I.getDbgRecordRange()) {
2039 UpdateDVR(&DVR);
2040 }
2041 }
2042
2043 // Remove debug info records if we're not keeping inline info.
2044 if (NoInlineLineTables) {
2045 BasicBlock::iterator BI = FI->begin();
2046 while (BI != FI->end()) {
2047 BI->dropDbgRecords();
2048 ++BI;
2049 }
2050 }
2051 }
2052}
2053
2054#undef DEBUG_TYPE
2055#define DEBUG_TYPE "assignment-tracking"
2056/// Find Alloca and linked DbgAssignIntrinsic for locals escaped by \p CB.
2058 const CallBase &CB) {
2059 at::StorageToVarsMap EscapedLocals;
2061
2062 LLVM_DEBUG(
2063 errs() << "# Finding caller local variables escaped by callee\n");
2064 for (const Value *Arg : CB.args()) {
2065 LLVM_DEBUG(errs() << "INSPECT: " << *Arg << "\n");
2066 if (!Arg->getType()->isPointerTy()) {
2067 LLVM_DEBUG(errs() << " | SKIP: Not a pointer\n");
2068 continue;
2069 }
2070
2071 const Instruction *I = dyn_cast<Instruction>(Arg);
2072 if (!I) {
2073 LLVM_DEBUG(errs() << " | SKIP: Not result of instruction\n");
2074 continue;
2075 }
2076
2077 // Walk back to the base storage.
2078 assert(Arg->getType()->isPtrOrPtrVectorTy());
2079 APInt TmpOffset(DL.getIndexTypeSizeInBits(Arg->getType()), 0, false);
2081 Arg->stripAndAccumulateConstantOffsets(DL, TmpOffset, true));
2082 if (!Base) {
2083 LLVM_DEBUG(errs() << " | SKIP: Couldn't walk back to base storage\n");
2084 continue;
2085 }
2086
2087 assert(Base);
2088 LLVM_DEBUG(errs() << " | BASE: " << *Base << "\n");
2089 // We only need to process each base address once - skip any duplicates.
2090 if (!SeenBases.insert(Base).second)
2091 continue;
2092
2093 // Find all local variables associated with the backing storage.
2094 auto CollectAssignsForStorage = [&](DbgVariableRecord *DbgAssign) {
2095 // Skip variables from inlined functions - they are not local variables.
2096 if (DbgAssign->getDebugLoc().getInlinedAt())
2097 return;
2098 LLVM_DEBUG(errs() << " > DEF : " << *DbgAssign << "\n");
2099 EscapedLocals[Base].insert(at::VarRecord(DbgAssign));
2100 };
2101 for_each(at::getDVRAssignmentMarkers(Base), CollectAssignsForStorage);
2102 }
2103 return EscapedLocals;
2104}
2105
2107 const CallBase &CB) {
2108 LLVM_DEBUG(errs() << "trackInlinedStores into "
2109 << Start->getParent()->getName() << " from "
2110 << CB.getCalledFunction()->getName() << "\n");
2111 const DataLayout &DL = CB.getDataLayout();
2113}
2114
2115/// Update inlined instructions' DIAssignID metadata. We need to do this
2116/// otherwise a function inlined more than once into the same function
2117/// will cause DIAssignID to be shared by many instructions.
2120 // Loop over all the inlined instructions. If we find a DIAssignID
2121 // attachment or use, replace it with a new version.
2122 for (auto BBI = Start; BBI != End; ++BBI) {
2123 for (Instruction &I : *BBI)
2124 at::remapAssignID(Map, I);
2125 }
2126}
2127#undef DEBUG_TYPE
2128#define DEBUG_TYPE "inline-function"
2129
2130/// Update the block frequencies of the caller after a callee has been inlined.
2131///
2132/// Each block cloned into the caller has its block frequency scaled by the
2133/// ratio of CallSiteFreq/CalleeEntryFreq. This ensures that the cloned copy of
2134/// callee's entry block gets the same frequency as the callsite block and the
2135/// relative frequencies of all cloned blocks remain the same after cloning.
2136static void updateCallerBFI(BasicBlock *CallSiteBlock,
2137 const ValueToValueMapTy &VMap,
2138 BlockFrequencyInfo *CallerBFI,
2139 BlockFrequencyInfo *CalleeBFI,
2140 const BasicBlock &CalleeEntryBlock) {
2142 for (auto Entry : VMap) {
2143 if (!isa<BasicBlock>(Entry.first) || !Entry.second)
2144 continue;
2145 auto *OrigBB = cast<BasicBlock>(Entry.first);
2146 auto *ClonedBB = cast<BasicBlock>(Entry.second);
2147 BlockFrequency Freq = CalleeBFI->getBlockFreq(OrigBB);
2148 if (!ClonedBBs.insert(ClonedBB).second) {
2149 // Multiple blocks in the callee might get mapped to one cloned block in
2150 // the caller since we prune the callee as we clone it. When that happens,
2151 // we want to use the maximum among the original blocks' frequencies.
2152 BlockFrequency NewFreq = CallerBFI->getBlockFreq(ClonedBB);
2153 if (NewFreq > Freq)
2154 Freq = NewFreq;
2155 }
2156 CallerBFI->setBlockFreq(ClonedBB, Freq);
2157 }
2158 BasicBlock *EntryClone = cast<BasicBlock>(VMap.lookup(&CalleeEntryBlock));
2159 CallerBFI->setBlockFreqAndScale(
2160 EntryClone, CallerBFI->getBlockFreq(CallSiteBlock), ClonedBBs);
2161}
2162
2163/// Update the branch metadata for cloned call instructions.
2164static void updateCallProfile(Function *Callee, const ValueToValueMapTy &VMap,
2165 const ProfileCount &CalleeEntryCount,
2166 const CallBase &TheCall, ProfileSummaryInfo *PSI,
2167 BlockFrequencyInfo *CallerBFI) {
2168 if (CalleeEntryCount.isSynthetic() || CalleeEntryCount.getCount() < 1)
2169 return;
2170 auto CallSiteCount =
2171 PSI ? PSI->getProfileCount(TheCall, CallerBFI) : std::nullopt;
2172 int64_t CallCount =
2173 std::min(CallSiteCount.value_or(0), CalleeEntryCount.getCount());
2174 updateProfileCallee(Callee, -CallCount, &VMap);
2175}
2176
2178 Function *Callee, int64_t EntryDelta,
2180 auto CalleeCount = Callee->getEntryCount();
2181 if (!CalleeCount)
2182 return;
2183
2184 const uint64_t PriorEntryCount = CalleeCount->getCount();
2185
2186 // Since CallSiteCount is an estimate, it could exceed the original callee
2187 // count and has to be set to 0 so guard against underflow.
2188 const uint64_t NewEntryCount =
2189 (EntryDelta < 0 && static_cast<uint64_t>(-EntryDelta) > PriorEntryCount)
2190 ? 0
2191 : PriorEntryCount + EntryDelta;
2192
2193 auto updateVTableProfWeight = [](CallBase *CB, const uint64_t NewEntryCount,
2194 const uint64_t PriorEntryCount) {
2196 if (VPtr)
2197 scaleProfData(*VPtr, NewEntryCount, PriorEntryCount);
2198 };
2199
2200 // During inlining ?
2201 if (VMap) {
2202 uint64_t CloneEntryCount = PriorEntryCount - NewEntryCount;
2203 for (auto Entry : *VMap) {
2204 if (isa<CallInst>(Entry.first))
2205 if (auto *CI = dyn_cast_or_null<CallInst>(Entry.second)) {
2206 CI->updateProfWeight(CloneEntryCount, PriorEntryCount);
2207 updateVTableProfWeight(CI, CloneEntryCount, PriorEntryCount);
2208 }
2209
2210 if (isa<InvokeInst>(Entry.first))
2211 if (auto *II = dyn_cast_or_null<InvokeInst>(Entry.second)) {
2212 II->updateProfWeight(CloneEntryCount, PriorEntryCount);
2213 updateVTableProfWeight(II, CloneEntryCount, PriorEntryCount);
2214 }
2215 }
2216 }
2217
2218 if (EntryDelta) {
2219 Callee->setEntryCount(NewEntryCount);
2220
2221 for (BasicBlock &BB : *Callee)
2222 // No need to update the callsite if it is pruned during inlining.
2223 if (!VMap || VMap->count(&BB))
2224 for (Instruction &I : BB) {
2225 if (CallInst *CI = dyn_cast<CallInst>(&I)) {
2226 CI->updateProfWeight(NewEntryCount, PriorEntryCount);
2227 updateVTableProfWeight(CI, NewEntryCount, PriorEntryCount);
2228 }
2230 II->updateProfWeight(NewEntryCount, PriorEntryCount);
2231 updateVTableProfWeight(II, NewEntryCount, PriorEntryCount);
2232 }
2233 }
2234 }
2235}
2236
2237/// An operand bundle "clang.arc.attachedcall" on a call indicates the call
2238/// result is implicitly consumed by a call to retainRV or claimRV immediately
2239/// after the call. This function inlines the retainRV/claimRV calls.
2240///
2241/// There are three cases to consider:
2242///
2243/// 1. If there is a call to autoreleaseRV that takes a pointer to the returned
2244/// object in the callee return block, the autoreleaseRV call and the
2245/// retainRV/claimRV call in the caller cancel out. If the call in the caller
2246/// is a claimRV call, a call to objc_release is emitted.
2247///
2248/// 2. If there is a call in the callee return block that doesn't have operand
2249/// bundle "clang.arc.attachedcall", the operand bundle on the original call
2250/// is transferred to the call in the callee.
2251///
2252/// 3. Otherwise, a call to objc_retain is inserted if the call in the caller is
2253/// a retainRV call.
2254static void
2256 const SmallVectorImpl<ReturnInst *> &Returns) {
2257 assert(objcarc::isRetainOrClaimRV(RVCallKind) && "unexpected ARC function");
2258 bool IsRetainRV = RVCallKind == objcarc::ARCInstKind::RetainRV,
2259 IsUnsafeClaimRV = !IsRetainRV;
2260
2261 for (auto *RI : Returns) {
2262 Value *RetOpnd = objcarc::GetRCIdentityRoot(RI->getOperand(0));
2263 bool InsertRetainCall = IsRetainRV;
2264 IRBuilder<> Builder(RI->getContext());
2265
2266 // Walk backwards through the basic block looking for either a matching
2267 // autoreleaseRV call or an unannotated call.
2268 auto InstRange = llvm::make_range(++(RI->getIterator().getReverse()),
2269 RI->getParent()->rend());
2270 for (Instruction &I : llvm::make_early_inc_range(InstRange)) {
2271 // Ignore casts.
2272 if (isa<CastInst>(I))
2273 continue;
2274
2275 if (auto *II = dyn_cast<IntrinsicInst>(&I)) {
2276 if (II->getIntrinsicID() != Intrinsic::objc_autoreleaseReturnValue ||
2277 !II->use_empty() ||
2278 objcarc::GetRCIdentityRoot(II->getOperand(0)) != RetOpnd)
2279 break;
2280
2281 // If we've found a matching authoreleaseRV call:
2282 // - If claimRV is attached to the call, insert a call to objc_release
2283 // and erase the autoreleaseRV call.
2284 // - If retainRV is attached to the call, just erase the autoreleaseRV
2285 // call.
2286 if (IsUnsafeClaimRV) {
2287 Builder.SetInsertPoint(II);
2288 Builder.CreateIntrinsic(Intrinsic::objc_release, RetOpnd);
2289 }
2290 II->eraseFromParent();
2291 InsertRetainCall = false;
2292 break;
2293 }
2294
2295 auto *CI = dyn_cast<CallInst>(&I);
2296
2297 if (!CI)
2298 break;
2299
2300 if (objcarc::GetRCIdentityRoot(CI) != RetOpnd ||
2302 break;
2303
2304 // If we've found an unannotated call that defines RetOpnd, add a
2305 // "clang.arc.attachedcall" operand bundle.
2306 Value *BundleArgs[] = {*objcarc::getAttachedARCFunction(&CB)};
2307 OperandBundleDef OB("clang.arc.attachedcall", BundleArgs);
2308 auto *NewCall = CallBase::addOperandBundle(
2309 CI, LLVMContext::OB_clang_arc_attachedcall, OB, CI->getIterator());
2310 NewCall->copyMetadata(*CI);
2311 CI->replaceAllUsesWith(NewCall);
2312 CI->eraseFromParent();
2313 InsertRetainCall = false;
2314 break;
2315 }
2316
2317 if (InsertRetainCall) {
2318 // The retainRV is attached to the call and we've failed to find a
2319 // matching autoreleaseRV or an annotated call in the callee. Emit a call
2320 // to objc_retain.
2321 Builder.SetInsertPoint(RI);
2322 Builder.CreateIntrinsic(Intrinsic::objc_retain, RetOpnd);
2323 }
2324 }
2325}
2326
2327// In contextual profiling, when an inline succeeds, we want to remap the
2328// indices of the callee into the index space of the caller. We can't just leave
2329// them as-is because the same callee may appear in other places in this caller
2330// (other callsites), and its (callee's) counters and sub-contextual profile
2331// tree would be potentially different.
2332// Not all BBs of the callee may survive the opportunistic DCE InlineFunction
2333// does (same goes for callsites in the callee).
2334// We will return a pair of vectors, one for basic block IDs and one for
2335// callsites. For such a vector V, V[Idx] will be -1 if the callee
2336// instrumentation with index Idx did not survive inlining, and a new value
2337// otherwise.
2338// This function will update the caller's instrumentation intrinsics
2339// accordingly, mapping indices as described above. We also replace the "name"
2340// operand because we use it to distinguish between "own" instrumentation and
2341// "from callee" instrumentation when performing the traversal of the CFG of the
2342// caller. We traverse depth-first from the callsite's BB and up to the point we
2343// hit BBs owned by the caller.
2344// The return values will be then used to update the contextual
2345// profile. Note: we only update the "name" and "index" operands in the
2346// instrumentation intrinsics, we leave the hash and total nr of indices as-is,
2347// it's not worth updating those.
2348static std::pair<std::vector<int64_t>, std::vector<int64_t>>
2350 PGOContextualProfile &CtxProf, uint32_t CalleeCounters,
2351 uint32_t CalleeCallsites) {
2352 // We'll allocate a new ID to imported callsite counters and callsites. We're
2353 // using -1 to indicate a counter we delete. Most likely the entry ID, for
2354 // example, will be deleted - we don't want 2 IDs in the same BB, and the
2355 // entry would have been cloned in the callsite's old BB.
2356 std::vector<int64_t> CalleeCounterMap;
2357 std::vector<int64_t> CalleeCallsiteMap;
2358 CalleeCounterMap.resize(CalleeCounters, -1);
2359 CalleeCallsiteMap.resize(CalleeCallsites, -1);
2360
2361 auto RewriteInstrIfNeeded = [&](InstrProfIncrementInst &Ins) -> bool {
2362 if (Ins.getNameValue() == &Caller)
2363 return false;
2364 const auto OldID = static_cast<uint32_t>(Ins.getIndex()->getZExtValue());
2365 if (CalleeCounterMap[OldID] == -1)
2366 CalleeCounterMap[OldID] = CtxProf.allocateNextCounterIndex(Caller);
2367 const auto NewID = static_cast<uint32_t>(CalleeCounterMap[OldID]);
2368
2369 Ins.setNameValue(&Caller);
2370 Ins.setIndex(NewID);
2371 return true;
2372 };
2373
2374 auto RewriteCallsiteInsIfNeeded = [&](InstrProfCallsite &Ins) -> bool {
2375 if (Ins.getNameValue() == &Caller)
2376 return false;
2377 const auto OldID = static_cast<uint32_t>(Ins.getIndex()->getZExtValue());
2378 if (CalleeCallsiteMap[OldID] == -1)
2379 CalleeCallsiteMap[OldID] = CtxProf.allocateNextCallsiteIndex(Caller);
2380 const auto NewID = static_cast<uint32_t>(CalleeCallsiteMap[OldID]);
2381
2382 Ins.setNameValue(&Caller);
2383 Ins.setIndex(NewID);
2384 return true;
2385 };
2386
2387 std::deque<BasicBlock *> Worklist;
2389 // We will traverse the BBs starting from the callsite BB. The callsite BB
2390 // will have at least a BB ID - maybe its own, and in any case the one coming
2391 // from the cloned function's entry BB. The other BBs we'll start seeing from
2392 // there on may or may not have BB IDs. BBs with IDs belonging to our caller
2393 // are definitely not coming from the imported function and form a boundary
2394 // past which we don't need to traverse anymore. BBs may have no
2395 // instrumentation (because we originally inserted instrumentation as per
2396 // MST), in which case we'll traverse past them. An invariant we'll keep is
2397 // that a BB will have at most 1 BB ID. For example, in the callsite BB, we
2398 // will delete the callee BB's instrumentation. This doesn't result in
2399 // information loss: the entry BB of the callee will have the same count as
2400 // the callsite's BB. At the end of this traversal, all the callee's
2401 // instrumentation would be mapped into the caller's instrumentation index
2402 // space. Some of the callee's counters may be deleted (as mentioned, this
2403 // should result in no loss of information).
2404 Worklist.push_back(StartBB);
2405 while (!Worklist.empty()) {
2406 auto *BB = Worklist.front();
2407 Worklist.pop_front();
2408 bool Changed = false;
2409 auto *BBID = CtxProfAnalysis::getBBInstrumentation(*BB);
2410 if (BBID) {
2411 Changed |= RewriteInstrIfNeeded(*BBID);
2412 // this may be the entryblock from the inlined callee, coming into a BB
2413 // that didn't have instrumentation because of MST decisions. Let's make
2414 // sure it's placed accordingly. This is a noop elsewhere.
2415 BBID->moveBefore(BB->getFirstInsertionPt());
2416 }
2417 for (auto &I : llvm::make_early_inc_range(*BB)) {
2418 if (auto *Inc = dyn_cast<InstrProfIncrementInst>(&I)) {
2420 // Step instrumentation is used for select instructions. Inlining may
2421 // have propagated a constant resulting in the condition of the select
2422 // being resolved, case in which function cloning resolves the value
2423 // of the select, and elides the select instruction. If that is the
2424 // case, the step parameter of the instrumentation will reflect that.
2425 // We can delete the instrumentation in that case.
2426 if (isa<Constant>(Inc->getStep())) {
2427 assert(!Inc->getNextNode() || !isa<SelectInst>(Inc->getNextNode()));
2428 Inc->eraseFromParent();
2429 } else {
2430 assert(isa_and_nonnull<SelectInst>(Inc->getNextNode()));
2431 RewriteInstrIfNeeded(*Inc);
2432 }
2433 } else if (Inc != BBID) {
2434 // If we're here it means that the BB had more than 1 IDs, presumably
2435 // some coming from the callee. We "made up our mind" to keep the
2436 // first one (which may or may not have been originally the caller's).
2437 // All the others are superfluous and we delete them.
2438 Inc->eraseFromParent();
2439 Changed = true;
2440 }
2441 } else if (auto *CS = dyn_cast<InstrProfCallsite>(&I)) {
2442 Changed |= RewriteCallsiteInsIfNeeded(*CS);
2443 }
2444 }
2445 if (!BBID || Changed)
2446 for (auto *Succ : successors(BB))
2447 if (Seen.insert(Succ).second)
2448 Worklist.push_back(Succ);
2449 }
2450
2451 assert(!llvm::is_contained(CalleeCounterMap, 0) &&
2452 "Counter index mapping should be either to -1 or to non-zero index, "
2453 "because the 0 "
2454 "index corresponds to the entry BB of the caller");
2455 assert(!llvm::is_contained(CalleeCallsiteMap, 0) &&
2456 "Callsite index mapping should be either to -1 or to non-zero index, "
2457 "because there should have been at least a callsite - the inlined one "
2458 "- which would have had a 0 index.");
2459
2460 return {std::move(CalleeCounterMap), std::move(CalleeCallsiteMap)};
2461}
2462
2463// Inline. If successful, update the contextual profile (if a valid one is
2464// given).
2465// The contextual profile data is organized in trees, as follows:
2466// - each node corresponds to a function
2467// - the root of each tree corresponds to an "entrypoint" - e.g.
2468// RPC handler for server side
2469// - the path from the root to a node is a particular call path
2470// - the counters stored in a node are counter values observed in that
2471// particular call path ("context")
2472// - the edges between nodes are annotated with callsite IDs.
2473//
2474// Updating the contextual profile after an inlining means, at a high level,
2475// copying over the data of the callee, **intentionally without any value
2476// scaling**, and copying over the callees of the inlined callee.
2477llvm::InlineResult
2479 PGOContextualProfile &CtxProf, bool MergeAttributes,
2480 AAResults *CalleeAAR, bool InsertLifetime,
2481 bool TrackInlineHistory, Function *ForwardVarArgsTo,
2483 if (!CtxProf.isInSpecializedModule())
2484 return InlineFunction(CB, IFI, MergeAttributes, CalleeAAR, InsertLifetime,
2485 TrackInlineHistory, ForwardVarArgsTo, ORE);
2486
2487 auto &Caller = *CB.getCaller();
2488 auto &Callee = *CB.getCalledFunction();
2489 auto *StartBB = CB.getParent();
2490
2491 // Get some preliminary data about the callsite before it might get inlined.
2492 // Inlining shouldn't delete the callee, but it's cleaner (and low-cost) to
2493 // get this data upfront and rely less on InlineFunction's behavior.
2494 const auto CalleeGUID = AssignGUIDPass::getGUID(Callee);
2495 auto *CallsiteIDIns = CtxProfAnalysis::getCallsiteInstrumentation(CB);
2496 const auto CallsiteID =
2497 static_cast<uint32_t>(CallsiteIDIns->getIndex()->getZExtValue());
2498
2499 const auto NumCalleeCounters = CtxProf.getNumCounters(Callee);
2500 const auto NumCalleeCallsites = CtxProf.getNumCallsites(Callee);
2501
2502 auto Ret = InlineFunction(CB, IFI, MergeAttributes, CalleeAAR, InsertLifetime,
2503 TrackInlineHistory, ForwardVarArgsTo, ORE);
2504 if (!Ret.isSuccess())
2505 return Ret;
2506
2507 // Inlining succeeded, we don't need the instrumentation of the inlined
2508 // callsite.
2509 CallsiteIDIns->eraseFromParent();
2510
2511 // Assinging Maps and then capturing references into it in the lambda because
2512 // captured structured bindings are a C++20 extension. We do also need a
2513 // capture here, though.
2514 const auto IndicesMaps = remapIndices(Caller, StartBB, CtxProf,
2515 NumCalleeCounters, NumCalleeCallsites);
2516 const uint32_t NewCountersSize = CtxProf.getNumCounters(Caller);
2517
2518 auto Updater = [&](PGOCtxProfContext &Ctx) {
2519 assert(Ctx.guid() == AssignGUIDPass::getGUID(Caller));
2520 const auto &[CalleeCounterMap, CalleeCallsiteMap] = IndicesMaps;
2521 assert(
2522 (Ctx.counters().size() +
2523 llvm::count_if(CalleeCounterMap, [](auto V) { return V != -1; }) ==
2524 NewCountersSize) &&
2525 "The caller's counters size should have grown by the number of new "
2526 "distinct counters inherited from the inlined callee.");
2527 Ctx.resizeCounters(NewCountersSize);
2528 // If the callsite wasn't exercised in this context, the value of the
2529 // counters coming from it is 0 - which it is right now, after resizing them
2530 // - and so we're done.
2531 auto CSIt = Ctx.callsites().find(CallsiteID);
2532 if (CSIt == Ctx.callsites().end())
2533 return;
2534 auto CalleeCtxIt = CSIt->second.find(CalleeGUID);
2535 // The callsite was exercised, but not with this callee (so presumably this
2536 // is an indirect callsite). Again, we're done here.
2537 if (CalleeCtxIt == CSIt->second.end())
2538 return;
2539
2540 // Let's pull in the counter values and the subcontexts coming from the
2541 // inlined callee.
2542 auto &CalleeCtx = CalleeCtxIt->second;
2543 assert(CalleeCtx.guid() == CalleeGUID);
2544
2545 for (auto I = 0U; I < CalleeCtx.counters().size(); ++I) {
2546 const int64_t NewIndex = CalleeCounterMap[I];
2547 if (NewIndex >= 0) {
2548 assert(NewIndex != 0 && "counter index mapping shouldn't happen to a 0 "
2549 "index, that's the caller's entry BB");
2550 Ctx.counters()[NewIndex] = CalleeCtx.counters()[I];
2551 }
2552 }
2553 for (auto &[I, OtherSet] : CalleeCtx.callsites()) {
2554 const int64_t NewCSIdx = CalleeCallsiteMap[I];
2555 if (NewCSIdx >= 0) {
2556 assert(NewCSIdx != 0 &&
2557 "callsite index mapping shouldn't happen to a 0 index, the "
2558 "caller must've had at least one callsite (with such an index)");
2559 Ctx.ingestAllContexts(NewCSIdx, std::move(OtherSet));
2560 }
2561 }
2562 // We know the traversal is preorder, so it wouldn't have yet looked at the
2563 // sub-contexts of this context that it's currently visiting. Meaning, the
2564 // erase below invalidates no iterators.
2565 auto Deleted = Ctx.callsites().erase(CallsiteID);
2566 assert(Deleted);
2567 (void)Deleted;
2568 };
2569 CtxProf.update(Updater, Caller);
2570 return Ret;
2571}
2572
2574 InlineFunctionInfo &IFI) {
2575 assert(CB.getParent() && CB.getFunction() && "Instruction not in function!");
2576
2577 // FIXME: we don't inline callbr yet.
2578 if (isa<CallBrInst>(CB))
2579 return InlineResult::failure("We don't inline callbr yet.");
2580
2581 // If IFI has any state in it, zap it before we fill it in.
2582 IFI.reset();
2583
2584 Function *CalledFunc = CB.getCalledFunction();
2585 if (!CalledFunc || // Can't inline external function or indirect
2586 CalledFunc->isDeclaration()) // call!
2587 return InlineResult::failure("external or indirect");
2588
2589 // Don't inline if we've already inlined this callee through this call site
2590 // before to prevent infinite inlining through mutually recursive functions.
2591 if (MDNode *InlineHistory = CB.getMetadata(LLVMContext::MD_inline_history)) {
2592 for (const auto &Op : InlineHistory->operands()) {
2593 if (auto *MD = dyn_cast_or_null<ValueAsMetadata>(Op)) {
2594 if (MD->getValue() == CalledFunc) {
2595 return InlineResult::failure("inline history");
2596 }
2597 }
2598 }
2599 }
2600
2601 // The inliner does not know how to inline through calls with operand bundles
2602 // in general ...
2603 if (CB.hasOperandBundles()) {
2604 for (int i = 0, e = CB.getNumOperandBundles(); i != e; ++i) {
2605 auto OBUse = CB.getOperandBundleAt(i);
2606 uint32_t Tag = OBUse.getTagID();
2607 // ... but it knows how to inline through "deopt" operand bundles ...
2609 continue;
2610 // ... and "funclet" operand bundles.
2612 continue;
2614 continue;
2616 continue;
2618 IFI.ConvergenceControlToken = OBUse.Inputs[0].get();
2619 continue;
2620 }
2621
2622 return InlineResult::failure("unsupported operand bundle");
2623 }
2624 }
2625
2626 // FIXME: The check below is redundant and incomplete. According to spec, if a
2627 // convergent call is missing a token, then the caller is using uncontrolled
2628 // convergence. If the callee has an entry intrinsic, then the callee is using
2629 // controlled convergence, and the call cannot be inlined. A proper
2630 // implemenation of this check requires a whole new analysis that identifies
2631 // convergence in every function. For now, we skip that and just do this one
2632 // cursory check. The underlying assumption is that in a compiler flow that
2633 // fully implements convergence control tokens, there is no mixing of
2634 // controlled and uncontrolled convergent operations in the whole program.
2635 if (CB.isConvergent()) {
2636 if (!IFI.ConvergenceControlToken &&
2637 getConvergenceEntry(CalledFunc->getEntryBlock())) {
2638 return InlineResult::failure(
2639 "convergent call needs convergencectrl operand");
2640 }
2641 }
2642
2643 const BasicBlock *OrigBB = CB.getParent();
2644 const Function *Caller = OrigBB->getParent();
2645
2646 // GC poses two hazards to inlining, which only occur when the callee has GC:
2647 // 1. If the caller has no GC, then the callee's GC must be propagated to the
2648 // caller.
2649 // 2. If the caller has a differing GC, it is invalid to inline.
2650 if (CalledFunc->hasGC()) {
2651 if (Caller->hasGC() && CalledFunc->getGC() != Caller->getGC())
2652 return InlineResult::failure("incompatible GC");
2653 }
2654
2655 // Get the personality function from the callee if it contains a landing pad.
2656 Constant *CalledPersonality =
2657 CalledFunc->hasPersonalityFn()
2658 ? CalledFunc->getPersonalityFn()->stripPointerCasts()
2659 : nullptr;
2660
2661 // Find the personality function used by the landing pads of the caller. If it
2662 // exists, then check to see that it matches the personality function used in
2663 // the callee.
2664 Constant *CallerPersonality =
2665 Caller->hasPersonalityFn()
2666 ? Caller->getPersonalityFn()->stripPointerCasts()
2667 : nullptr;
2668 if (CalledPersonality) {
2669 // If the personality functions match, then we can perform the
2670 // inlining. Otherwise, we can't inline.
2671 // TODO: This isn't 100% true. Some personality functions are proper
2672 // supersets of others and can be used in place of the other.
2673 if (CallerPersonality && CalledPersonality != CallerPersonality)
2674 return InlineResult::failure("incompatible personality");
2675 }
2676
2677 // We need to figure out which funclet the callsite was in so that we may
2678 // properly nest the callee.
2679 if (CallerPersonality) {
2680 EHPersonality Personality = classifyEHPersonality(CallerPersonality);
2681 if (isScopedEHPersonality(Personality)) {
2682 std::optional<OperandBundleUse> ParentFunclet =
2684 if (ParentFunclet)
2685 IFI.CallSiteEHPad = cast<FuncletPadInst>(ParentFunclet->Inputs.front());
2686
2687 // OK, the inlining site is legal. What about the target function?
2688
2689 if (IFI.CallSiteEHPad) {
2690 if (Personality == EHPersonality::MSVC_CXX) {
2691 // The MSVC personality cannot tolerate catches getting inlined into
2692 // cleanup funclets.
2694 // Ok, the call site is within a cleanuppad. Let's check the callee
2695 // for catchpads.
2696 for (const BasicBlock &CalledBB : *CalledFunc) {
2697 if (isa<CatchSwitchInst>(CalledBB.getFirstNonPHIIt()))
2698 return InlineResult::failure("catch in cleanup funclet");
2699 }
2700 }
2701 } else if (isAsynchronousEHPersonality(Personality)) {
2702 // SEH is even less tolerant, there may not be any sort of exceptional
2703 // funclet in the callee.
2704 for (const BasicBlock &CalledBB : *CalledFunc) {
2705 if (CalledBB.isEHPad())
2706 return InlineResult::failure("SEH in cleanup funclet");
2707 }
2708 }
2709 }
2710 }
2711 }
2712
2713 return InlineResult::success();
2714}
2715
2716/// This function inlines the called function into the basic block of the
2717/// caller. This returns false if it is not possible to inline this call.
2718/// The program is still in a well defined state if this occurs though.
2719///
2720/// Note that this only does one level of inlining. For example, if the
2721/// instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now
2722/// exists in the instruction stream. Similarly this will inline a recursive
2723/// function by one level.
2725 bool MergeAttributes, AAResults *CalleeAAR,
2726 bool InsertLifetime, bool TrackInlineHistory,
2727 Function *ForwardVarArgsTo,
2729 BasicBlock *OrigBB = CB.getParent();
2730 Function *Caller = OrigBB->getParent();
2731 Function *CalledFunc = CB.getCalledFunction();
2732 assert(CalledFunc && !CalledFunc->isDeclaration() &&
2733 "CanInlineCallSite should have verified direct call to definition");
2734
2735 // Determine if we are dealing with a call in an EHPad which does not unwind
2736 // to caller.
2737 bool EHPadForCallUnwindsLocally = false;
2738 if (IFI.CallSiteEHPad && isa<CallInst>(CB)) {
2739 UnwindDestMemoTy FuncletUnwindMap;
2740 Value *CallSiteUnwindDestToken =
2741 getUnwindDestToken(IFI.CallSiteEHPad, FuncletUnwindMap);
2742
2743 EHPadForCallUnwindsLocally =
2744 CallSiteUnwindDestToken &&
2745 !isa<ConstantTokenNone>(CallSiteUnwindDestToken);
2746 }
2747
2748 // Get an iterator to the last basic block in the function, which will have
2749 // the new function inlined after it.
2750 Function::iterator LastBlock = --Caller->end();
2751
2752 // Make sure to capture all of the return instructions from the cloned
2753 // function.
2755 ClonedCodeInfo InlinedFunctionInfo;
2756 Function::iterator FirstNewBlock;
2757
2758 // GC poses two hazards to inlining, which only occur when the callee has GC:
2759 // 1. If the caller has no GC, then the callee's GC must be propagated to the
2760 // caller.
2761 // 2. If the caller has a differing GC, it is invalid to inline.
2762 if (CalledFunc->hasGC()) {
2763 if (!Caller->hasGC())
2764 Caller->setGC(CalledFunc->getGC());
2765 else {
2766 assert(CalledFunc->getGC() == Caller->getGC() &&
2767 "CanInlineCallSite should have verified compatible GCs");
2768 }
2769 }
2770
2771 if (CalledFunc->hasPersonalityFn()) {
2772 Constant *CalledPersonality =
2773 CalledFunc->getPersonalityFn()->stripPointerCasts();
2774 if (!Caller->hasPersonalityFn()) {
2775 Caller->setPersonalityFn(CalledPersonality);
2776 } else
2777 assert(Caller->getPersonalityFn()->stripPointerCasts() ==
2778 CalledPersonality &&
2779 "CanInlineCallSite should have verified compatible personality");
2780 }
2781
2782 { // Scope to destroy VMap after cloning.
2783 ValueToValueMapTy VMap;
2784 struct ByValInit {
2785 Value *Dst;
2786 Value *Src;
2787 MaybeAlign SrcAlign;
2788 Type *Ty;
2789 };
2790 // Keep a list of tuples (dst, src, src_align) to emit byval
2791 // initializations. Src Alignment is only available though the callbase,
2792 // therefore has to be saved.
2793 SmallVector<ByValInit, 4> ByValInits;
2794
2795 // When inlining a function that contains noalias scope metadata,
2796 // this metadata needs to be cloned so that the inlined blocks
2797 // have different "unique scopes" at every call site.
2798 // Track the metadata that must be cloned. Do this before other changes to
2799 // the function, so that we do not get in trouble when inlining caller ==
2800 // callee.
2801 ScopedAliasMetadataDeepCloner SAMetadataCloner(CB.getCalledFunction());
2802
2803 auto &DL = Caller->getDataLayout();
2804
2805 // Calculate the vector of arguments to pass into the function cloner, which
2806 // matches up the formal to the actual argument values.
2807 auto AI = CB.arg_begin();
2808 unsigned ArgNo = 0;
2809 for (Function::arg_iterator I = CalledFunc->arg_begin(),
2810 E = CalledFunc->arg_end(); I != E; ++I, ++AI, ++ArgNo) {
2811 Value *ActualArg = *AI;
2812
2813 // When byval arguments actually inlined, we need to make the copy implied
2814 // by them explicit. However, we don't do this if the callee is readonly
2815 // or readnone, because the copy would be unneeded: the callee doesn't
2816 // modify the struct.
2817 if (CB.isByValArgument(ArgNo)) {
2818 ActualArg = HandleByValArgument(CB.getParamByValType(ArgNo), ActualArg,
2819 &CB, CalledFunc, IFI,
2820 CalledFunc->getParamAlign(ArgNo));
2821 if (ActualArg != *AI)
2822 ByValInits.push_back({ActualArg, (Value *)*AI,
2823 CB.getParamAlign(ArgNo),
2824 CB.getParamByValType(ArgNo)});
2825 }
2826
2827 VMap[&*I] = ActualArg;
2828 }
2829
2830 // TODO: Remove this when users have been updated to the assume bundles.
2831 // Add alignment assumptions if necessary. We do this before the inlined
2832 // instructions are actually cloned into the caller so that we can easily
2833 // check what will be known at the start of the inlined code.
2834 AddAlignmentAssumptions(CB, IFI);
2835
2836 AssumptionCache *AC =
2837 IFI.GetAssumptionCache ? &IFI.GetAssumptionCache(*Caller) : nullptr;
2838
2839 /// Preserve all attributes on of the call and its parameters.
2840 salvageKnowledge(&CB, AC);
2841
2842 // We want the inliner to prune the code as it copies. We would LOVE to
2843 // have no dead or constant instructions leftover after inlining occurs
2844 // (which can happen, e.g., because an argument was constant), but we'll be
2845 // happy with whatever the cloner can do.
2846 CloneAndPruneFunctionInto(Caller, CalledFunc, VMap,
2847 /*ModuleLevelChanges=*/false, Returns, ".i",
2848 InlinedFunctionInfo);
2849 // Remember the first block that is newly cloned over.
2850 FirstNewBlock = LastBlock; ++FirstNewBlock;
2851
2852 // Insert retainRV/clainRV runtime calls.
2854 if (RVCallKind != objcarc::ARCInstKind::None)
2855 inlineRetainOrClaimRVCalls(CB, RVCallKind, Returns);
2856
2857 // Updated caller/callee profiles only when requested. For sample loader
2858 // inlining, the context-sensitive inlinee profile doesn't need to be
2859 // subtracted from callee profile, and the inlined clone also doesn't need
2860 // to be scaled based on call site count.
2861 if (IFI.UpdateProfile) {
2862 if (IFI.CallerBFI != nullptr && IFI.CalleeBFI != nullptr)
2863 // Update the BFI of blocks cloned into the caller.
2864 updateCallerBFI(OrigBB, VMap, IFI.CallerBFI, IFI.CalleeBFI,
2865 CalledFunc->front());
2866
2867 if (auto Profile = CalledFunc->getEntryCount())
2868 updateCallProfile(CalledFunc, VMap, *Profile, CB, IFI.PSI,
2869 IFI.CallerBFI);
2870 }
2871
2872 // Inject byval arguments initialization.
2873 for (ByValInit &Init : ByValInits)
2874 HandleByValArgumentInit(Init.Ty, Init.Dst, Init.Src, Init.SrcAlign,
2875 Caller->getParent(), &*FirstNewBlock, IFI,
2876 CalledFunc);
2877
2878 std::optional<OperandBundleUse> ParentDeopt =
2880 if (ParentDeopt) {
2882
2883 for (auto &VH : InlinedFunctionInfo.OperandBundleCallSites) {
2885 if (!ICS)
2886 continue; // instruction was DCE'd or RAUW'ed to undef
2887
2888 OpDefs.clear();
2889
2890 OpDefs.reserve(ICS->getNumOperandBundles());
2891
2892 for (unsigned COBi = 0, COBe = ICS->getNumOperandBundles(); COBi < COBe;
2893 ++COBi) {
2894 auto ChildOB = ICS->getOperandBundleAt(COBi);
2895 if (ChildOB.getTagID() != LLVMContext::OB_deopt) {
2896 // If the inlined call has other operand bundles, let them be
2897 OpDefs.emplace_back(ChildOB);
2898 continue;
2899 }
2900
2901 // It may be useful to separate this logic (of handling operand
2902 // bundles) out to a separate "policy" component if this gets crowded.
2903 // Prepend the parent's deoptimization continuation to the newly
2904 // inlined call's deoptimization continuation.
2905 std::vector<Value *> MergedDeoptArgs;
2906 MergedDeoptArgs.reserve(ParentDeopt->Inputs.size() +
2907 ChildOB.Inputs.size());
2908
2909 llvm::append_range(MergedDeoptArgs, ParentDeopt->Inputs);
2910 llvm::append_range(MergedDeoptArgs, ChildOB.Inputs);
2911
2912 OpDefs.emplace_back("deopt", std::move(MergedDeoptArgs));
2913 }
2914
2915 Instruction *NewI = CallBase::Create(ICS, OpDefs, ICS->getIterator());
2916
2917 // Note: the RAUW does the appropriate fixup in VMap, so we need to do
2918 // this even if the call returns void.
2919 ICS->replaceAllUsesWith(NewI);
2920
2921 VH = nullptr;
2922 ICS->eraseFromParent();
2923 }
2924 }
2925
2926 // For 'nodebug' functions, the associated DISubprogram is always null.
2927 // Conservatively avoid propagating the callsite debug location to
2928 // instructions inlined from a function whose DISubprogram is not null.
2929 fixupLineNumbers(Caller, FirstNewBlock, &CB,
2930 CalledFunc->getSubprogram() != nullptr);
2931
2932 if (isAssignmentTrackingEnabled(*Caller->getParent())) {
2933 // Interpret inlined stores to caller-local variables as assignments.
2934 trackInlinedStores(FirstNewBlock, Caller->end(), CB);
2935
2936 // Update DIAssignID metadata attachments and uses so that they are
2937 // unique to this inlined instance.
2938 fixupAssignments(FirstNewBlock, Caller->end());
2939 }
2940
2941 // Now clone the inlined noalias scope metadata.
2942 SAMetadataCloner.clone();
2943 SAMetadataCloner.remap(FirstNewBlock, Caller->end());
2944
2945 // Add noalias metadata if necessary.
2946 AddAliasScopeMetadata(CB, VMap, DL, CalleeAAR, InlinedFunctionInfo);
2947
2948 // Clone return attributes on the callsite into the calls within the inlined
2949 // function which feed into its return value.
2950 AddReturnAttributes(CB, VMap, InlinedFunctionInfo);
2951
2952 // Clone attributes on the params of the callsite to calls within the
2953 // inlined function which use the same param.
2954 AddParamAndFnBasicAttributes(CB, VMap, InlinedFunctionInfo);
2955
2957 CalledFunc, CB, InlinedFunctionInfo.ContainsMemProfMetadata, VMap, ORE);
2958
2959 // Propagate metadata on the callsite if necessary.
2960 PropagateCallSiteMetadata(CB, FirstNewBlock, Caller->end());
2961
2962 // Propagate an allocation wrapper's !alloc_token if necessary.
2963 propagateAllocTokenMetadata(CalledFunc, CB, VMap, InlinedFunctionInfo);
2964
2965 // Propagate implicit ref metadata.
2966 if (CalledFunc->hasMetadata(LLVMContext::MD_implicit_ref)) {
2968 CalledFunc->getMetadata(LLVMContext::MD_implicit_ref, MDs);
2969 for (MDNode *MD : MDs) {
2970 Caller->addMetadata(LLVMContext::MD_implicit_ref, *MD);
2971 }
2972 }
2973
2974 // Propagate inlined.from metadata for dontcall diagnostics.
2975 PropagateInlinedFromMetadata(CB, CalledFunc->getName(), Caller->getName(),
2976 FirstNewBlock, Caller->end());
2977
2978 // Register any cloned assumptions.
2979 if (IFI.GetAssumptionCache)
2980 for (BasicBlock &NewBlock :
2981 make_range(FirstNewBlock->getIterator(), Caller->end()))
2982 for (Instruction &I : NewBlock)
2983 if (auto *II = dyn_cast<AssumeInst>(&I))
2984 IFI.GetAssumptionCache(*Caller).registerAssumption(II);
2985 }
2986
2987 if (IFI.ConvergenceControlToken) {
2988 IntrinsicInst *IntrinsicCall = getConvergenceEntry(*FirstNewBlock);
2989 if (IntrinsicCall) {
2990 IntrinsicCall->replaceAllUsesWith(IFI.ConvergenceControlToken);
2991 IntrinsicCall->eraseFromParent();
2992 }
2993 }
2994
2995 // If there are any alloca instructions in the block that used to be the entry
2996 // block for the callee, move them to the entry block of the caller. First
2997 // calculate which instruction they should be inserted before. We insert the
2998 // instructions at the end of the current alloca list.
2999 {
3000 BasicBlock::iterator InsertPoint = Caller->begin()->begin();
3001 for (BasicBlock::iterator I = FirstNewBlock->begin(),
3002 E = FirstNewBlock->end(); I != E; ) {
3004 if (!AI) continue;
3005
3006 // If the alloca is now dead, remove it. This often occurs due to code
3007 // specialization.
3008 if (AI->use_empty()) {
3009 AI->eraseFromParent();
3010 continue;
3011 }
3012
3014 continue;
3015
3016 // Keep track of the static allocas that we inline into the caller.
3017 IFI.StaticAllocas.push_back(AI);
3018
3019 // Scan for the block of allocas that we can move over, and move them
3020 // all at once.
3021 while (isa<AllocaInst>(I) &&
3022 !cast<AllocaInst>(I)->use_empty() &&
3024 IFI.StaticAllocas.push_back(cast<AllocaInst>(I));
3025 ++I;
3026 }
3027
3028 // Transfer all of the allocas over in a block. Using splice means
3029 // that the instructions aren't removed from the symbol table, then
3030 // reinserted.
3031 I.setTailBit(true);
3032 Caller->getEntryBlock().splice(InsertPoint, &*FirstNewBlock,
3033 AI->getIterator(), I);
3034 }
3035 }
3036
3037 // If the call to the callee cannot throw, set the 'nounwind' flag on any
3038 // calls that we inline.
3039 bool MarkNoUnwind = CB.doesNotThrow();
3040
3041 SmallVector<Value*,4> VarArgsToForward;
3042 SmallVector<AttributeSet, 4> VarArgsAttrs;
3043 for (unsigned i = CalledFunc->getFunctionType()->getNumParams();
3044 i < CB.arg_size(); i++) {
3045 VarArgsToForward.push_back(CB.getArgOperand(i));
3046 VarArgsAttrs.push_back(CB.getAttributes().getParamAttrs(i));
3047 }
3048
3049 bool InlinedMustTailCalls = false, InlinedDeoptimizeCalls = false;
3050 if (InlinedFunctionInfo.ContainsCalls) {
3051 CallInst::TailCallKind CallSiteTailKind = CallInst::TCK_None;
3052 if (CallInst *CI = dyn_cast<CallInst>(&CB))
3053 CallSiteTailKind = CI->getTailCallKind();
3054
3055 // For inlining purposes, the "notail" marker is the same as no marker.
3056 if (CallSiteTailKind == CallInst::TCK_NoTail)
3057 CallSiteTailKind = CallInst::TCK_None;
3058
3059 for (Function::iterator BB = FirstNewBlock, E = Caller->end(); BB != E;
3060 ++BB) {
3063 if (!CI)
3064 continue;
3065
3066 // Forward varargs from inlined call site to calls to the
3067 // ForwardVarArgsTo function, if requested, and to musttail calls.
3068 if (!VarArgsToForward.empty() &&
3069 ((ForwardVarArgsTo &&
3070 CI->getCalledFunction() == ForwardVarArgsTo) ||
3071 CI->isMustTailCall())) {
3072 // Collect attributes for non-vararg parameters.
3073 AttributeList Attrs = CI->getAttributes();
3075 if (!Attrs.isEmpty() || !VarArgsAttrs.empty()) {
3076 for (unsigned ArgNo = 0;
3077 ArgNo < CI->getFunctionType()->getNumParams(); ++ArgNo)
3078 ArgAttrs.push_back(Attrs.getParamAttrs(ArgNo));
3079 }
3080
3081 // Add VarArg attributes.
3082 ArgAttrs.append(VarArgsAttrs.begin(), VarArgsAttrs.end());
3083 Attrs = AttributeList::get(CI->getContext(), Attrs.getFnAttrs(),
3084 Attrs.getRetAttrs(), ArgAttrs);
3085 // Add VarArgs to existing parameters.
3086 SmallVector<Value *, 6> Params(CI->args());
3087 Params.append(VarArgsToForward.begin(), VarArgsToForward.end());
3088 CallInst *NewCI = CallInst::Create(
3089 CI->getFunctionType(), CI->getCalledOperand(), Params, "", CI->getIterator());
3090 NewCI->setDebugLoc(CI->getDebugLoc());
3091 NewCI->setAttributes(Attrs);
3092 NewCI->setCallingConv(CI->getCallingConv());
3093 CI->replaceAllUsesWith(NewCI);
3094 CI->eraseFromParent();
3095 CI = NewCI;
3096 }
3097
3098 if (Function *F = CI->getCalledFunction())
3099 InlinedDeoptimizeCalls |=
3100 F->getIntrinsicID() == Intrinsic::experimental_deoptimize;
3101
3102 // We need to reduce the strength of any inlined tail calls. For
3103 // musttail, we have to avoid introducing potential unbounded stack
3104 // growth. For example, if functions 'f' and 'g' are mutually recursive
3105 // with musttail, we can inline 'g' into 'f' so long as we preserve
3106 // musttail on the cloned call to 'f'. If either the inlined call site
3107 // or the cloned call site is *not* musttail, the program already has
3108 // one frame of stack growth, so it's safe to remove musttail. Here is
3109 // a table of example transformations:
3110 //
3111 // f -> musttail g -> musttail f ==> f -> musttail f
3112 // f -> musttail g -> tail f ==> f -> tail f
3113 // f -> g -> musttail f ==> f -> f
3114 // f -> g -> tail f ==> f -> f
3115 //
3116 // Inlined notail calls should remain notail calls.
3117 CallInst::TailCallKind ChildTCK = CI->getTailCallKind();
3118 if (ChildTCK != CallInst::TCK_NoTail)
3119 ChildTCK = std::min(CallSiteTailKind, ChildTCK);
3120 CI->setTailCallKind(ChildTCK);
3121 InlinedMustTailCalls |= CI->isMustTailCall();
3122
3123 // Call sites inlined through a 'nounwind' call site should be
3124 // 'nounwind' as well. However, avoid marking call sites explicitly
3125 // where possible. This helps expose more opportunities for CSE after
3126 // inlining, commonly when the callee is an intrinsic.
3127 if (MarkNoUnwind && !CI->doesNotThrow())
3128 CI->setDoesNotThrow();
3129 }
3130 }
3131 }
3132
3133 // Leave lifetime markers for the static alloca's, scoping them to the
3134 // function we just inlined.
3135 // We need to insert lifetime intrinsics even at O0 to avoid invalid
3136 // access caused by multithreaded coroutines. The check
3137 // `Caller->isPresplitCoroutine()` would affect AlwaysInliner at O0 only.
3138 if ((InsertLifetime || Caller->isPresplitCoroutine()) &&
3139 !IFI.StaticAllocas.empty()) {
3140 IRBuilder<> builder(&*FirstNewBlock, FirstNewBlock->begin());
3141 for (AllocaInst *AI : IFI.StaticAllocas) {
3142 // Don't mark swifterror allocas. They can't have bitcast uses.
3143 if (AI->isSwiftError())
3144 continue;
3145
3146 // If the alloca is already scoped to something smaller than the whole
3147 // function then there's no need to add redundant, less accurate markers.
3148 if (hasLifetimeMarkers(AI))
3149 continue;
3150
3151 std::optional<TypeSize> Size = AI->getAllocationSize(AI->getDataLayout());
3152 if (Size && Size->isZero())
3153 continue;
3154
3155 builder.CreateLifetimeStart(AI);
3156 for (ReturnInst *RI : Returns) {
3157 // Don't insert llvm.lifetime.end calls between a musttail or deoptimize
3158 // call and a return. The return kills all local allocas.
3159 if (InlinedMustTailCalls &&
3160 RI->getParent()->getTerminatingMustTailCall())
3161 continue;
3162 if (InlinedDeoptimizeCalls &&
3163 RI->getParent()->getTerminatingDeoptimizeCall())
3164 continue;
3165 IRBuilder<>(RI).CreateLifetimeEnd(AI);
3166 }
3167 }
3168 }
3169
3170 // If the inlined code contained dynamic alloca instructions, wrap the inlined
3171 // code with llvm.stacksave/llvm.stackrestore intrinsics.
3172 if (InlinedFunctionInfo.ContainsDynamicAllocas) {
3173 // Insert the llvm.stacksave.
3174 CallInst *SavedPtr = IRBuilder<>(&*FirstNewBlock, FirstNewBlock->begin())
3175 .CreateStackSave("savedstack");
3176
3177 // Insert a call to llvm.stackrestore before any return instructions in the
3178 // inlined function.
3179 for (ReturnInst *RI : Returns) {
3180 // Don't insert llvm.stackrestore calls between a musttail or deoptimize
3181 // call and a return. The return will restore the stack pointer.
3182 if (InlinedMustTailCalls && RI->getParent()->getTerminatingMustTailCall())
3183 continue;
3184 if (InlinedDeoptimizeCalls && RI->getParent()->getTerminatingDeoptimizeCall())
3185 continue;
3186 IRBuilder<>(RI).CreateStackRestore(SavedPtr);
3187 }
3188 }
3189
3190 // If we are inlining for an invoke instruction, we must make sure to rewrite
3191 // any call instructions into invoke instructions. This is sensitive to which
3192 // funclet pads were top-level in the inlinee, so must be done before
3193 // rewriting the "parent pad" links.
3194 if (auto *II = dyn_cast<InvokeInst>(&CB)) {
3195 BasicBlock *UnwindDest = II->getUnwindDest();
3196 BasicBlock::iterator FirstNonPHI = UnwindDest->getFirstNonPHIIt();
3197 if (isa<LandingPadInst>(FirstNonPHI)) {
3198 HandleInlinedLandingPad(II, &*FirstNewBlock, InlinedFunctionInfo);
3199 } else {
3200 HandleInlinedEHPad(II, &*FirstNewBlock, InlinedFunctionInfo);
3201 }
3202 }
3203
3204 // Update the lexical scopes of the new funclets and callsites.
3205 // Anything that had 'none' as its parent is now nested inside the callsite's
3206 // EHPad.
3207 if (IFI.CallSiteEHPad) {
3208 for (Function::iterator BB = FirstNewBlock->getIterator(),
3209 E = Caller->end();
3210 BB != E; ++BB) {
3211 // Add bundle operands to inlined call sites.
3213
3214 // It is problematic if the inlinee has a cleanupret which unwinds to
3215 // caller and we inline it into a call site which doesn't unwind but into
3216 // an EH pad that does. Such an edge must be dynamically unreachable.
3217 // As such, we replace the cleanupret with unreachable.
3218 if (auto *CleanupRet = dyn_cast<CleanupReturnInst>(BB->getTerminator()))
3219 if (CleanupRet->unwindsToCaller() && EHPadForCallUnwindsLocally)
3220 changeToUnreachable(CleanupRet);
3221
3222 BasicBlock::iterator I = BB->getFirstNonPHIIt();
3223 if (!I->isEHPad())
3224 continue;
3225
3226 if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(I)) {
3227 if (isa<ConstantTokenNone>(CatchSwitch->getParentPad()))
3228 CatchSwitch->setParentPad(IFI.CallSiteEHPad);
3229 } else {
3230 auto *FPI = cast<FuncletPadInst>(I);
3231 if (isa<ConstantTokenNone>(FPI->getParentPad()))
3232 FPI->setParentPad(IFI.CallSiteEHPad);
3233 }
3234 }
3235 }
3236
3237 if (InlinedDeoptimizeCalls) {
3238 // We need to at least remove the deoptimizing returns from the Return set,
3239 // so that the control flow from those returns does not get merged into the
3240 // caller (but terminate it instead). If the caller's return type does not
3241 // match the callee's return type, we also need to change the return type of
3242 // the intrinsic.
3243 if (Caller->getReturnType() == CB.getType()) {
3244 llvm::erase_if(Returns, [](ReturnInst *RI) {
3245 return RI->getParent()->getTerminatingDeoptimizeCall() != nullptr;
3246 });
3247 } else {
3248 SmallVector<ReturnInst *, 8> NormalReturns;
3249 Function *NewDeoptIntrinsic = Intrinsic::getOrInsertDeclaration(
3250 Caller->getParent(), Intrinsic::experimental_deoptimize,
3251 {Caller->getReturnType()});
3252
3253 for (ReturnInst *RI : Returns) {
3254 CallInst *DeoptCall = RI->getParent()->getTerminatingDeoptimizeCall();
3255 if (!DeoptCall) {
3256 NormalReturns.push_back(RI);
3257 continue;
3258 }
3259
3260 // The calling convention on the deoptimize call itself may be bogus,
3261 // since the code we're inlining may have undefined behavior (and may
3262 // never actually execute at runtime); but all
3263 // @llvm.experimental.deoptimize declarations have to have the same
3264 // calling convention in a well-formed module.
3265 auto CallingConv = DeoptCall->getCalledFunction()->getCallingConv();
3266 NewDeoptIntrinsic->setCallingConv(CallingConv);
3267 auto *CurBB = RI->getParent();
3268 RI->eraseFromParent();
3269
3270 SmallVector<Value *, 4> CallArgs(DeoptCall->args());
3271
3273 DeoptCall->getOperandBundlesAsDefs(OpBundles);
3274 auto DeoptAttributes = DeoptCall->getAttributes();
3275 DeoptCall->eraseFromParent();
3276 assert(!OpBundles.empty() &&
3277 "Expected at least the deopt operand bundle");
3278
3279 IRBuilder<> Builder(CurBB);
3280 CallInst *NewDeoptCall =
3281 Builder.CreateCall(NewDeoptIntrinsic, CallArgs, OpBundles);
3282 NewDeoptCall->setCallingConv(CallingConv);
3283 NewDeoptCall->setAttributes(DeoptAttributes);
3284 if (NewDeoptCall->getType()->isVoidTy())
3285 Builder.CreateRetVoid();
3286 else
3287 Builder.CreateRet(NewDeoptCall);
3288 // Since the ret type is changed, remove the incompatible attributes.
3289 NewDeoptCall->removeRetAttrs(AttributeFuncs::typeIncompatible(
3290 NewDeoptCall->getType(), NewDeoptCall->getRetAttributes()));
3291 }
3292
3293 // Leave behind the normal returns so we can merge control flow.
3294 std::swap(Returns, NormalReturns);
3295 }
3296 }
3297
3298 // Handle any inlined musttail call sites. In order for a new call site to be
3299 // musttail, the source of the clone and the inlined call site must have been
3300 // musttail. Therefore it's safe to return without merging control into the
3301 // phi below.
3302 if (InlinedMustTailCalls) {
3303 // Check if we need to bitcast the result of any musttail calls.
3304 Type *NewRetTy = Caller->getReturnType();
3305 bool NeedBitCast = !CB.use_empty() && CB.getType() != NewRetTy;
3306
3307 // Handle the returns preceded by musttail calls separately.
3308 SmallVector<ReturnInst *, 8> NormalReturns;
3309 for (ReturnInst *RI : Returns) {
3310 CallInst *ReturnedMustTail =
3311 RI->getParent()->getTerminatingMustTailCall();
3312 if (!ReturnedMustTail) {
3313 NormalReturns.push_back(RI);
3314 continue;
3315 }
3316 if (!NeedBitCast)
3317 continue;
3318
3319 // Delete the old return and any preceding bitcast.
3320 BasicBlock *CurBB = RI->getParent();
3321 auto *OldCast = dyn_cast_or_null<BitCastInst>(RI->getReturnValue());
3322 RI->eraseFromParent();
3323 if (OldCast)
3324 OldCast->eraseFromParent();
3325
3326 // Insert a new bitcast and return with the right type.
3327 IRBuilder<> Builder(CurBB);
3328 Builder.CreateRet(Builder.CreateBitCast(ReturnedMustTail, NewRetTy));
3329 }
3330
3331 // Leave behind the normal returns so we can merge control flow.
3332 std::swap(Returns, NormalReturns);
3333 }
3334
3335 // Now that all of the transforms on the inlined code have taken place but
3336 // before we splice the inlined code into the CFG and lose track of which
3337 // blocks were actually inlined, collect the call sites. We only do this if
3338 // call graph updates weren't requested, as those provide value handle based
3339 // tracking of inlined call sites instead. Calls to intrinsics are not
3340 // collected because they are not inlineable.
3341 if (InlinedFunctionInfo.ContainsCalls) {
3342 // Otherwise just collect the raw call sites that were inlined.
3343 for (BasicBlock &NewBB :
3344 make_range(FirstNewBlock->getIterator(), Caller->end()))
3345 for (Instruction &I : NewBB)
3346 if (auto *CB = dyn_cast<CallBase>(&I))
3347 if (!(CB->getCalledFunction() &&
3349 IFI.InlinedCallSites.push_back(CB);
3350 }
3351
3352 for (CallBase *ICB : IFI.InlinedCallSites) {
3353 // We only track inline history if requested, or if the inlined call site
3354 // was originally an indirect call (it may have become a direct call
3355 // during inlining).
3356 if (TrackInlineHistory ||
3357 InlinedFunctionInfo.OriginallyIndirectCalls.contains(ICB)) {
3358 // !inline_history is {Callee, CB.inline_history, ICB.inline_history}.
3359 // Metadata nodes may be null if the referenced function was erased from
3360 // the module.
3362 History.push_back(ValueAsMetadata::get(CalledFunc));
3363 if (MDNode *CBHistory = CB.getMetadata(LLVMContext::MD_inline_history)) {
3364 for (const auto &Op : CBHistory->operands()) {
3365 if (Op)
3366 History.push_back(Op.get());
3367 }
3368 }
3369 if (MDNode *CBHistory =
3370 ICB->getMetadata(LLVMContext::MD_inline_history)) {
3371 for (const auto &Op : CBHistory->operands()) {
3372 if (Op)
3373 History.push_back(Op.get());
3374 }
3375 }
3376 MDNode *NewHistory = MDNode::get(Caller->getContext(), History);
3377 ICB->setMetadata(LLVMContext::MD_inline_history, NewHistory);
3378 }
3379 }
3380
3381 // If we cloned in _exactly one_ basic block, and if that block ends in a
3382 // return instruction, we splice the body of the inlined callee directly into
3383 // the calling basic block.
3384 if (Returns.size() == 1 && std::distance(FirstNewBlock, Caller->end()) == 1) {
3385 // Move all of the instructions right before the call.
3386 OrigBB->splice(CB.getIterator(), &*FirstNewBlock, FirstNewBlock->begin(),
3387 FirstNewBlock->end());
3388 // Remove the cloned basic block.
3389 Caller->back().eraseFromParent();
3390
3391 // If the call site was an invoke instruction, add a branch to the normal
3392 // destination.
3393 if (InvokeInst *II = dyn_cast<InvokeInst>(&CB)) {
3394 UncondBrInst *NewBr =
3395 UncondBrInst::Create(II->getNormalDest(), CB.getIterator());
3396 NewBr->setDebugLoc(Returns[0]->getDebugLoc());
3397 }
3398
3399 // If the return instruction returned a value, replace uses of the call with
3400 // uses of the returned value.
3401 if (!CB.use_empty()) {
3402 ReturnInst *R = Returns[0];
3403 if (&CB == R->getReturnValue())
3405 else
3406 CB.replaceAllUsesWith(R->getReturnValue());
3407 }
3408 // Since we are now done with the Call/Invoke, we can delete it.
3409 CB.eraseFromParent();
3410
3411 // Since we are now done with the return instruction, delete it also.
3412 Returns[0]->eraseFromParent();
3413
3414 if (MergeAttributes)
3415 AttributeFuncs::mergeAttributesForInlining(*Caller, *CalledFunc);
3416
3417 // We are now done with the inlining.
3418 return;
3419 }
3420
3421 // Otherwise, we have the normal case, of more than one block to inline or
3422 // multiple return sites.
3423
3424 // We want to clone the entire callee function into the hole between the
3425 // "starter" and "ender" blocks. How we accomplish this depends on whether
3426 // this is an invoke instruction or a call instruction.
3427 BasicBlock *AfterCallBB;
3428 UncondBrInst *CreatedBranchToNormalDest = nullptr;
3429 if (InvokeInst *II = dyn_cast<InvokeInst>(&CB)) {
3430
3431 // Add an unconditional branch to make this look like the CallInst case...
3432 CreatedBranchToNormalDest =
3433 UncondBrInst::Create(II->getNormalDest(), CB.getIterator());
3434 // We intend to replace this DebugLoc with another later.
3435 CreatedBranchToNormalDest->setDebugLoc(DebugLoc::getTemporary());
3436
3437 // Split the basic block. This guarantees that no PHI nodes will have to be
3438 // updated due to new incoming edges, and make the invoke case more
3439 // symmetric to the call case.
3440 AfterCallBB =
3441 OrigBB->splitBasicBlock(CreatedBranchToNormalDest->getIterator(),
3442 CalledFunc->getName() + ".exit");
3443
3444 } else { // It's a call
3445 // If this is a call instruction, we need to split the basic block that
3446 // the call lives in.
3447 //
3448 AfterCallBB = OrigBB->splitBasicBlock(CB.getIterator(),
3449 CalledFunc->getName() + ".exit");
3450 }
3451
3452 if (IFI.CallerBFI) {
3453 // Copy original BB's block frequency to AfterCallBB
3454 IFI.CallerBFI->setBlockFreq(AfterCallBB,
3455 IFI.CallerBFI->getBlockFreq(OrigBB));
3456 }
3457
3458 // Change the branch that used to go to AfterCallBB to branch to the first
3459 // basic block of the inlined function.
3460 //
3462 Br->setSuccessor(&*FirstNewBlock);
3463
3464 // Now that the function is correct, make it a little bit nicer. In
3465 // particular, move the basic blocks inserted from the end of the function
3466 // into the space made by splitting the source basic block.
3467 Caller->splice(AfterCallBB->getIterator(), Caller, FirstNewBlock,
3468 Caller->end());
3469
3470 // Handle all of the return instructions that we just cloned in, and eliminate
3471 // any users of the original call/invoke instruction.
3472 Type *RTy = CalledFunc->getReturnType();
3473
3474 PHINode *PHI = nullptr;
3475 if (Returns.size() > 1) {
3476 // The PHI node should go at the front of the new basic block to merge all
3477 // possible incoming values.
3478 if (!CB.use_empty()) {
3479 PHI = PHINode::Create(RTy, Returns.size(), CB.getName());
3480 PHI->insertBefore(AfterCallBB->begin());
3481 // Anything that used the result of the function call should now use the
3482 // PHI node as their operand.
3484 }
3485
3486 // Loop over all of the return instructions adding entries to the PHI node
3487 // as appropriate.
3488 if (PHI) {
3489 for (ReturnInst *RI : Returns) {
3490 assert(RI->getReturnValue()->getType() == PHI->getType() &&
3491 "Ret value not consistent in function!");
3492 PHI->addIncoming(RI->getReturnValue(), RI->getParent());
3493 }
3494 }
3495
3496 // Add a branch to the merge points and remove return instructions.
3497 DebugLoc Loc;
3498 for (ReturnInst *RI : Returns) {
3499 UncondBrInst *BI = UncondBrInst::Create(AfterCallBB, RI->getIterator());
3500 Loc = RI->getDebugLoc();
3501 BI->setDebugLoc(Loc);
3502 RI->eraseFromParent();
3503 }
3504 // We need to set the debug location to *somewhere* inside the
3505 // inlined function. The line number may be nonsensical, but the
3506 // instruction will at least be associated with the right
3507 // function.
3508 if (CreatedBranchToNormalDest)
3509 CreatedBranchToNormalDest->setDebugLoc(Loc);
3510 } else if (!Returns.empty()) {
3511 // Otherwise, if there is exactly one return value, just replace anything
3512 // using the return value of the call with the computed value.
3513 if (!CB.use_empty()) {
3514 if (&CB == Returns[0]->getReturnValue())
3516 else
3517 CB.replaceAllUsesWith(Returns[0]->getReturnValue());
3518 }
3519
3520 // Update PHI nodes that use the ReturnBB to use the AfterCallBB.
3521 BasicBlock *ReturnBB = Returns[0]->getParent();
3522 ReturnBB->replaceAllUsesWith(AfterCallBB);
3523
3524 // Splice the code from the return block into the block that it will return
3525 // to, which contains the code that was after the call.
3526 AfterCallBB->splice(AfterCallBB->begin(), ReturnBB);
3527
3528 if (CreatedBranchToNormalDest)
3529 CreatedBranchToNormalDest->setDebugLoc(Returns[0]->getDebugLoc());
3530
3531 // Delete the return instruction now and empty ReturnBB now.
3532 Returns[0]->eraseFromParent();
3533 ReturnBB->eraseFromParent();
3534 } else if (!CB.use_empty()) {
3535 // In this case there are no returns to use, so there is no clear source
3536 // location for the "return".
3537 // FIXME: It may be correct to use the scope end line of the function here,
3538 // since this likely means we are falling out of the function.
3539 if (CreatedBranchToNormalDest)
3540 CreatedBranchToNormalDest->setDebugLoc(DebugLoc::getUnknown());
3541 // No returns, but something is using the return value of the call. Just
3542 // nuke the result.
3544 }
3545
3546 // Since we are now done with the Call/Invoke, we can delete it.
3547 CB.eraseFromParent();
3548
3549 // If we inlined any musttail calls and the original return is now
3550 // unreachable, delete it. It can only contain a bitcast and ret.
3551 if (InlinedMustTailCalls && pred_empty(AfterCallBB))
3552 AfterCallBB->eraseFromParent();
3553
3554 // We should always be able to fold the entry block of the function into the
3555 // single predecessor of the block...
3556 BasicBlock *CalleeEntry = Br->getSuccessor();
3557
3558 // Splice the code entry block into calling block, right before the
3559 // unconditional branch.
3560 CalleeEntry->replaceAllUsesWith(OrigBB); // Update PHI nodes
3561 OrigBB->splice(Br->getIterator(), CalleeEntry);
3562
3563 // Remove the unconditional branch.
3564 Br->eraseFromParent();
3565
3566 // Now we can remove the CalleeEntry block, which is now empty.
3567 CalleeEntry->eraseFromParent();
3568
3569 // If we inserted a phi node, check to see if it has a single value (e.g. all
3570 // the entries are the same or undef). If so, remove the PHI so it doesn't
3571 // block other optimizations.
3572 if (PHI) {
3573 AssumptionCache *AC =
3574 IFI.GetAssumptionCache ? &IFI.GetAssumptionCache(*Caller) : nullptr;
3575 auto &DL = Caller->getDataLayout();
3576 if (Value *V = simplifyInstruction(PHI, {DL, nullptr, nullptr, AC})) {
3577 PHI->replaceAllUsesWith(V);
3578 PHI->eraseFromParent();
3579 }
3580 }
3581
3582 if (MergeAttributes)
3583 AttributeFuncs::mergeAttributesForInlining(*Caller, *CalledFunc);
3584}
3585
3587 CallBase &CB, InlineFunctionInfo &IFI, bool MergeAttributes,
3588 AAResults *CalleeAAR, bool InsertLifetime, bool TrackInlineHistory,
3589 Function *ForwardVarArgsTo, OptimizationRemarkEmitter *ORE) {
3590 llvm::InlineResult Result = CanInlineCallSite(CB, IFI);
3591 if (Result.isSuccess()) {
3592 InlineFunctionImpl(CB, IFI, MergeAttributes, CalleeAAR, InsertLifetime,
3593 TrackInlineHistory, ForwardVarArgsTo, ORE);
3594 }
3595
3596 return Result;
3597}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Rewrite undef for PHI
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
This file contains the simple types necessary to represent the attributes associated with functions a...
static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB, ArrayRef< BasicBlock * > Preds, Instruction *BI, bool HasLoopExit)
Update the PHI nodes in OrigBB to include the values coming from NewBB.
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static cl::opt< bool > NoAliases("csky-no-aliases", cl::desc("Disable the emission of assembler pseudo instructions"), cl::init(false), cl::Hidden)
This file provides interfaces used to build and manipulate a call graph, which is a very useful tool ...
This file contains the declarations for the subclasses of Constant, which represent the different fla...
dxil translate DXIL Translate Metadata
This file defines the DenseMap class.
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
Module.h This file contains the declarations for the Module class.
static AttrBuilder IdentifyValidUBGeneratingAttributes(CallBase &CB)
static void collectPointerReturningCalls(Value *RetVal, SmallVectorImpl< CallBase * > &Out)
Collect all calls that produce RetVal, following only pointer-preserving instructions (cast,...
DenseMap< Instruction *, Value * > UnwindDestMemoTy
static BasicBlock * HandleCallsInBlockInlinedThroughInvoke(BasicBlock *BB, BasicBlock *UnwindEdge, SmallSetVector< const Value *, 4 > &OriginallyIndirectCalls, 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...
static at::StorageToVarsMap collectEscapedLocals(const DataLayout &DL, const CallBase &CB)
Find Alloca and linked DbgAssignIntrinsic for locals escaped by CB.
static void fixupLineNumbers(Function *Fn, Function::iterator FI, Instruction *TheCall, bool CalleeHasDebugInfo)
Update inlined instructions' line numbers to to encode location where these instructions are inlined.
static void removeCallsiteMetadata(CallBase *Call)
static void PropagateInlinedFromMetadata(CallBase &CB, StringRef CalledFuncName, StringRef CallerFuncName, Function::iterator FStart, Function::iterator FEnd)
Track inlining chain via inlined.from metadata for dontcall diagnostics.
static Value * getUnwindDestToken(Instruction *EHPad, UnwindDestMemoTy &MemoMap)
Given an EH pad, find where it unwinds.
static void propagateMemProfMetadata(Function *Callee, CallBase &CB, bool ContainsMemProfMetadata, const ValueMap< const Value *, WeakTrackingVH > &VMap, OptimizationRemarkEmitter *ORE)
static cl::opt< bool > PreserveAlignmentAssumptions("preserve-alignment-assumptions-during-inlining", cl::init(false), cl::Hidden, cl::desc("Convert align attributes to assumptions during inlining."))
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...
static Value * getUnwindDestTokenHelper(Instruction *EHPad, UnwindDestMemoTy &MemoMap)
Helper for getUnwindDestToken that does the descendant-ward part of the search.
static DebugLoc inlineDebugLoc(DebugLoc OrigDL, DILocation *InlinedAt, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode * > &IANodes)
Returns a DebugLoc for a new DILocation which is a clone of OrigDL inlined at InlinedAt.
static cl::opt< bool > UseNoAliasIntrinsic("use-noalias-intrinsic-during-inlining", cl::Hidden, cl::init(true), cl::desc("Use the llvm.experimental.noalias.scope.decl " "intrinsic during inlining."))
static void propagateAllocTokenMetadata(Function *CalledFunc, CallBase &CB, const ValueMap< const Value *, WeakTrackingVH > &VMap, ClonedCodeInfo &InlinedFunctionInfo)
When inlining a call that carries !alloc_token metadata, propagate that metadata onto calls exposed b...
static void PropagateCallSiteMetadata(CallBase &CB, Function::iterator FStart, Function::iterator FEnd)
When inlining a call site that has !llvm.mem.parallel_loop_access, !llvm.access.group,...
static std::pair< std::vector< int64_t >, std::vector< int64_t > > remapIndices(Function &Caller, BasicBlock *StartBB, PGOContextualProfile &CtxProf, uint32_t CalleeCounters, uint32_t CalleeCallsites)
static AttrBuilder IdentifyValidPoisonGeneratingAttributes(CallBase &CB)
static void updateMemprofMetadata(CallBase *CI, const std::vector< Metadata * > &MIBList, OptimizationRemarkEmitter *ORE)
static void updateCallProfile(Function *Callee, const ValueToValueMapTy &VMap, const ProfileCount &CalleeEntryCount, const CallBase &TheCall, ProfileSummaryInfo *PSI, BlockFrequencyInfo *CallerBFI)
Update the branch metadata for cloned call instructions.
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.
static void AddReturnAttributes(CallBase &CB, ValueToValueMapTy &VMap, ClonedCodeInfo &InlinedFunctionInfo)
static void HandleByValArgumentInit(Type *ByValType, Value *Dst, Value *Src, MaybeAlign SrcAlign, Module *M, BasicBlock *InsertBlock, InlineFunctionInfo &IFI, Function *CalledFunc)
static bool MayContainThrowingOrExitingCallAfterCB(CallBase *Begin, ReturnInst *End)
static cl::opt< bool > EnableNoAliasConversion("enable-noalias-to-md-conversion", cl::init(true), cl::Hidden, cl::desc("Convert noalias attributes to metadata during inlining."))
static void AddAliasScopeMetadata(CallBase &CB, ValueToValueMapTy &VMap, const DataLayout &DL, AAResults *CalleeAAR, ClonedCodeInfo &InlinedFunctionInfo)
If the inlined function has noalias arguments, then add new alias scopes for each noalias argument,...
static IntrinsicInst * getConvergenceEntry(BasicBlock &BB)
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...
static void inlineRetainOrClaimRVCalls(CallBase &CB, objcarc::ARCInstKind RVCallKind, const SmallVectorImpl< ReturnInst * > &Returns)
An operand bundle "clang.arc.attachedcall" on a call indicates the call result is implicitly consumed...
static void fixupAssignments(Function::iterator Start, Function::iterator End)
Update inlined instructions' DIAssignID metadata.
static void propagateMemProfHelper(const CallBase *OrigCall, CallBase *ClonedCall, MDNode *InlinedCallsiteMD, OptimizationRemarkEmitter *ORE)
static bool allocaWouldBeStaticInEntry(const AllocaInst *AI)
Return the result of AI->isStaticAlloca() if AI were moved to the entry block.
static bool isUsedByLifetimeMarker(Value *V)
static void removeMemProfMetadata(CallBase *Call)
static Value * HandleByValArgument(Type *ByValType, Value *Arg, Instruction *TheCall, const Function *CalledFunc, InlineFunctionInfo &IFI, MaybeAlign ByValAlignment)
When inlining a call site that has a byval argument, we have to make the implicit memcpy explicit by ...
static void AddAlignmentAssumptions(CallBase &CB, InlineFunctionInfo &IFI)
If the inlined function has non-byval align arguments, then add @llvm.assume-based alignment assumpti...
static void trackInlinedStores(Function::iterator Start, Function::iterator End, const CallBase &CB)
static cl::opt< unsigned > InlinerAttributeWindow("max-inst-checked-for-throw-during-inlining", cl::Hidden, cl::desc("the maximum number of instructions analyzed for may throw during " "attribute inference in inlined body"), cl::init(4))
static void AddParamAndFnBasicAttributes(const CallBase &CB, ValueToValueMapTy &VMap, ClonedCodeInfo &InlinedFunctionInfo)
static bool haveCommonPrefix(MDNode *MIBStackContext, MDNode *CallsiteStackContext)
static void PropagateOperandBundles(Function::iterator InlinedBB, Instruction *CallSiteEHPad)
Bundle operands of the inlined function must be added to inlined call sites.
static bool hasLifetimeMarkers(AllocaInst *AI)
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
Load MIR Sample Profile
static DebugLoc getDebugLoc(MachineBasicBlock::instr_iterator FirstMI, MachineBasicBlock::instr_iterator LastMI)
Return the first DebugLoc that has line number information, given a range of instructions.
This file contains the declarations for metadata subclasses.
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
uint64_t IntrinsicInst * II
This file defines common analysis utilities used by the ObjC ARC Optimizer.
This file defines ARC utility functions which are used by various parts of the compiler.
This file contains the declarations for profiling metadata utility functions.
This file contains some templates that are useful if you are working with the STL at all.
This file implements a set that has insertion order iteration characteristics.
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
This file contains some functions that are useful when dealing with strings.
#define LLVM_DEBUG(...)
Definition Debug.h:119
static Value * getParentPad(Value *EHPad)
LLVM_ABI MemoryEffects getMemoryEffects(const CallBase *Call)
Return the behavior of the given call site.
Class for arbitrary precision integers.
Definition APInt.h:78
an instruction to allocate memory on the stack
bool isSwiftError() const
Return true if this alloca is used as a swifterror argument to a call.
PointerType * getType() const
Overload to return most specific pointer type.
bool isUsedWithInAlloca() const
Return true if this alloca is used as an inalloca argument to a call.
LLVM_ABI std::optional< TypeSize > getAllocationSize(const DataLayout &DL) const
Get allocation size in bytes.
const Value * getArraySize() const
Get the number of elements allocated.
This class represents an incoming formal argument to a Function.
Definition Argument.h:32
unsigned getArgNo() const
Return the index of this formal argument in its containing function.
Definition Argument.h:50
static LLVM_ABI uint64_t getGUID(const Function &F)
A cache of @llvm.assume calls within a function.
LLVM_ABI void registerAssumption(AssumeInst *CI)
Add an @llvm.assume intrinsic to this function's cache.
An instruction that atomically checks whether a specified value is in a memory location,...
an instruction that atomically reads a memory location, combines it with another value,...
static LLVM_ABI AttributeSet get(LLVMContext &C, const AttrBuilder &B)
Functions, function parameters, and return types can have attributes to indicate how they should be t...
Definition Attributes.h:105
LLVM_ABI const ConstantRange & getRange() const
Returns the value of the range attribute.
LLVM_ABI FPClassTest getNoFPClass() const
Return the FPClassTest for nofpclass.
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results,...
Definition Attributes.h:124
bool isValid() const
Return true if the attribute is any kind of attribute.
Definition Attributes.h:261
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator end()
Definition BasicBlock.h:474
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:461
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition BasicBlock.h:530
LLVM_ABI BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction.
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
LLVM_ABI SymbolTableList< BasicBlock >::iterator eraseFromParent()
Unlink 'this' from the containing function and delete it.
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction; assumes that the block is well-formed.
Definition BasicBlock.h:237
void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB)
Transfer all instructions from FromBB to this basic block at ToIt.
Definition BasicBlock.h:659
LLVM_ABI void removePredecessor(BasicBlock *Pred, bool KeepOneInputPHIs=false)
Update PHI nodes in this BasicBlock before removal of predecessor Pred.
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
LLVM_ABI void setBlockFreq(const BasicBlock *BB, BlockFrequency Freq)
LLVM_ABI void setBlockFreqAndScale(const BasicBlock *ReferenceBB, BlockFrequency Freq, SmallPtrSetImpl< BasicBlock * > &BlocksToScale)
Set the frequency of ReferenceBB to Freq and scale the frequencies of the blocks in BlocksToScale suc...
LLVM_ABI BlockFrequency getBlockFreq(const BasicBlock *BB) const
getblockFreq - Return block frequency.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
void setCallingConv(CallingConv::ID CC)
LLVM_ABI FPClassTest getRetNoFPClass() const
Extract a test mask for disallowed floating-point value classes for the return value.
void setDoesNotThrow()
MaybeAlign getRetAlign() const
Extract the alignment of the return value.
LLVM_ABI void getOperandBundlesAsDefs(SmallVectorImpl< OperandBundleDef > &Defs) const
Return the list of operand bundles attached to this instruction as a vector of OperandBundleDefs.
OperandBundleUse getOperandBundleAt(unsigned Index) const
Return the operand bundle at a specific index.
std::optional< OperandBundleUse > getOperandBundle(StringRef Name) const
Return an operand bundle by name, if present.
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation or the function signa...
void removeRetAttrs(const AttributeMask &AttrsToRemove)
Removes the attributes from the return value.
bool hasRetAttr(Attribute::AttrKind Kind) const
Determine whether the return value has the given attribute.
unsigned getNumOperandBundles() const
Return the number of operand bundles associated with this User.
CallingConv::ID getCallingConv() const
LLVM_ABI bool paramHasAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Determine whether the argument or parameter has the given attribute.
User::op_iterator arg_begin()
Return the iterator pointing to the beginning of the argument list.
Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const
Get the attribute of a given kind from a given arg.
bool isByValArgument(unsigned ArgNo) const
Determine whether this argument is passed by value.
static LLVM_ABI CallBase * addOperandBundle(CallBase *CB, uint32_t ID, OperandBundleDef OB, InsertPosition InsertPt=nullptr)
Create a clone of CB with operand bundle OB added.
MaybeAlign getParamAlign(unsigned ArgNo) const
Extract the alignment for a call or parameter (0=unknown).
AttributeSet getRetAttributes() const
Return the return attributes for this call.
Type * getParamByValType(unsigned ArgNo) const
Extract the byval type for a call or parameter.
Value * getCalledOperand() const
void setAttributes(AttributeList A)
Set the attributes for this call.
LLVM_ABI std::optional< ConstantRange > getRange() const
If this return value has a range attribute, return the value range of the argument.
bool doesNotThrow() const
Determine if the call cannot unwind.
Value * getArgOperand(unsigned i) const
uint64_t getRetDereferenceableBytes() const
Extract the number of dereferenceable bytes for a call or parameter (0=unknown).
bool isConvergent() const
Determine if the invoke is convergent.
FunctionType * getFunctionType() const
static LLVM_ABI CallBase * Create(CallBase *CB, ArrayRef< OperandBundleDef > Bundles, InsertPosition InsertPt=nullptr)
Create a clone of CB with a different set of operand bundles and insert it before InsertPt.
uint64_t getRetDereferenceableOrNullBytes() const
Extract the number of dereferenceable_or_null bytes for a call (0=unknown).
iterator_range< User::op_iterator > args()
Iteration adapter for range-for loops.
unsigned arg_size() const
AttributeList getAttributes() const
Return the attributes for this call.
bool hasOperandBundles() const
Return true if this User has any operand bundles.
LLVM_ABI Function * getCaller()
Helper to get the caller (the parent function).
This class represents a function call, abstracting a target machine's calling convention.
void setTailCallKind(TailCallKind TCK)
TailCallKind getTailCallKind() const
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
bool isMustTailCall() const
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, InsertPosition InsertBefore=nullptr)
static ConstantAsMetadata * get(Constant *C)
Definition Metadata.h:537
This class represents a range of values.
LLVM_ABI ConstantRange intersectWith(const ConstantRange &CR, PreferredRangeType Type=Smallest) const
Return the range that results from the intersection of this range with another range.
static LLVM_ABI ConstantTokenNone * get(LLVMContext &Context)
Return the ConstantTokenNone.
This is an important base class in LLVM.
Definition Constant.h:43
const Constant * stripPointerCasts() const
Definition Constant.h:219
static LLVM_ABI InstrProfIncrementInst * getBBInstrumentation(BasicBlock &BB)
Get the instruction instrumenting a BB, or nullptr if not present.
static LLVM_ABI InstrProfCallsite * getCallsiteInstrumentation(CallBase &CB)
Get the instruction instrumenting a callsite, or nullptr if that cannot be found.
const DILocation * getWithoutAtom() const
uint64_t getAtomGroup() const
uint8_t getAtomRank() const
Subprogram description. Uses SubclassData1.
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Base class for non-instruction debug metadata records that have positions within IR.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
A debug info location.
Definition DebugLoc.h:123
static DebugLoc getCompilerGenerated()
Definition DebugLoc.h:162
LLVM_ABI unsigned getLine() const
Definition DebugLoc.cpp:52
LLVM_ABI DILocation * get() const
Get the underlying DILocation.
Definition DebugLoc.cpp:48
LLVM_ABI MDNode * getScope() const
Definition DebugLoc.cpp:62
static LLVM_ABI DebugLoc appendInlinedAt(const DebugLoc &DL, DILocation *InlinedAt, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode * > &Cache)
Rebuild the entire inlined-at chain for this instruction so that the top of the chain now is inlined-...
Definition DebugLoc.cpp:136
static DebugLoc getTemporary()
Definition DebugLoc.h:160
LLVM_ABI unsigned getCol() const
Definition DebugLoc.cpp:57
LLVM_ABI bool isImplicitCode() const
Check if the DebugLoc corresponds to an implicit code.
Definition DebugLoc.cpp:85
static DebugLoc getUnknown()
Definition DebugLoc.h:161
ValueT lookup(const_arg_type_t< KeyT > Val) const
Return the entry for the specified key, or a default constructed value if no such entry exists.
Definition DenseMap.h:205
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:178
bool empty() const
Definition DenseMap.h:109
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:174
iterator end()
Definition DenseMap.h:81
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition DenseMap.h:239
Implements a dense probed hash-table based set.
Definition DenseSet.h:279
void recalculate(ParentType &Func)
recalculate - compute a dominator tree for the given function
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:159
unsigned getNumParams() const
Return the number of fixed parameters this function type requires.
Class to represent profile counts.
Definition Function.h:299
uint64_t getCount() const
Definition Function.h:307
const BasicBlock & getEntryBlock() const
Definition Function.h:809
BasicBlockListType::iterator iterator
Definition Function.h:70
Argument * arg_iterator
Definition Function.h:73
FunctionType * getFunctionType() const
Returns the FunctionType for me.
Definition Function.h:211
const BasicBlock & front() const
Definition Function.h:860
iterator_range< arg_iterator > args()
Definition Function.h:892
DISubprogram * getSubprogram() const
Get the attached subprogram.
bool hasGC() const
hasGC/getGC/setGC/clearGC - The name of the garbage collection algorithm to use during code generatio...
Definition Function.h:346
CallingConv::ID getCallingConv() const
getCallingConv()/setCallingConv(CC) - These method get and set the calling convention of this functio...
Definition Function.h:272
bool hasPersonalityFn() const
Check whether this function has a personality function.
Definition Function.h:905
Constant * getPersonalityFn() const
Get the personality function associated with this function.
arg_iterator arg_end()
Definition Function.h:877
arg_iterator arg_begin()
Definition Function.h:868
bool isIntrinsic() const
isIntrinsic - Returns true if the function's name starts with "llvm.".
Definition Function.h:251
MaybeAlign getParamAlign(unsigned ArgNo) const
Definition Function.h:489
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function.
Definition Function.cpp:358
const std::string & getGC() const
Definition Function.cpp:818
std::optional< ProfileCount > getEntryCount(bool AllowSynthetic=false) const
Get the entry count for this function.
Type * getReturnType() const
Returns the type of the ret val.
Definition Function.h:216
iterator end()
Definition Function.h:855
void setCallingConv(CallingConv::ID CC)
Definition Function.h:276
bool onlyReadsMemory() const
Determine if the function does not access or only reads memory.
Definition Function.cpp:875
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
Definition Function.cpp:728
bool hasMetadata() const
Return true if this GlobalObject has any metadata attached to it.
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this GlobalObject.
LLVM_ABI bool isDeclaration() const
Return true if the primary definition of this global value is outside of the current translation unit...
Definition Globals.cpp:337
LLVM_ABI CallInst * CreateLifetimeStart(Value *Ptr)
Create a lifetime.start intrinsic.
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition IRBuilder.h:2858
This class captures the data input to the InlineFunction call, and records the auxiliary results prod...
Definition Cloning.h:259
Value * ConvergenceControlToken
Definition Cloning.h:284
ProfileSummaryInfo * PSI
Definition Cloning.h:272
bool UpdateProfile
Update profile for callee as well as cloned version.
Definition Cloning.h:289
Instruction * CallSiteEHPad
Definition Cloning.h:285
function_ref< AssumptionCache &(Function &)> GetAssumptionCache
If non-null, InlineFunction will update the callgraph to reflect the changes it makes.
Definition Cloning.h:271
BlockFrequencyInfo * CalleeBFI
Definition Cloning.h:273
SmallVector< AllocaInst *, 4 > StaticAllocas
InlineFunction fills this in with all static allocas that get copied into the caller.
Definition Cloning.h:277
BlockFrequencyInfo * CallerBFI
Definition Cloning.h:273
SmallVector< CallBase *, 8 > InlinedCallSites
All of the new call sites inlined into the caller.
Definition Cloning.h:282
InlineResult is basically true or false.
Definition InlineCost.h:181
static InlineResult success()
Definition InlineCost.h:186
static InlineResult failure(const char *Reason)
Definition InlineCost.h:187
This represents the llvm.instrprof.callsite intrinsic.
This represents the llvm.instrprof.increment intrinsic.
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
bool hasMetadata() const
Return true if this instruction has any metadata attached to it.
LLVM_ABI void insertBefore(InstListType::iterator InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified position.
LLVM_ABI InstListType::iterator eraseFromParent()
This method unlinks 'this' from the containing basic block and deletes it.
LLVM_ABI const Function * getFunction() const
Return the function this instruction belongs to.
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this instruction belongs to.
A wrapper class for inspecting calls to intrinsic functions.
static LLVM_ABI bool mayLowerToFunctionCall(Intrinsic::ID IID)
Check if the intrinsic might lower into a regular function call in the course of IR transformations.
Invoke instruction.
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
The landingpad instruction holds all of the information necessary to generate correct exception handl...
bool isCleanup() const
Return 'true' if this landingpad instruction is a cleanup.
unsigned getNumClauses() const
Get the number of clauses for this landing pad.
Constant * getClause(unsigned Idx) const
Get the value of the clause at index Idx.
An instruction for reading from memory.
MDNode * createAnonymousAliasScope(MDNode *Domain, StringRef Name=StringRef())
Return metadata appropriate for an alias scope root node.
Definition MDBuilder.h:195
MDNode * createAnonymousAliasScopeDomain(StringRef Name=StringRef())
Return metadata appropriate for an alias scope domain node.
Definition MDBuilder.h:188
Metadata node.
Definition Metadata.h:1080
static MDTuple * getDistinct(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1580
void replaceAllUsesWith(Metadata *MD)
RAUW a temporary.
Definition Metadata.h:1284
static LLVM_ABI MDNode * concatenate(MDNode *A, MDNode *B)
Methods for metadata merging.
bool isTemporary() const
Definition Metadata.h:1264
ArrayRef< MDOperand > operands() const
Definition Metadata.h:1442
op_iterator op_end() const
Definition Metadata.h:1438
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1572
unsigned getNumOperands() const
Return number of MDNode operands.
Definition Metadata.h:1450
op_iterator op_begin() const
Definition Metadata.h:1434
LLVMContext & getContext() const
Definition Metadata.h:1244
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
Definition Metadata.cpp:614
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Return a temporary node.
Definition Metadata.h:1549
bool onlyAccessesInaccessibleMem() const
Whether this function only (at most) accesses inaccessible memory.
Definition ModRef.h:265
bool onlyAccessesArgPointees() const
Whether this function only (at most) accesses argument memory.
Definition ModRef.h:255
Root of the metadata hierarchy.
Definition Metadata.h:64
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
The optimization diagnostic interface.
The instrumented contextual profile, produced by the CtxProfAnalysis.
LLVM_ABI bool isInSpecializedModule() const
LLVM_ABI void update(Visitor, const Function &F)
uint32_t getNumCounters(const Function &F) const
uint32_t allocateNextCounterIndex(const Function &F)
uint32_t getNumCallsites(const Function &F) const
uint32_t allocateNextCallsiteIndex(const Function &F)
A node (context) in the loaded contextual profile, suitable for mutation during IPO passes.
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
static LLVM_ABI PointerType * get(Type *ElementType, unsigned AddressSpace)
This constructs a pointer to an object of the specified type in a numbered address space.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
Analysis providing profile information.
LLVM_ABI std::optional< uint64_t > getProfileCount(const CallBase &CallInst, BlockFrequencyInfo *BFI, bool AllowSynthetic=false) const
Returns the profile count for CallInst.
Resume the propagation of an exception.
Return a value (possibly void), from a function.
bool remove(const value_type &X)
Remove an item from the set vector.
Definition SetVector.h:181
bool contains(const_arg_type key) const
Check if the SetVector contains the given key.
Definition SetVector.h:252
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition SetVector.h:151
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
void insert_range(Range &&R)
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
bool contains(ConstPtrType Ptr) const
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
A SetVector that performs no allocations if smaller than a certain size.
Definition SetVector.h:339
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
void reserve(size_type N)
void append(ItTy in_start, ItTy in_end)
Add the specified range to the end of the SmallVector.
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
Definition Type.cpp:314
LLVM_ABI unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
bool isVoidTy() const
Return true if this is 'void'.
Definition Type.h:141
Unconditional Branch instruction.
void setSuccessor(BasicBlock *NewSucc)
static UncondBrInst * Create(BasicBlock *Target, InsertPosition InsertBefore=nullptr)
BasicBlock * getSuccessor(unsigned i=0) const
Value * getOperand(unsigned i) const
Definition User.h:207
This class represents the va_arg llvm instruction, which returns an argument of the specified type gi...
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:509
See the file comment.
Definition ValueMap.h:84
ValueT lookup(const KeyT &Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
Definition ValueMap.h:167
size_type count(const KeyT &Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition ValueMap.h:156
iterator begin()
Definition ValueMap.h:138
iterator end()
Definition ValueMap.h:139
ValueMapIteratorImpl< MapT, const Value *, false > iterator
Definition ValueMap.h:135
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:255
LLVM_ABI void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition Value.cpp:549
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:258
iterator_range< user_iterator > users()
Definition Value.h:426
bool use_empty() const
Definition Value.h:346
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:318
LLVM_ABI void takeName(Value *V)
Transfer the name from V to this value.
Definition Value.cpp:399
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:202
const ParentTy * getParent() const
Definition ilist_node.h:34
self_iterator getIterator()
Definition ilist_node.h:123
Class to build a trie of call stack contexts for a particular profiled allocation call,...
Helper class to iterate through stack ids in both metadata (memprof MIB and callsite) and the corresp...
CallInst * Call
Changed
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
CallingConv Namespace - This namespace contains an enum with a value for the well-known calling conve...
Definition CallingConv.h:21
@ BasicBlock
Various leaf nodes.
Definition ISDOpcodes.h:81
LLVM_ABI Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > OverloadTys={})
Look up the Function declaration of the intrinsic id in the Module M.
bool match(Val *V, const Pattern &P)
match_immconstant_ty m_ImmConstant()
Match an arbitrary immediate Constant and ignore it.
LLVM_ABI void trackAssignments(Function::iterator Start, Function::iterator End, const StorageToVarsMap &Vars, const DataLayout &DL, bool DebugPrints=false)
Track assignments to Vars between Start and End.
LLVM_ABI void remapAssignID(DenseMap< DIAssignID *, DIAssignID * > &Map, Instruction &I)
Replace DIAssignID uses and attachments with IDs from Map.
SmallVector< DbgVariableRecord * > getDVRAssignmentMarkers(const Instruction *Inst)
Return a range of dbg_assign records for which Inst performs the assignment they encode.
Definition DebugInfo.h:203
DenseMap< const AllocaInst *, SmallSetVector< VarRecord, 2 > > StorageToVarsMap
Map of backing storage to a set of variables that are stored to it.
Definition DebugInfo.h:286
initializer< Ty > init(const Ty &Val)
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract(Y &&MD)
Extract a Value from Metadata, if any.
Definition Metadata.h:696
LLVM_ABI MDNode * getMIBStackNode(const MDNode *MIB)
Returns the stack node from an MIB metadata node.
constexpr double phi
ARCInstKind getAttachedARCFunctionKind(const CallBase *CB)
This function returns the ARCInstKind of the function attached to operand bundle clang_arc_attachedca...
Definition ObjCARCUtil.h:75
ARCInstKind
Equivalence classes of instructions in the ARC Model.
@ None
anything that is inert from an ARC perspective.
@ RetainRV
objc_retainAutoreleasedReturnValue
std::optional< Function * > getAttachedARCFunction(const CallBase *CB)
This function returns operand bundle clang_arc_attachedcall's argument, which is the address of the A...
Definition ObjCARCUtil.h:43
bool isRetainOrClaimRV(ARCInstKind Kind)
Check whether the function is retainRV/unsafeClaimRV.
Definition ObjCARCUtil.h:67
const Value * GetRCIdentityRoot(const Value *V)
The RCIdentity root of a value V is a dominating value U for which retaining or releasing U is equiva...
bool hasAttachedCallOpBundle(const CallBase *CB)
Definition ObjCARCUtil.h:29
This is an optimization pass for GlobalISel generic memory operations.
UnaryFunction for_each(R &&Range, UnaryFunction F)
Provide wrappers to std::for_each which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1731
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
Definition STLExtras.h:1668
LLVM_ABI BasicBlock * changeToInvokeAndSplitBasicBlock(CallInst *CI, BasicBlock *UnwindEdge, DomTreeUpdater *DTU=nullptr)
Convert the CallInst to InvokeInst with the specified unwind edge basic block.
Definition Local.cpp:2644
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
auto successors(const MachineBasicBlock *BB)
LLVM_ABI void CloneAndPruneFunctionInto(Function *NewFunc, const Function *OldFunc, ValueToValueMapTy &VMap, bool ModuleLevelChanges, SmallVectorImpl< ReturnInst * > &Returns, const char *NameSuffix, ClonedCodeInfo &CodeInfo)
This works exactly like CloneFunctionInto, except that it does some simple constant prop and DCE on t...
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
void append_range(Container &C, Range &&R)
Wrapper function to append range R to container C.
Definition STLExtras.h:2207
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...
Definition STLExtras.h:633
std::string utostr(uint64_t X, bool isNeg=false)
MemoryEffectsBase< IRMemLocation > MemoryEffects
Summary of how a function affects memory in the program.
Definition ModRef.h:356
bool isa_and_nonnull(const Y &Val)
Definition Casting.h:676
LLVM_ABI InlineResult InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, bool MergeAttributes=false, AAResults *CalleeAAR=nullptr, bool InsertLifetime=true, bool TrackInlineHistory=false, Function *ForwardVarArgsTo=nullptr, OptimizationRemarkEmitter *ORE=nullptr)
This function inlines the called function into the basic block of the caller.
LLVM_ABI bool PointerMayBeCapturedBefore(const Value *V, bool ReturnCaptures, const Instruction *I, const DominatorTree *DT, bool IncludeI=false, unsigned MaxUsesToExplore=0, const LoopInfo *LI=nullptr)
PointerMayBeCapturedBefore - Return true if this pointer value may be captured by the enclosing funct...
LLVM_ABI InlineResult CanInlineCallSite(const CallBase &CB, InlineFunctionInfo &IFI)
Check if it is legal to perform inlining of the function called by CB into the caller at this particu...
bool isScopedEHPersonality(EHPersonality Pers)
Returns true if this personality uses scope-style EH IR instructions: catchswitch,...
LLVM_ABI Value * simplifyInstruction(Instruction *I, const SimplifyQuery &Q)
See if we can compute a simplified version of this instruction.
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
Align 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:252
LLVM_ABI Align getOrEnforceKnownAlignment(Value *V, MaybeAlign 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:1581
FPClassTest
Floating-point class tests, supported by 'is_fpclass' intrinsic.
Function::ProfileCount ProfileCount
LLVM_ABI EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ABI unsigned changeToUnreachable(Instruction *I, bool PreserveLCSSA=false, DomTreeUpdater *DTU=nullptr, MemorySSAUpdater *MSSAU=nullptr)
Insert an unreachable instruction before the specified instruction, making it and the rest of the cod...
Definition Local.cpp:2554
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
IRBuilder(LLVMContext &, FolderTy, InserterTy, MDNode *, ArrayRef< OperandBundleDef >) -> IRBuilder< FolderTy, InserterTy >
LLVM_ABI bool salvageKnowledge(Instruction *I, AssumptionCache *AC=nullptr, DominatorTree *DT=nullptr)
Calls BuildAssumeFromInst and if the resulting llvm.assume is valid insert if before I.
LLVM_ABI void updateProfileCallee(Function *Callee, int64_t EntryDelta, const ValueMap< const Value *, WeakTrackingVH > *VMap=nullptr)
Updates profile information by adjusting the entry count by adding EntryDelta then scaling callsite i...
OperandBundleDefT< Value * > OperandBundleDef
Definition AutoUpgrade.h:34
LLVM_ABI bool isAssignmentTrackingEnabled(const Module &M)
Return true if assignment tracking is enabled for module M.
LLVM_ABI void InlineFunctionImpl(CallBase &CB, InlineFunctionInfo &IFI, bool MergeAttributes=false, AAResults *CalleeAAR=nullptr, bool InsertLifetime=true, bool TrackInlineHistory=false, Function *ForwardVarArgsTo=nullptr, OptimizationRemarkEmitter *ORE=nullptr)
This should generally not be used, use InlineFunction instead.
LLVM_ABI MDNode * uniteAccessGroups(MDNode *AccGroups1, MDNode *AccGroups2)
Compute the union of two access-group lists.
DWARFExpression::Operation Op
bool isAsynchronousEHPersonality(EHPersonality Pers)
Returns true if this personality function catches asynchronous exceptions.
ValueMap< const Value *, WeakTrackingVH > ValueToValueMapTy
LLVM_ABI bool isGuaranteedToTransferExecutionToSuccessor(const Instruction *I)
Return true if this function can prove that the instruction I will always transfer execution to one o...
LLVM_ABI bool isEscapeSource(const Value *V)
Returns true if the pointer is one which would have been considered an escape by isNotCapturedBefore.
auto count_if(R &&Range, UnaryPredicate P)
Wrapper function around std::count_if to count the number of times an element satisfying a given pred...
Definition STLExtras.h:2018
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
void erase_if(Container &C, UnaryPredicate P)
Provide a container algorithm similar to C++ Library Fundamentals v2's erase_if which is equivalent t...
Definition STLExtras.h:2191
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition STLExtras.h:1946
bool capturesAnything(CaptureComponents CC)
Definition ModRef.h:379
bool pred_empty(const BasicBlock *BB)
Definition CFG.h:119
LLVM_ABI const Value * getUnderlyingObject(const Value *V, unsigned MaxLookup=MaxLookupSearchDepth)
This method strips off any GEP address adjustments, pointer casts or llvm.threadlocal....
LLVM_ABI void getUnderlyingObjects(const Value *V, SmallVectorImpl< const Value * > &Objects, const LoopInfo *LI=nullptr, unsigned MaxLookup=MaxLookupSearchDepth)
This method is similar to getUnderlyingObject except that it can look through phi and select instruct...
LLVM_ABI void updateLoopMetadataDebugLocations(Instruction &I, function_ref< Metadata *(Metadata *)> Updater)
Update the debug locations contained within the MD_loop metadata attached to the instruction I,...
LLVM_ABI bool isIdentifiedObject(const Value *V)
Return true if this pointer refers to a distinct and identifiable object.
LLVM_ABI void scaleProfData(Instruction &I, uint64_t S, uint64_t T)
Scaling the profile data attached to 'I' using the ratio of S/T.
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition BitVector.h:876
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
This struct can be used to capture information about code being cloned, while it is being cloned.
Definition Cloning.h:69
bool ContainsDynamicAllocas
This is set to true if the cloned code contains a 'dynamic' alloca.
Definition Cloning.h:80
bool isSimplified(const Value *From, const Value *To) const
Definition Cloning.h:98
bool ContainsCalls
This is set to true if the cloned code contains a normal call instruction.
Definition Cloning.h:71
bool ContainsMemProfMetadata
This is set to true if there is memprof related metadata (memprof or callsite metadata) in the cloned...
Definition Cloning.h:75
SmallSetVector< const Value *, 4 > OriginallyIndirectCalls
Definition Cloning.h:94
std::vector< WeakTrackingVH > OperandBundleCallSites
All cloned call sites that have operand bundles attached are appended to this vector.
Definition Cloning.h:85
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Definition Alignment.h:106
Align valueOrOne() const
For convenience, returns a valid alignment or 1 if undefined.
Definition Alignment.h:130
static Instruction * tryGetVTableInstruction(CallBase *CB)
Helper struct for trackAssignments, below.
Definition DebugInfo.h:244