15 #ifndef LLVM_CLANG_LIB_CODEGEN_CGCALL_H
16 #define LLVM_CLANG_LIB_CODEGEN_CGCALL_H
22 #include "llvm/ADT/FoldingSet.h"
23 #include "llvm/IR/Value.h"
82 push_back(
CallArg(rvalue, type, needscopy));
86 insert(end(), other.begin(), other.end());
87 Writebacks.insert(Writebacks.end(),
88 other.Writebacks.begin(), other.Writebacks.end());
96 writeback.
ToUse = toUse;
97 Writebacks.push_back(writeback);
102 typedef llvm::iterator_range<SmallVectorImpl<Writeback>::const_iterator>
110 llvm::Instruction *IsActiveIP) {
114 CleanupsToDeactivate.push_back(ArgCleanup);
118 return CleanupsToDeactivate;
138 llvm::CallInst *StackBase;
141 llvm::AllocaInst *StackBaseMem;
158 llvm::PointerIntPair<llvm::Value *, 2, unsigned int>
Value;
170 (IsVolatile ? IS_VOLATILE : 0) | (IsUnused ? IS_UNUSED : 0)) {}
void freeArgumentMemory(CodeGenFunction &CGF) const
llvm::Value * getValue() const
SmallVector< llvm::AttributeSet, 8 > AttributeListType
EHScopeStack::stable_iterator Cleanup
void addWriteback(LValue srcLV, llvm::Value *temporary, llvm::Value *toUse)
void addArgCleanupDeactivation(EHScopeStack::stable_iterator Cleanup, llvm::Instruction *IsActiveIP)
CallArg(RValue rv, QualType ty, bool needscopy)
llvm::iterator_range< SmallVectorImpl< Writeback >::const_iterator > writeback_const_range
void addFrom(const CallArgList &other)
writeback_const_range writebacks() const
ArrayRef< CallArgCleanup > getCleanupsToDeactivate() const
llvm::Value * ToUse
A value to "use" after the writeback, or null.
void add(RValue rvalue, QualType type, bool needscopy=false)
bool hasWritebacks() const
llvm::Value * Temporary
The temporary alloca.
void allocateArgumentMemory(CodeGenFunction &CGF)
llvm::Instruction * IsActiveIP
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
bool isUsingInAlloca() const
Returns if we're using an inalloca struct to pass arguments in memory.
llvm::Instruction * getStackBase() const
ReturnValueSlot(llvm::Value *Value, bool IsVolatile, bool IsUnused=false)