From 901b1a75c93ca8b92977c246d3c9db567e83147f Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 16 May 2008 20:39:43 +0000 Subject: [PATCH] Add functions to enable adding a single attribute to a function and its associated call site. llvm-svn: 51204 --- llvm/include/llvm/Function.h | 3 +++ llvm/include/llvm/Instructions.h | 6 ++++++ llvm/lib/VMCore/Function.cpp | 6 ++++++ llvm/lib/VMCore/Instructions.cpp | 12 ++++++++++++ 4 files changed, 27 insertions(+) diff --git a/llvm/include/llvm/Function.h b/llvm/include/llvm/Function.h index 28c301fe2f6f..5dd8502d3ab3 100644 --- a/llvm/include/llvm/Function.h +++ b/llvm/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/llvm/include/llvm/Instructions.h b/llvm/include/llvm/Instructions.h index ba46b2031e0a..1bd2cba21955 100644 --- a/llvm/include/llvm/Instructions.h +++ b/llvm/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/llvm/lib/VMCore/Function.cpp b/llvm/lib/VMCore/Function.cpp index 9f7eefe1a6bf..49e69e1b2c1f 100644 --- a/llvm/lib/VMCore/Function.cpp +++ b/llvm/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/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp index ff3b8b546f0c..40eea1383506 100644 --- a/llvm/lib/VMCore/Instructions.cpp +++ b/llvm/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)