CallSite.h revision 360784
1//===- CallSite.h - Abstract Call & Invoke instrs ---------------*- C++ -*-===//
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 defines the CallSite class, which is a handy wrapper for code that
10// wants to treat Call, Invoke and CallBr instructions in a generic way. When
11// in non-mutation context (e.g. an analysis) ImmutableCallSite should be used.
12// Finally, when some degree of customization is necessary between these two
13// extremes, CallSiteBase<> can be supplied with fine-tuned parameters.
14//
15// NOTE: These classes are supposed to have "value semantics". So they should be
16// passed by value, not by reference; they should not be "new"ed or "delete"d.
17// They are efficiently copyable, assignable and constructable, with cost
18// equivalent to copying a pointer (notice that they have only a single data
19// member). The internal representation carries a flag which indicates which of
20// the three variants is enclosed. This allows for cheaper checks when various
21// accessors of CallSite are employed.
22//
23//===----------------------------------------------------------------------===//
24
25#ifndef LLVM_IR_CALLSITE_H
26#define LLVM_IR_CALLSITE_H
27
28#include "llvm/ADT/Optional.h"
29#include "llvm/ADT/PointerIntPair.h"
30#include "llvm/ADT/iterator_range.h"
31#include "llvm/IR/Attributes.h"
32#include "llvm/IR/CallingConv.h"
33#include "llvm/IR/Function.h"
34#include "llvm/IR/InstrTypes.h"
35#include "llvm/IR/Instruction.h"
36#include "llvm/IR/Instructions.h"
37#include "llvm/IR/Use.h"
38#include "llvm/IR/User.h"
39#include "llvm/IR/Value.h"
40#include "llvm/Support/Casting.h"
41#include <cassert>
42#include <cstdint>
43#include <iterator>
44
45namespace llvm {
46
47namespace Intrinsic {
48typedef unsigned ID;
49}
50
51template <typename FunTy = const Function, typename BBTy = const BasicBlock,
52          typename ValTy = const Value, typename UserTy = const User,
53          typename UseTy = const Use, typename InstrTy = const Instruction,
54          typename CallTy = const CallInst,
55          typename InvokeTy = const InvokeInst,
56          typename CallBrTy = const CallBrInst,
57          typename IterTy = User::const_op_iterator>
58class CallSiteBase {
59protected:
60  PointerIntPair<InstrTy *, 2, int> I;
61
62  CallSiteBase() = default;
63  CallSiteBase(CallTy *CI) : I(CI, 1) { assert(CI); }
64  CallSiteBase(InvokeTy *II) : I(II, 0) { assert(II); }
65  CallSiteBase(CallBrTy *CBI) : I(CBI, 2) { assert(CBI); }
66  explicit CallSiteBase(ValTy *II) { *this = get(II); }
67
68private:
69  /// This static method is like a constructor. It will create an appropriate
70  /// call site for a Call, Invoke or CallBr instruction, but it can also create
71  /// a null initialized CallSiteBase object for something which is NOT a call
72  /// site.
73  static CallSiteBase get(ValTy *V) {
74    if (InstrTy *II = dyn_cast<InstrTy>(V)) {
75      if (II->getOpcode() == Instruction::Call)
76        return CallSiteBase(static_cast<CallTy*>(II));
77      if (II->getOpcode() == Instruction::Invoke)
78        return CallSiteBase(static_cast<InvokeTy*>(II));
79      if (II->getOpcode() == Instruction::CallBr)
80        return CallSiteBase(static_cast<CallBrTy *>(II));
81    }
82    return CallSiteBase();
83  }
84
85public:
86  /// Return true if a CallInst is enclosed.
87  bool isCall() const { return I.getInt() == 1; }
88
89  /// Return true if a InvokeInst is enclosed. !I.getInt() may also signify a
90  /// NULL instruction pointer, so check that.
91  bool isInvoke() const { return getInstruction() && I.getInt() == 0; }
92
93  /// Return true if a CallBrInst is enclosed.
94  bool isCallBr() const { return I.getInt() == 2; }
95
96  InstrTy *getInstruction() const { return I.getPointer(); }
97  InstrTy *operator->() const { return I.getPointer(); }
98  explicit operator bool() const { return I.getPointer(); }
99
100  /// Get the basic block containing the call site.
101  BBTy* getParent() const { return getInstruction()->getParent(); }
102
103  /// Return the pointer to function that is being called.
104  ValTy *getCalledValue() const {
105    assert(getInstruction() && "Not a call, invoke or callbr instruction!");
106    return *getCallee();
107  }
108
109  /// Return the function being called if this is a direct call, otherwise
110  /// return null (if it's an indirect call).
111  FunTy *getCalledFunction() const {
112    return dyn_cast<FunTy>(getCalledValue());
113  }
114
115  /// Return true if the callsite is an indirect call.
116  bool isIndirectCall() const {
117    const Value *V = getCalledValue();
118    if (!V)
119      return false;
120    if (isa<FunTy>(V) || isa<Constant>(V))
121      return false;
122    if (const CallBase *CB = dyn_cast<CallBase>(getInstruction()))
123      if (CB->isInlineAsm())
124        return false;
125    return true;
126  }
127
128  /// Set the callee to the specified value.  Unlike the function of the same
129  /// name on CallBase, does not modify the type!
130  void setCalledFunction(Value *V) {
131    assert(getInstruction() && "Not a call, callbr, or invoke instruction!");
132    assert(cast<PointerType>(V->getType())->getElementType() ==
133               cast<CallBase>(getInstruction())->getFunctionType() &&
134           "New callee type does not match FunctionType on call");
135    *getCallee() = V;
136  }
137
138  /// Return the intrinsic ID of the intrinsic called by this CallSite,
139  /// or Intrinsic::not_intrinsic if the called function is not an
140  /// intrinsic, or if this CallSite is an indirect call.
141  Intrinsic::ID getIntrinsicID() const {
142    if (auto *F = getCalledFunction())
143      return F->getIntrinsicID();
144    // Don't use Intrinsic::not_intrinsic, as it will require pulling
145    // Intrinsics.h into every header that uses CallSite.
146    return static_cast<Intrinsic::ID>(0);
147  }
148
149  /// Determine whether the passed iterator points to the callee operand's Use.
150  bool isCallee(Value::const_user_iterator UI) const {
151    return isCallee(&UI.getUse());
152  }
153
154  /// Determine whether this Use is the callee operand's Use.
155  bool isCallee(const Use *U) const { return getCallee() == U; }
156
157  /// Determine whether the passed iterator points to an argument operand.
158  bool isArgOperand(Value::const_user_iterator UI) const {
159    return isArgOperand(&UI.getUse());
160  }
161
162  /// Determine whether the passed use points to an argument operand.
163  bool isArgOperand(const Use *U) const {
164    assert(getInstruction() == U->getUser());
165    return arg_begin() <= U && U < arg_end();
166  }
167
168  /// Determine whether the passed iterator points to a bundle operand.
169  bool isBundleOperand(Value::const_user_iterator UI) const {
170    return isBundleOperand(&UI.getUse());
171  }
172
173  /// Determine whether the passed use points to a bundle operand.
174  bool isBundleOperand(const Use *U) const {
175    assert(getInstruction() == U->getUser());
176    if (!hasOperandBundles())
177      return false;
178    unsigned OperandNo = U - (*this)->op_begin();
179    return getBundleOperandsStartIndex() <= OperandNo &&
180           OperandNo < getBundleOperandsEndIndex();
181  }
182
183  /// Determine whether the passed iterator points to a data operand.
184  bool isDataOperand(Value::const_user_iterator UI) const {
185    return isDataOperand(&UI.getUse());
186  }
187
188  /// Determine whether the passed use points to a data operand.
189  bool isDataOperand(const Use *U) const {
190    return data_operands_begin() <= U && U < data_operands_end();
191  }
192
193  ValTy *getArgument(unsigned ArgNo) const {
194    assert(arg_begin() + ArgNo < arg_end() && "Argument # out of range!");
195    return *(arg_begin() + ArgNo);
196  }
197
198  void setArgument(unsigned ArgNo, Value* newVal) {
199    assert(getInstruction() && "Not a call, invoke or callbr instruction!");
200    assert(arg_begin() + ArgNo < arg_end() && "Argument # out of range!");
201    getInstruction()->setOperand(ArgNo, newVal);
202  }
203
204  /// Given a value use iterator, returns the argument that corresponds to it.
205  /// Iterator must actually correspond to an argument.
206  unsigned getArgumentNo(Value::const_user_iterator I) const {
207    return getArgumentNo(&I.getUse());
208  }
209
210  /// Given a use for an argument, get the argument number that corresponds to
211  /// it.
212  unsigned getArgumentNo(const Use *U) const {
213    assert(getInstruction() && "Not a call, invoke or callbr instruction!");
214    assert(isArgOperand(U) && "Argument # out of range!");
215    return U - arg_begin();
216  }
217
218  /// The type of iterator to use when looping over actual arguments at this
219  /// call site.
220  using arg_iterator = IterTy;
221
222  iterator_range<IterTy> args() const {
223    return make_range(arg_begin(), arg_end());
224  }
225  bool arg_empty() const { return arg_end() == arg_begin(); }
226  unsigned arg_size() const { return unsigned(arg_end() - arg_begin()); }
227
228  /// Given a value use iterator, return the data operand corresponding to it.
229  /// Iterator must actually correspond to a data operand.
230  unsigned getDataOperandNo(Value::const_user_iterator UI) const {
231    return getDataOperandNo(&UI.getUse());
232  }
233
234  /// Given a use for a data operand, get the data operand number that
235  /// corresponds to it.
236  unsigned getDataOperandNo(const Use *U) const {
237    assert(getInstruction() && "Not a call, invoke or callbr instruction!");
238    assert(isDataOperand(U) && "Data operand # out of range!");
239    return U - data_operands_begin();
240  }
241
242  /// Type of iterator to use when looping over data operands at this call site
243  /// (see below).
244  using data_operand_iterator = IterTy;
245
246  /// data_operands_begin/data_operands_end - Return iterators iterating over
247  /// the call / invoke / callbr argument list and bundle operands. For invokes,
248  /// this is the set of instruction operands except the invoke target and the
249  /// two successor blocks; for calls this is the set of instruction operands
250  /// except the call target; for callbrs the number of labels to skip must be
251  /// determined first.
252
253  IterTy data_operands_begin() const {
254    assert(getInstruction() && "Not a call or invoke instruction!");
255    return cast<CallBase>(getInstruction())->data_operands_begin();
256  }
257  IterTy data_operands_end() const {
258    assert(getInstruction() && "Not a call or invoke instruction!");
259    return cast<CallBase>(getInstruction())->data_operands_end();
260  }
261  iterator_range<IterTy> data_ops() const {
262    return make_range(data_operands_begin(), data_operands_end());
263  }
264  bool data_operands_empty() const {
265    return data_operands_end() == data_operands_begin();
266  }
267  unsigned data_operands_size() const {
268    return std::distance(data_operands_begin(), data_operands_end());
269  }
270
271  /// Return the type of the instruction that generated this call site.
272  Type *getType() const { return (*this)->getType(); }
273
274  /// Return the caller function for this call site.
275  FunTy *getCaller() const { return (*this)->getParent()->getParent(); }
276
277  /// Tests if this call site must be tail call optimized. Only a CallInst can
278  /// be tail call optimized.
279  bool isMustTailCall() const {
280    return isCall() && cast<CallInst>(getInstruction())->isMustTailCall();
281  }
282
283  /// Tests if this call site is marked as a tail call.
284  bool isTailCall() const {
285    return isCall() && cast<CallInst>(getInstruction())->isTailCall();
286  }
287
288#define CALLSITE_DELEGATE_GETTER(METHOD)                                       \
289  InstrTy *II = getInstruction();                                              \
290  return isCall() ? cast<CallInst>(II)->METHOD                                 \
291                  : isCallBr() ? cast<CallBrInst>(II)->METHOD                  \
292                                : cast<InvokeInst>(II)->METHOD
293
294#define CALLSITE_DELEGATE_SETTER(METHOD)                                       \
295  InstrTy *II = getInstruction();                                              \
296  if (isCall())                                                                \
297    cast<CallInst>(II)->METHOD;                                                \
298  else if (isCallBr())                                                         \
299    cast<CallBrInst>(II)->METHOD;                                              \
300  else                                                                         \
301    cast<InvokeInst>(II)->METHOD
302
303  unsigned getNumArgOperands() const {
304    CALLSITE_DELEGATE_GETTER(getNumArgOperands());
305  }
306
307  ValTy *getArgOperand(unsigned i) const {
308    CALLSITE_DELEGATE_GETTER(getArgOperand(i));
309  }
310
311  ValTy *getReturnedArgOperand() const {
312    CALLSITE_DELEGATE_GETTER(getReturnedArgOperand());
313  }
314
315  bool isInlineAsm() const {
316    return cast<CallBase>(getInstruction())->isInlineAsm();
317  }
318
319  /// Get the calling convention of the call.
320  CallingConv::ID getCallingConv() const {
321    CALLSITE_DELEGATE_GETTER(getCallingConv());
322  }
323  /// Set the calling convention of the call.
324  void setCallingConv(CallingConv::ID CC) {
325    CALLSITE_DELEGATE_SETTER(setCallingConv(CC));
326  }
327
328  FunctionType *getFunctionType() const {
329    CALLSITE_DELEGATE_GETTER(getFunctionType());
330  }
331
332  void mutateFunctionType(FunctionType *Ty) const {
333    CALLSITE_DELEGATE_SETTER(mutateFunctionType(Ty));
334  }
335
336  /// Get the parameter attributes of the call.
337  AttributeList getAttributes() const {
338    CALLSITE_DELEGATE_GETTER(getAttributes());
339  }
340  /// Set the parameter attributes of the call.
341  void setAttributes(AttributeList PAL) {
342    CALLSITE_DELEGATE_SETTER(setAttributes(PAL));
343  }
344
345  void addAttribute(unsigned i, Attribute::AttrKind Kind) {
346    CALLSITE_DELEGATE_SETTER(addAttribute(i, Kind));
347  }
348
349  void addAttribute(unsigned i, Attribute Attr) {
350    CALLSITE_DELEGATE_SETTER(addAttribute(i, Attr));
351  }
352
353  void addParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) {
354    CALLSITE_DELEGATE_SETTER(addParamAttr(ArgNo, Kind));
355  }
356
357  void removeAttribute(unsigned i, Attribute::AttrKind Kind) {
358    CALLSITE_DELEGATE_SETTER(removeAttribute(i, Kind));
359  }
360
361  void removeAttribute(unsigned i, StringRef Kind) {
362    CALLSITE_DELEGATE_SETTER(removeAttribute(i, Kind));
363  }
364
365  void removeParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) {
366    CALLSITE_DELEGATE_SETTER(removeParamAttr(ArgNo, Kind));
367  }
368
369  /// Return true if this function has the given attribute.
370  bool hasFnAttr(Attribute::AttrKind Kind) const {
371    CALLSITE_DELEGATE_GETTER(hasFnAttr(Kind));
372  }
373
374  /// Return true if this function has the given attribute.
375  bool hasFnAttr(StringRef Kind) const {
376    CALLSITE_DELEGATE_GETTER(hasFnAttr(Kind));
377  }
378
379  /// Return true if this return value has the given attribute.
380  bool hasRetAttr(Attribute::AttrKind Kind) const {
381    CALLSITE_DELEGATE_GETTER(hasRetAttr(Kind));
382  }
383
384  /// Return true if the call or the callee has the given attribute.
385  bool paramHasAttr(unsigned ArgNo, Attribute::AttrKind Kind) const {
386    CALLSITE_DELEGATE_GETTER(paramHasAttr(ArgNo, Kind));
387  }
388
389  Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const {
390    CALLSITE_DELEGATE_GETTER(getAttribute(i, Kind));
391  }
392
393  Attribute getAttribute(unsigned i, StringRef Kind) const {
394    CALLSITE_DELEGATE_GETTER(getAttribute(i, Kind));
395  }
396
397  /// Return true if the data operand at index \p i directly or indirectly has
398  /// the attribute \p A.
399  ///
400  /// Normal call, invoke or callbr arguments have per operand attributes, as
401  /// specified in the attribute set attached to this instruction, while operand
402  /// bundle operands may have some attributes implied by the type of its
403  /// containing operand bundle.
404  bool dataOperandHasImpliedAttr(unsigned i, Attribute::AttrKind Kind) const {
405    CALLSITE_DELEGATE_GETTER(dataOperandHasImpliedAttr(i, Kind));
406  }
407
408  /// Extract the alignment of the return value.
409  unsigned getRetAlignment() const {
410    CALLSITE_DELEGATE_GETTER(getRetAlignment());
411  }
412
413  /// Extract the alignment for a call or parameter (0=unknown).
414  unsigned getParamAlignment(unsigned ArgNo) const {
415    CALLSITE_DELEGATE_GETTER(getParamAlignment(ArgNo));
416  }
417
418  /// Extract the byval type for a call or parameter (nullptr=unknown).
419  Type *getParamByValType(unsigned ArgNo) const {
420    CALLSITE_DELEGATE_GETTER(getParamByValType(ArgNo));
421  }
422
423  /// Extract the number of dereferenceable bytes for a call or parameter
424  /// (0=unknown).
425  uint64_t getDereferenceableBytes(unsigned i) const {
426    CALLSITE_DELEGATE_GETTER(getDereferenceableBytes(i));
427  }
428
429  /// Extract the number of dereferenceable_or_null bytes for a call or
430  /// parameter (0=unknown).
431  uint64_t getDereferenceableOrNullBytes(unsigned i) const {
432    CALLSITE_DELEGATE_GETTER(getDereferenceableOrNullBytes(i));
433  }
434
435  /// Determine if the return value is marked with NoAlias attribute.
436  bool returnDoesNotAlias() const {
437    CALLSITE_DELEGATE_GETTER(returnDoesNotAlias());
438  }
439
440  /// Return true if the call should not be treated as a call to a builtin.
441  bool isNoBuiltin() const {
442    CALLSITE_DELEGATE_GETTER(isNoBuiltin());
443  }
444
445  /// Return true if the call requires strict floating point semantics.
446  bool isStrictFP() const {
447    CALLSITE_DELEGATE_GETTER(isStrictFP());
448  }
449
450  /// Return true if the call should not be inlined.
451  bool isNoInline() const {
452    CALLSITE_DELEGATE_GETTER(isNoInline());
453  }
454  void setIsNoInline(bool Value = true) {
455    CALLSITE_DELEGATE_SETTER(setIsNoInline(Value));
456  }
457
458  /// Determine if the call does not access memory.
459  bool doesNotAccessMemory() const {
460    CALLSITE_DELEGATE_GETTER(doesNotAccessMemory());
461  }
462  void setDoesNotAccessMemory() {
463    CALLSITE_DELEGATE_SETTER(setDoesNotAccessMemory());
464  }
465
466  /// Determine if the call does not access or only reads memory.
467  bool onlyReadsMemory() const {
468    CALLSITE_DELEGATE_GETTER(onlyReadsMemory());
469  }
470  void setOnlyReadsMemory() {
471    CALLSITE_DELEGATE_SETTER(setOnlyReadsMemory());
472  }
473
474  /// Determine if the call does not access or only writes memory.
475  bool doesNotReadMemory() const {
476    CALLSITE_DELEGATE_GETTER(doesNotReadMemory());
477  }
478  void setDoesNotReadMemory() {
479    CALLSITE_DELEGATE_SETTER(setDoesNotReadMemory());
480  }
481
482  /// Determine if the call can access memmory only using pointers based
483  /// on its arguments.
484  bool onlyAccessesArgMemory() const {
485    CALLSITE_DELEGATE_GETTER(onlyAccessesArgMemory());
486  }
487  void setOnlyAccessesArgMemory() {
488    CALLSITE_DELEGATE_SETTER(setOnlyAccessesArgMemory());
489  }
490
491  /// Determine if the function may only access memory that is
492  /// inaccessible from the IR.
493  bool onlyAccessesInaccessibleMemory() const {
494    CALLSITE_DELEGATE_GETTER(onlyAccessesInaccessibleMemory());
495  }
496  void setOnlyAccessesInaccessibleMemory() {
497    CALLSITE_DELEGATE_SETTER(setOnlyAccessesInaccessibleMemory());
498  }
499
500  /// Determine if the function may only access memory that is
501  /// either inaccessible from the IR or pointed to by its arguments.
502  bool onlyAccessesInaccessibleMemOrArgMem() const {
503    CALLSITE_DELEGATE_GETTER(onlyAccessesInaccessibleMemOrArgMem());
504  }
505  void setOnlyAccessesInaccessibleMemOrArgMem() {
506    CALLSITE_DELEGATE_SETTER(setOnlyAccessesInaccessibleMemOrArgMem());
507  }
508
509  /// Determine if the call cannot return.
510  bool doesNotReturn() const {
511    CALLSITE_DELEGATE_GETTER(doesNotReturn());
512  }
513  void setDoesNotReturn() {
514    CALLSITE_DELEGATE_SETTER(setDoesNotReturn());
515  }
516
517  /// Determine if the call cannot unwind.
518  bool doesNotThrow() const {
519    CALLSITE_DELEGATE_GETTER(doesNotThrow());
520  }
521  void setDoesNotThrow() {
522    CALLSITE_DELEGATE_SETTER(setDoesNotThrow());
523  }
524
525  /// Determine if the call can be duplicated.
526  bool cannotDuplicate() const {
527    CALLSITE_DELEGATE_GETTER(cannotDuplicate());
528  }
529  void setCannotDuplicate() {
530    CALLSITE_DELEGATE_SETTER(setCannotDuplicate());
531  }
532
533  /// Determine if the call is convergent.
534  bool isConvergent() const {
535    CALLSITE_DELEGATE_GETTER(isConvergent());
536  }
537  void setConvergent() {
538    CALLSITE_DELEGATE_SETTER(setConvergent());
539  }
540  void setNotConvergent() {
541    CALLSITE_DELEGATE_SETTER(setNotConvergent());
542  }
543
544  unsigned getNumOperandBundles() const {
545    CALLSITE_DELEGATE_GETTER(getNumOperandBundles());
546  }
547
548  bool hasOperandBundles() const {
549    CALLSITE_DELEGATE_GETTER(hasOperandBundles());
550  }
551
552  unsigned getBundleOperandsStartIndex() const {
553    CALLSITE_DELEGATE_GETTER(getBundleOperandsStartIndex());
554  }
555
556  unsigned getBundleOperandsEndIndex() const {
557    CALLSITE_DELEGATE_GETTER(getBundleOperandsEndIndex());
558  }
559
560  unsigned getNumTotalBundleOperands() const {
561    CALLSITE_DELEGATE_GETTER(getNumTotalBundleOperands());
562  }
563
564  OperandBundleUse getOperandBundleAt(unsigned Index) const {
565    CALLSITE_DELEGATE_GETTER(getOperandBundleAt(Index));
566  }
567
568  Optional<OperandBundleUse> getOperandBundle(StringRef Name) const {
569    CALLSITE_DELEGATE_GETTER(getOperandBundle(Name));
570  }
571
572  Optional<OperandBundleUse> getOperandBundle(uint32_t ID) const {
573    CALLSITE_DELEGATE_GETTER(getOperandBundle(ID));
574  }
575
576  unsigned countOperandBundlesOfType(uint32_t ID) const {
577    CALLSITE_DELEGATE_GETTER(countOperandBundlesOfType(ID));
578  }
579
580  bool isBundleOperand(unsigned Idx) const {
581    CALLSITE_DELEGATE_GETTER(isBundleOperand(Idx));
582  }
583
584  IterTy arg_begin() const {
585    CALLSITE_DELEGATE_GETTER(arg_begin());
586  }
587
588  IterTy arg_end() const {
589    CALLSITE_DELEGATE_GETTER(arg_end());
590  }
591
592#undef CALLSITE_DELEGATE_GETTER
593#undef CALLSITE_DELEGATE_SETTER
594
595  void getOperandBundlesAsDefs(SmallVectorImpl<OperandBundleDef> &Defs) const {
596    // Since this is actually a getter that "looks like" a setter, don't use the
597    // above macros to avoid confusion.
598    cast<CallBase>(getInstruction())->getOperandBundlesAsDefs(Defs);
599  }
600
601  /// Determine whether this data operand is not captured.
602  bool doesNotCapture(unsigned OpNo) const {
603    return dataOperandHasImpliedAttr(OpNo + 1, Attribute::NoCapture);
604  }
605
606  /// Determine whether this argument is passed by value.
607  bool isByValArgument(unsigned ArgNo) const {
608    return paramHasAttr(ArgNo, Attribute::ByVal);
609  }
610
611  /// Determine whether this argument is passed in an alloca.
612  bool isInAllocaArgument(unsigned ArgNo) const {
613    return paramHasAttr(ArgNo, Attribute::InAlloca);
614  }
615
616  /// Determine whether this argument is passed by value or in an alloca.
617  bool isByValOrInAllocaArgument(unsigned ArgNo) const {
618    return paramHasAttr(ArgNo, Attribute::ByVal) ||
619           paramHasAttr(ArgNo, Attribute::InAlloca);
620  }
621
622  /// Determine if there are is an inalloca argument. Only the last argument can
623  /// have the inalloca attribute.
624  bool hasInAllocaArgument() const {
625    return !arg_empty() && paramHasAttr(arg_size() - 1, Attribute::InAlloca);
626  }
627
628  bool doesNotAccessMemory(unsigned OpNo) const {
629    return dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
630  }
631
632  bool onlyReadsMemory(unsigned OpNo) const {
633    return dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadOnly) ||
634           dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
635  }
636
637  bool doesNotReadMemory(unsigned OpNo) const {
638    return dataOperandHasImpliedAttr(OpNo + 1, Attribute::WriteOnly) ||
639           dataOperandHasImpliedAttr(OpNo + 1, Attribute::ReadNone);
640  }
641
642  /// Return true if the return value is known to be not null.
643  /// This may be because it has the nonnull attribute, or because at least
644  /// one byte is dereferenceable and the pointer is in addrspace(0).
645  bool isReturnNonNull() const {
646    if (hasRetAttr(Attribute::NonNull))
647      return true;
648    else if (getDereferenceableBytes(AttributeList::ReturnIndex) > 0 &&
649             !NullPointerIsDefined(getCaller(),
650                                   getType()->getPointerAddressSpace()))
651      return true;
652
653    return false;
654  }
655
656  /// Returns true if this CallSite passes the given Value* as an argument to
657  /// the called function.
658  bool hasArgument(const Value *Arg) const {
659    for (arg_iterator AI = this->arg_begin(), E = this->arg_end(); AI != E;
660         ++AI)
661      if (AI->get() == Arg)
662        return true;
663    return false;
664  }
665
666private:
667  IterTy getCallee() const {
668    return cast<CallBase>(getInstruction())->op_end() - 1;
669  }
670};
671
672class CallSite : public CallSiteBase<Function, BasicBlock, Value, User, Use,
673                                     Instruction, CallInst, InvokeInst,
674                                     CallBrInst, User::op_iterator> {
675public:
676  CallSite() = default;
677  CallSite(CallSiteBase B) : CallSiteBase(B) {}
678  CallSite(CallInst *CI) : CallSiteBase(CI) {}
679  CallSite(InvokeInst *II) : CallSiteBase(II) {}
680  CallSite(CallBrInst *CBI) : CallSiteBase(CBI) {}
681  explicit CallSite(Instruction *II) : CallSiteBase(II) {}
682  explicit CallSite(Value *V) : CallSiteBase(V) {}
683
684  bool operator==(const CallSite &CS) const { return I == CS.I; }
685  bool operator!=(const CallSite &CS) const { return I != CS.I; }
686  bool operator<(const CallSite &CS) const {
687    return getInstruction() < CS.getInstruction();
688  }
689
690private:
691  friend struct DenseMapInfo<CallSite>;
692
693  User::op_iterator getCallee() const;
694};
695
696/// Establish a view to a call site for examination.
697class ImmutableCallSite : public CallSiteBase<> {
698public:
699  ImmutableCallSite() = default;
700  ImmutableCallSite(const CallInst *CI) : CallSiteBase(CI) {}
701  ImmutableCallSite(const InvokeInst *II) : CallSiteBase(II) {}
702  ImmutableCallSite(const CallBrInst *CBI) : CallSiteBase(CBI) {}
703  explicit ImmutableCallSite(const Instruction *II) : CallSiteBase(II) {}
704  explicit ImmutableCallSite(const Value *V) : CallSiteBase(V) {}
705  ImmutableCallSite(CallSite CS) : CallSiteBase(CS.getInstruction()) {}
706};
707
708/// AbstractCallSite
709///
710/// An abstract call site is a wrapper that allows to treat direct,
711/// indirect, and callback calls the same. If an abstract call site
712/// represents a direct or indirect call site it behaves like a stripped
713/// down version of a normal call site object. The abstract call site can
714/// also represent a callback call, thus the fact that the initially
715/// called function (=broker) may invoke a third one (=callback callee).
716/// In this case, the abstract call site hides the middle man, hence the
717/// broker function. The result is a representation of the callback call,
718/// inside the broker, but in the context of the original call to the broker.
719///
720/// There are up to three functions involved when we talk about callback call
721/// sites. The caller (1), which invokes the broker function. The broker
722/// function (2), that will invoke the callee zero or more times. And finally
723/// the callee (3), which is the target of the callback call.
724///
725/// The abstract call site will handle the mapping from parameters to arguments
726/// depending on the semantic of the broker function. However, it is important
727/// to note that the mapping is often partial. Thus, some arguments of the
728/// call/invoke instruction are mapped to parameters of the callee while others
729/// are not.
730class AbstractCallSite {
731public:
732
733  /// The encoding of a callback with regards to the underlying instruction.
734  struct CallbackInfo {
735
736    /// For direct/indirect calls the parameter encoding is empty. If it is not,
737    /// the abstract call site represents a callback. In that case, the first
738    /// element of the encoding vector represents which argument of the call
739    /// site CS is the callback callee. The remaining elements map parameters
740    /// (identified by their position) to the arguments that will be passed
741    /// through (also identified by position but in the call site instruction).
742    ///
743    /// NOTE that we use LLVM argument numbers (starting at 0) and not
744    /// clang/source argument numbers (starting at 1). The -1 entries represent
745    /// unknown values that are passed to the callee.
746    using ParameterEncodingTy = SmallVector<int, 0>;
747    ParameterEncodingTy ParameterEncoding;
748
749  };
750
751private:
752
753  /// The underlying call site:
754  ///   caller -> callee,             if this is a direct or indirect call site
755  ///   caller -> broker function,    if this is a callback call site
756  CallSite CS;
757
758  /// The encoding of a callback with regards to the underlying instruction.
759  CallbackInfo CI;
760
761public:
762  /// Sole constructor for abstract call sites (ACS).
763  ///
764  /// An abstract call site can only be constructed through a llvm::Use because
765  /// each operand (=use) of an instruction could potentially be a different
766  /// abstract call site. Furthermore, even if the value of the llvm::Use is the
767  /// same, and the user is as well, the abstract call sites might not be.
768  ///
769  /// If a use is not associated with an abstract call site the constructed ACS
770  /// will evaluate to false if converted to a boolean.
771  ///
772  /// If the use is the callee use of a call or invoke instruction, the
773  /// constructed abstract call site will behave as a llvm::CallSite would.
774  ///
775  /// If the use is not a callee use of a call or invoke instruction, the
776  /// callback metadata is used to determine the argument <-> parameter mapping
777  /// as well as the callee of the abstract call site.
778  AbstractCallSite(const Use *U);
779
780  /// Add operand uses of \p ICS that represent callback uses into \p CBUses.
781  ///
782  /// All uses added to \p CBUses can be used to create abstract call sites for
783  /// which AbstractCallSite::isCallbackCall() will return true.
784  static void getCallbackUses(ImmutableCallSite ICS,
785                              SmallVectorImpl<const Use *> &CBUses);
786
787  /// Conversion operator to conveniently check for a valid/initialized ACS.
788  explicit operator bool() const { return (bool)CS; }
789
790  /// Return the underlying instruction.
791  Instruction *getInstruction() const { return CS.getInstruction(); }
792
793  /// Return the call site abstraction for the underlying instruction.
794  CallSite getCallSite() const { return CS; }
795
796  /// Return true if this ACS represents a direct call.
797  bool isDirectCall() const {
798    return !isCallbackCall() && !CS.isIndirectCall();
799  }
800
801  /// Return true if this ACS represents an indirect call.
802  bool isIndirectCall() const {
803    return !isCallbackCall() && CS.isIndirectCall();
804  }
805
806  /// Return true if this ACS represents a callback call.
807  bool isCallbackCall() const {
808    // For a callback call site the callee is ALWAYS stored first in the
809    // transitive values vector. Thus, a non-empty vector indicates a callback.
810    return !CI.ParameterEncoding.empty();
811  }
812
813  /// Return true if @p UI is the use that defines the callee of this ACS.
814  bool isCallee(Value::const_user_iterator UI) const {
815    return isCallee(&UI.getUse());
816  }
817
818  /// Return true if @p U is the use that defines the callee of this ACS.
819  bool isCallee(const Use *U) const {
820    if (isDirectCall())
821      return CS.isCallee(U);
822
823    assert(!CI.ParameterEncoding.empty() &&
824           "Callback without parameter encoding!");
825
826    return (int)CS.getArgumentNo(U) == CI.ParameterEncoding[0];
827  }
828
829  /// Return the number of parameters of the callee.
830  unsigned getNumArgOperands() const {
831    if (isDirectCall())
832      return CS.getNumArgOperands();
833    // Subtract 1 for the callee encoding.
834    return CI.ParameterEncoding.size() - 1;
835  }
836
837  /// Return the operand index of the underlying instruction associated with @p
838  /// Arg.
839  int getCallArgOperandNo(Argument &Arg) const {
840    return getCallArgOperandNo(Arg.getArgNo());
841  }
842
843  /// Return the operand index of the underlying instruction associated with
844  /// the function parameter number @p ArgNo or -1 if there is none.
845  int getCallArgOperandNo(unsigned ArgNo) const {
846    if (isDirectCall())
847      return ArgNo;
848    // Add 1 for the callee encoding.
849    return CI.ParameterEncoding[ArgNo + 1];
850  }
851
852  /// Return the operand of the underlying instruction associated with @p Arg.
853  Value *getCallArgOperand(Argument &Arg) const {
854    return getCallArgOperand(Arg.getArgNo());
855  }
856
857  /// Return the operand of the underlying instruction associated with the
858  /// function parameter number @p ArgNo or nullptr if there is none.
859  Value *getCallArgOperand(unsigned ArgNo) const {
860    if (isDirectCall())
861      return CS.getArgOperand(ArgNo);
862    // Add 1 for the callee encoding.
863    return CI.ParameterEncoding[ArgNo + 1] >= 0
864               ? CS.getArgOperand(CI.ParameterEncoding[ArgNo + 1])
865               : nullptr;
866  }
867
868  /// Return the operand index of the underlying instruction associated with the
869  /// callee of this ACS. Only valid for callback calls!
870  int getCallArgOperandNoForCallee() const {
871    assert(isCallbackCall());
872    assert(CI.ParameterEncoding.size() && CI.ParameterEncoding[0] >= 0);
873    return CI.ParameterEncoding[0];
874  }
875
876  /// Return the use of the callee value in the underlying instruction. Only
877  /// valid for callback calls!
878  const Use &getCalleeUseForCallback() const {
879    int CalleeArgIdx = getCallArgOperandNoForCallee();
880    assert(CalleeArgIdx >= 0 &&
881           unsigned(CalleeArgIdx) < getInstruction()->getNumOperands());
882    return getInstruction()->getOperandUse(CalleeArgIdx);
883  }
884
885  /// Return the pointer to function that is being called.
886  Value *getCalledValue() const {
887    if (isDirectCall())
888      return CS.getCalledValue();
889    return CS.getArgOperand(getCallArgOperandNoForCallee());
890  }
891
892  /// Return the function being called if this is a direct call, otherwise
893  /// return null (if it's an indirect call).
894  Function *getCalledFunction() const {
895    Value *V = getCalledValue();
896    return V ? dyn_cast<Function>(V->stripPointerCasts()) : nullptr;
897  }
898};
899
900template <> struct DenseMapInfo<CallSite> {
901  using BaseInfo = DenseMapInfo<decltype(CallSite::I)>;
902
903  static CallSite getEmptyKey() {
904    CallSite CS;
905    CS.I = BaseInfo::getEmptyKey();
906    return CS;
907  }
908
909  static CallSite getTombstoneKey() {
910    CallSite CS;
911    CS.I = BaseInfo::getTombstoneKey();
912    return CS;
913  }
914
915  static unsigned getHashValue(const CallSite &CS) {
916    return BaseInfo::getHashValue(CS.I);
917  }
918
919  static bool isEqual(const CallSite &LHS, const CallSite &RHS) {
920    return LHS == RHS;
921  }
922};
923
924} // end namespace llvm
925
926#endif // LLVM_IR_CALLSITE_H
927