summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Pilipenko <apilipenko@azulsystems.com>2015-12-11 16:30:26 +0000
committerArtur Pilipenko <apilipenko@azulsystems.com>2015-12-11 16:30:26 +0000
commit7ae49ac619ab34710eacd3ee01cec11eb008c0f1 (patch)
tree834eed8a4f2758184d74e008bee8f54cfbd6fd3c
parente43482b626b5f8e8fe85aad0c91fd8e637f67cd4 (diff)
downloadbcm5719-llvm-7ae49ac619ab34710eacd3ee01cec11eb008c0f1.tar.gz
bcm5719-llvm-7ae49ac619ab34710eacd3ee01cec11eb008c0f1.zip
PruneEH pass incorrectly reports that a change was made
Reviewed By: reames Differential Revision: http://reviews.llvm.org/D14097 llvm-svn: 255343
-rw-r--r--llvm/lib/Transforms/IPO/PruneEH.cpp19
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/IPO/PruneEH.cpp b/llvm/lib/Transforms/IPO/PruneEH.cpp
index cd2411ba554..3af4afb903f 100644
--- a/llvm/lib/Transforms/IPO/PruneEH.cpp
+++ b/llvm/lib/Transforms/IPO/PruneEH.cpp
@@ -153,21 +153,16 @@ bool PruneEH::runOnSCC(CallGraphSCC &SCC) {
// If the SCC doesn't unwind or doesn't throw, note this fact.
if (!SCCMightUnwind || !SCCMightReturn)
for (CallGraphSCC::iterator I = SCC.begin(), E = SCC.end(); I != E; ++I) {
- AttrBuilder NewAttributes;
-
- if (!SCCMightUnwind)
- NewAttributes.addAttribute(Attribute::NoUnwind);
- if (!SCCMightReturn)
- NewAttributes.addAttribute(Attribute::NoReturn);
-
Function *F = (*I)->getFunction();
- const AttributeSet &PAL = F->getAttributes().getFnAttributes();
- const AttributeSet &NPAL = AttributeSet::get(
- F->getContext(), AttributeSet::FunctionIndex, NewAttributes);
- if (PAL != NPAL) {
+ if (!SCCMightUnwind && !F->hasFnAttribute(Attribute::NoUnwind)) {
+ F->addFnAttr(Attribute::NoUnwind);
+ MadeChange = true;
+ }
+
+ if (!SCCMightReturn && !F->hasFnAttribute(Attribute::NoReturn)) {
+ F->addFnAttr(Attribute::NoReturn);
MadeChange = true;
- F->addAttributes(AttributeSet::FunctionIndex, NPAL);
}
}
OpenPOWER on IntegriCloud