aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2007-12-19 21:13:37 +0000
committerDuncan Sands <baldrick@free.fr>2007-12-19 21:13:37 +0000
commitf0c3354d998507515ab39e26b5292ea0ceb06aef (patch)
treed4442f54d211307d792ee586467e8a127c908365 /include/llvm
parent0a92af487b8ae5d004a3460e3518a3815d9b36a8 (diff)
downloadexternal_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.h2
-rw-r--r--include/llvm/ParameterAttributes.h8
-rw-r--r--include/llvm/Support/CallSite.h1
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
///