diff options
author | Duncan Sands <baldrick@free.fr> | 2007-12-19 21:13:37 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-12-19 21:13:37 +0000 |
commit | f0c3354d998507515ab39e26b5292ea0ceb06aef (patch) | |
tree | d4442f54d211307d792ee586467e8a127c908365 /include/llvm | |
parent | 0a92af487b8ae5d004a3460e3518a3815d9b36a8 (diff) | |
download | external_llvm-f0c3354d998507515ab39e26b5292ea0ceb06aef.zip external_llvm-f0c3354d998507515ab39e26b5292ea0ceb06aef.tar.gz external_llvm-f0c3354d998507515ab39e26b5292ea0ceb06aef.tar.bz2 |
When inlining through an 'nounwind' call, mark inlined
calls 'nounwind'. It is important for correct C++
exception handling that nounwind markings do not get
lost, so this transformation is actually needed for
correctness.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45218 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/Instructions.h | 2 | ||||
-rw-r--r-- | include/llvm/ParameterAttributes.h | 8 | ||||
-rw-r--r-- | include/llvm/Support/CallSite.h | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index cdce9ec..635a8d6 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -948,6 +948,7 @@ public: bool doesNotThrow() const { return paramHasAttr(0, ParamAttr::NoUnwind); } + void setDoesNotThrow(bool doesNotThrow = true); /// @brief Determine if the call returns a structure. bool isStructReturn() const { @@ -1752,6 +1753,7 @@ public: bool doesNotThrow() const { return paramHasAttr(0, ParamAttr::NoUnwind); } + void setDoesNotThrow(bool doesNotThrow = true); /// @brief Determine if the call returns a structure. bool isStructReturn() const { diff --git a/include/llvm/ParameterAttributes.h b/include/llvm/ParameterAttributes.h index 29bbd23..e582f74 100644 --- a/include/llvm/ParameterAttributes.h +++ b/include/llvm/ParameterAttributes.h @@ -149,6 +149,14 @@ class ParamAttrsList : public FoldingSetNode { static const ParamAttrsList *getModified(const ParamAttrsList *PAL, const ParamAttrsVector &modVec); + /// @brief Add the specified attributes to those in PAL at index idx. + static const ParamAttrsList *includeAttrs(const ParamAttrsList *PAL, + uint16_t idx, uint16_t attrs); + + /// @brief Remove the specified attributes from those in PAL at index idx. + static const ParamAttrsList *excludeAttrs(const ParamAttrsList *PAL, + uint16_t idx, uint16_t attrs); + /// Returns whether each of the specified lists of attributes can be safely /// replaced with the other in a function or a function call. /// @brief Whether one attribute list can safely replace the other. diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index ce8e9ff..3c60daf 100644 --- a/include/llvm/Support/CallSite.h +++ b/include/llvm/Support/CallSite.h @@ -75,6 +75,7 @@ public: /// @brief Determine if the call cannot unwind. bool doesNotThrow() const; + void setDoesNotThrow(bool doesNotThrow = true); /// getType - Return the type of the instruction that generated this call site /// |