Author: evancheng Date: Sat Jan 12 12:57:32 2008 New Revision: 45913 URL: http://llvm.org/viewvc/llvm-project?rev=45913&view=rev Log: Add hasByValArgument() to test if a call instruction has byval argument(s).
Modified: llvm/trunk/include/llvm/Instructions.h llvm/trunk/lib/VMCore/Instructions.cpp Modified: llvm/trunk/include/llvm/Instructions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Instructions.h?rev=45913&r1=45912&r2=45913&view=diff ============================================================================== --- llvm/trunk/include/llvm/Instructions.h (original) +++ llvm/trunk/include/llvm/Instructions.h Sat Jan 12 12:57:32 2008 @@ -944,6 +944,9 @@ /// @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. Modified: llvm/trunk/lib/VMCore/Instructions.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=45913&r1=45912&r2=45913&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Instructions.cpp (original) +++ llvm/trunk/lib/VMCore/Instructions.cpp Sat Jan 12 12:57:32 2008 @@ -404,6 +404,17 @@ 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) _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits