Don't drop function/call return attributes like 'nounwind'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46645 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp
index 3ac1c7b..4486677 100644
--- a/lib/Transforms/IPO/ArgumentPromotion.cpp
+++ b/lib/Transforms/IPO/ArgumentPromotion.cpp
@@ -404,6 +404,10 @@
   ParamAttrsVector ParamAttrsVec;
   const ParamAttrsList *PAL = F->getParamAttrs();
 
+  // Add any return attributes.
+  if (unsigned attrs = PAL ? PAL->getParamAttrs(0) : 0)
+    ParamAttrsVec.push_back(ParamAttrsWithIndex::get(0, attrs));
+
   unsigned ArgIndex = 1;
   for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end(); I != E;
        ++I, ++ArgIndex) {
@@ -491,6 +495,10 @@
     Instruction *Call = CS.getInstruction();
     PAL = CS.getParamAttrs();
     
+    // Add any return attributes.
+    if (unsigned attrs = PAL ? PAL->getParamAttrs(0) : 0)
+      ParamAttrsVec.push_back(ParamAttrsWithIndex::get(0, attrs));
+
     // Loop over the operands, inserting GEP and loads in the caller as
     // appropriate.
     CallSite::arg_iterator AI = CS.arg_begin();