diff options
author | Duncan Sands <baldrick@free.fr> | 2008-07-08 09:41:30 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-07-08 09:41:30 +0000 |
commit | cfa3c236b23aff80e48df11ef5833b7e63fab802 (patch) | |
tree | 03cdb8f7dccdacfcbeb56c4b9bbd3ce1163f0cd6 /include/llvm/Function.h | |
parent | 1512642973f8b86e8375d93f6b30a2930e68d224 (diff) |
Add some helpers for manipulating function
parameter attributes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53228 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Function.h')
-rw-r--r-- | include/llvm/Function.h | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/include/llvm/Function.h b/include/llvm/Function.h index ef82457926..f48eb38d1d 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -174,29 +174,49 @@ public: /// addParamAttr - adds the attribute to the list of attributes. void addParamAttr(unsigned i, ParameterAttributes attr); + /// removeParamAttr - removes the attribute from the list of attributes. + void removeParamAttr(unsigned i, ParameterAttributes attr); + /// @brief Extract the alignment for a call or parameter (0=unknown). unsigned getParamAlignment(unsigned i) const { return ParamAttrs.getParamAlignment(i); } - /// @brief Determine if the function cannot return. - bool doesNotReturn() const { return paramHasAttr(0, ParamAttr::NoReturn); } - void setDoesNotThrow(bool doesNotThrow = true); - - /// @brief Determine if the function cannot unwind. - bool doesNotThrow() const { - return paramHasAttr(0, ParamAttr::NoUnwind); - } - /// @brief Determine if the function does not access memory. bool doesNotAccessMemory() const { return paramHasAttr(0, ParamAttr::ReadNone); } + void setDoesNotAccessMemory(bool doesNotAccessMemory = true) { + if (doesNotAccessMemory) addParamAttr(0, ParamAttr::ReadNone); + else removeParamAttr(0, ParamAttr::ReadNone); + } /// @brief Determine if the function does not access or only reads memory. bool onlyReadsMemory() const { return doesNotAccessMemory() || paramHasAttr(0, ParamAttr::ReadOnly); } + void setOnlyReadsMemory(bool onlyReadsMemory = true) { + if (onlyReadsMemory) addParamAttr(0, ParamAttr::ReadOnly); + else removeParamAttr(0, ParamAttr::ReadOnly | ParamAttr::ReadNone); + } + + /// @brief Determine if the function cannot return. + bool doesNotReturn() const { + return paramHasAttr(0, ParamAttr::NoReturn); + } + void setDoesNotReturn(bool doesNotReturn = true) { + if (doesNotReturn) addParamAttr(0, ParamAttr::NoReturn); + else removeParamAttr(0, ParamAttr::NoReturn); + } + + /// @brief Determine if the function cannot unwind. + bool doesNotThrow() const { + return paramHasAttr(0, ParamAttr::NoUnwind); + } + void setDoesNotThrow(bool doesNotThrow = true) { + if (doesNotThrow) addParamAttr(0, ParamAttr::NoUnwind); + else removeParamAttr(0, ParamAttr::NoUnwind); + } /// @brief Determine if the function returns a structure through first /// pointer argument. |