Add hasByValArgument() to test if a call instruction has byval argument(s).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45913 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2008-01-12 18:57:32 +00:00
parent 92938b7145
commit f4a5498ab4
2 changed files with 14 additions and 0 deletions

View File

@ -944,6 +944,9 @@ public:
/// @brief Determine if the call returns a structure.
bool isStructReturn() const;
/// @brief Determine if any call argument is an aggregate passed by value.
bool hasByValArgument() const;
/// getCalledFunction - Return the function being called by this instruction
/// if it is a direct call. If it is a call through a function pointer,
/// return null.

View File

@ -404,6 +404,17 @@ bool CallInst::isStructReturn() const {
return paramHasAttr(1, ParamAttr::StructRet);
}
/// @brief Determine if any call argument is an aggregate passed by value.
bool CallInst::hasByValArgument() const {
const Value *Callee = getCalledValue();
const PointerType *CalleeTy = cast<PointerType>(Callee->getType());
const FunctionType *FTy = cast<FunctionType>(CalleeTy->getElementType());
for (unsigned i = 1, e = FTy->getNumParams()+1; i != e; ++i)
if (paramHasAttr(i, ParamAttr::ByVal))
return true;
return false;
}
void CallInst::setDoesNotThrow(bool doesNotThrow) {
const ParamAttrsList *PAL = getParamAttrs();
if (doesNotThrow)