diff --git a/include/llvm/Function.h b/include/llvm/Function.h index 28c301fe2f6..5dd8502d3ab 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -170,6 +170,9 @@ public: bool paramHasAttr(unsigned i, ParameterAttributes attr) const { return ParamAttrs.paramHasAttr(i, attr); } + + /// addParamAttr - adds the attribute to the list of attributes. + void addParamAttr(unsigned i, ParameterAttributes attr); /// @brief Extract the alignment for a call or parameter (0=unknown). unsigned getParamAlignment(unsigned i) const { diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index ba46b2031e0..1bd2cba2195 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -1109,6 +1109,9 @@ public: /// setParamAttrs - Sets the parameter attributes for this call. void setParamAttrs(const PAListPtr &Attrs) { ParamAttrs = Attrs; } + + /// addParamAttr - adds the attribute to the list of attributes. + void addParamAttr(unsigned i, ParameterAttributes attr); /// @brief Determine whether the call or the callee has the given attribute. bool paramHasAttr(unsigned i, unsigned attr) const; @@ -2428,6 +2431,9 @@ public: /// @brief Determine whether the call or the callee has the given attribute. bool paramHasAttr(unsigned i, ParameterAttributes attr) const; + + /// addParamAttr - adds the attribute to the list of attributes. + void addParamAttr(unsigned i, ParameterAttributes attr); /// @brief Extract the alignment for a call or parameter (0=unknown). unsigned getParamAlignment(unsigned i) const { diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 9f7eefe1a6b..49e69e1b2c1 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -240,6 +240,12 @@ void Function::setDoesNotThrow(bool doesNotThrow) { setParamAttrs(PAL); } +void Function::addParamAttr(unsigned i, ParameterAttributes attr) { + PAListPtr PAL = getParamAttrs(); + PAL = PAL.addAttr(i, attr); + setParamAttrs(PAL); +} + // Maintain the collector name for each function in an on-the-side table. This // saves allocating an additional word in Function for programs which do not use // GC (i.e., most programs) at the cost of increased overhead for clients which diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index ff3b8b546f0..40eea138350 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -373,6 +373,12 @@ CallInst::CallInst(const CallInst &CI) OL[i].init(InOL[i], this); } +void CallInst::addParamAttr(unsigned i, ParameterAttributes attr) { + PAListPtr PAL = getParamAttrs(); + PAL = PAL.addAttr(i, attr); + setParamAttrs(PAL); +} + bool CallInst::paramHasAttr(unsigned i, ParameterAttributes attr) const { if (ParamAttrs.paramHasAttr(i, attr)) return true; @@ -449,6 +455,12 @@ bool InvokeInst::paramHasAttr(unsigned i, ParameterAttributes attr) const { return false; } +void InvokeInst::addParamAttr(unsigned i, ParameterAttributes attr) { + PAListPtr PAL = getParamAttrs(); + PAL = PAL.addAttr(i, attr); + setParamAttrs(PAL); +} + void InvokeInst::setDoesNotThrow(bool doesNotThrow) { PAListPtr PAL = getParamAttrs(); if (doesNotThrow)