LLVM  9.0.0svn
Classes | Public Member Functions | List of all members
llvm::AbstractCallSite Class Reference

AbstractCallSite. More...

#include "llvm/IR/CallSite.h"

Classes

struct  CallbackInfo
 The encoding of a callback with regards to the underlying instruction. More...
 

Public Member Functions

 AbstractCallSite (const Use *U)
 Sole constructor for abstract call sites (ACS). More...
 
 operator bool () const
 Conversion operator to conveniently check for a valid/initialized ACS. More...
 
InstructiongetInstruction () const
 Return the underlying instruction. More...
 
CallSite getCallSite () const
 Return the call site abstraction for the underlying instruction. More...
 
bool isDirectCall () const
 Return true if this ACS represents a direct call. More...
 
bool isIndirectCall () const
 Return true if this ACS represents an indirect call. More...
 
bool isCallbackCall () const
 Return true if this ACS represents a callback call. More...
 
bool isCallee (Value::const_user_iterator UI) const
 Return true if UI is the use that defines the callee of this ACS. More...
 
bool isCallee (const Use *U) const
 Return true if U is the use that defines the callee of this ACS. More...
 
unsigned getNumArgOperands () const
 Return the number of parameters of the callee. More...
 
int getCallArgOperandNo (Argument &Arg) const
 Return the operand index of the underlying instruction associated with Arg. More...
 
int getCallArgOperandNo (unsigned ArgNo) const
 Return the operand index of the underlying instruction associated with the function parameter number ArgNo or -1 if there is none. More...
 
ValuegetCallArgOperand (Argument &Arg) const
 Return the operand of the underlying instruction associated with Arg. More...
 
ValuegetCallArgOperand (unsigned ArgNo) const
 Return the operand of the underlying instruction associated with the function parameter number ArgNo or nullptr if there is none. More...
 
int getCallArgOperandNoForCallee () const
 Return the operand index of the underlying instruction associated with the callee of this ACS. More...
 
ValuegetCalledValue () const
 Return the pointer to function that is being called. More...
 
FunctiongetCalledFunction () const
 Return the function being called if this is a direct call, otherwise return null (if it's an indirect call). More...
 

Detailed Description

AbstractCallSite.

An abstract call site is a wrapper that allows to treat direct, indirect, and callback calls the same. If an abstract call site represents a direct or indirect call site it behaves like a stripped down version of a normal call site object. The abstract call site can also represent a callback call, thus the fact that the initially called function (=broker) may invoke a third one (=callback callee). In this case, the abstract call site hides the middle man, hence the broker function. The result is a representation of the callback call, inside the broker, but in the context of the original call to the broker.

There are up to three functions involved when we talk about callback call sites. The caller (1), which invokes the broker function. The broker function (2), that will invoke the callee zero or more times. And finally the callee (3), which is the target of the callback call.

The abstract call site will handle the mapping from parameters to arguments depending on the semantic of the broker function. However, it is important to note that the mapping is often partial. Thus, some arguments of the call/invoke instruction are mapped to parameters of the callee while others are not.

Definition at line 713 of file CallSite.h.

Constructor & Destructor Documentation

◆ AbstractCallSite()

AbstractCallSite::AbstractCallSite ( const Use U)

Sole constructor for abstract call sites (ACS).

Create an abstract call site from a use.

An abstract call site can only be constructed through a llvm::Use because each operand (=use) of an instruction could potentially be a different abstract call site. Furthermore, even if the value of the llvm::Use is the same, and the user is as well, the abstract call sites might not be.

If a use is not associated with an abstract call site the constructed ACS will evaluate to false if converted to a boolean.

If the use is the callee use of a call or invoke instruction, the constructed abstract call site will behave as a llvm::CallSite would.

If the use is not a callee use of a call or invoke instruction, the callback metadata is used to determine the argument <-> parameter mapping as well as the callee of the abstract call site.

Definition at line 37 of file AbstractCallSite.cpp.

References llvm::Function::arg_size(), assert(), Callee, llvm::MDOperand::get(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::getArgumentNo(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::getCalledFunction(), llvm::GlobalObject::getMetadata(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::getNumArgOperands(), llvm::MDNode::getNumOperands(), llvm::MDNode::getOperand(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::isCallee(), llvm::Function::isVarArg(), llvm::LLVMContext::MD_callback, llvm::MDNode::operands(), llvm::AbstractCallSite::CallbackInfo::ParameterEncoding, and llvm::SmallVectorTemplateBase< T, bool >::push_back().

Member Function Documentation

◆ getCallArgOperand() [1/2]

Value* llvm::AbstractCallSite::getCallArgOperand ( Argument Arg) const
inline

Return the operand of the underlying instruction associated with Arg.

Definition at line 829 of file CallSite.h.

References llvm::Argument::getArgNo().

Referenced by PropagateConstantsIntoArguments().

◆ getCallArgOperand() [2/2]

Value* llvm::AbstractCallSite::getCallArgOperand ( unsigned  ArgNo) const
inline

Return the operand of the underlying instruction associated with the function parameter number ArgNo or nullptr if there is none.

Definition at line 835 of file CallSite.h.

References llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::getArgOperand(), isDirectCall(), and llvm::AbstractCallSite::CallbackInfo::ParameterEncoding.

◆ getCallArgOperandNo() [1/2]

int llvm::AbstractCallSite::getCallArgOperandNo ( Argument Arg) const
inline

Return the operand index of the underlying instruction associated with Arg.

Definition at line 815 of file CallSite.h.

References llvm::Argument::getArgNo().

◆ getCallArgOperandNo() [2/2]

int llvm::AbstractCallSite::getCallArgOperandNo ( unsigned  ArgNo) const
inline

Return the operand index of the underlying instruction associated with the function parameter number ArgNo or -1 if there is none.

Definition at line 821 of file CallSite.h.

References isDirectCall(), and llvm::AbstractCallSite::CallbackInfo::ParameterEncoding.

◆ getCallArgOperandNoForCallee()

int llvm::AbstractCallSite::getCallArgOperandNoForCallee ( ) const
inline

Return the operand index of the underlying instruction associated with the callee of this ACS.

Only valid for callback calls!

Definition at line 846 of file CallSite.h.

References assert(), llvm::AbstractCallSite::CallbackInfo::ParameterEncoding, and llvm::SmallVectorBase::size().

◆ getCalledFunction()

Function* llvm::AbstractCallSite::getCalledFunction ( ) const
inline

Return the function being called if this is a direct call, otherwise return null (if it's an indirect call).

Definition at line 861 of file CallSite.h.

References llvm::dyn_cast(), and llvm::Value::stripPointerCasts().

◆ getCalledValue()

Value* llvm::AbstractCallSite::getCalledValue ( ) const
inline

◆ getCallSite()

CallSite llvm::AbstractCallSite::getCallSite ( ) const
inline

Return the call site abstraction for the underlying instruction.

Definition at line 770 of file CallSite.h.

◆ getInstruction()

Instruction* llvm::AbstractCallSite::getInstruction ( ) const
inline

◆ getNumArgOperands()

unsigned llvm::AbstractCallSite::getNumArgOperands ( ) const
inline

◆ isCallbackCall()

bool llvm::AbstractCallSite::isCallbackCall ( ) const
inline

Return true if this ACS represents a callback call.

Definition at line 783 of file CallSite.h.

References llvm::SmallVectorBase::empty(), and llvm::AbstractCallSite::CallbackInfo::ParameterEncoding.

Referenced by PropagateConstantsIntoArguments().

◆ isCallee() [1/2]

bool llvm::AbstractCallSite::isCallee ( Value::const_user_iterator  UI) const
inline

Return true if UI is the use that defines the callee of this ACS.

Definition at line 790 of file CallSite.h.

◆ isCallee() [2/2]

bool llvm::AbstractCallSite::isCallee ( const Use U) const
inline

◆ isDirectCall()

bool llvm::AbstractCallSite::isDirectCall ( ) const
inline

Return true if this ACS represents a direct call.

Definition at line 773 of file CallSite.h.

References llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::isIndirectCall().

◆ isIndirectCall()

bool llvm::AbstractCallSite::isIndirectCall ( ) const
inline

Return true if this ACS represents an indirect call.

Definition at line 778 of file CallSite.h.

References llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, CallBrTy, IterTy >::isIndirectCall().

◆ operator bool()

llvm::AbstractCallSite::operator bool ( ) const
inlineexplicit

Conversion operator to conveniently check for a valid/initialized ACS.

Definition at line 764 of file CallSite.h.


The documentation for this class was generated from the following files: