Add some convenience methods for querying attributes, and
use them.

llvm-svn: 44403
diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp
index 7226f66..8e48491 100644
--- a/llvm/lib/VMCore/Instructions.cpp
+++ b/llvm/lib/VMCore/Instructions.cpp
@@ -47,6 +47,12 @@
   else
     cast<InvokeInst>(I)->setParamAttrs(PAL);
 }
+bool CallSite::paramHasAttr(uint16_t i, ParameterAttributes attr) const {
+  if (CallInst *CI = dyn_cast<CallInst>(I))
+    return CI->paramHasAttr(i, attr);
+  else
+    return cast<InvokeInst>(I)->paramHasAttr(i, attr);
+}
 
 
 
@@ -376,12 +382,14 @@
   ParamAttrs = newAttrs; 
 }
 
-bool CallInst::isStructReturn() const {
-  if (ParamAttrs)
-    return ParamAttrs->paramHasAttr(1, ParamAttr::StructRet);
-  return false;
+bool CallInst::paramHasAttr(uint16_t i, ParameterAttributes attr) const {
+  if (ParamAttrs && ParamAttrs->paramHasAttr(i, attr))
+    return true;
+  const Function *F = getCalledFunction();
+  return F && F->getParamAttrs() && F->getParamAttrs()->paramHasAttr(i, attr);
 }
 
+
 //===----------------------------------------------------------------------===//
 //                        InvokeInst Implementation
 //===----------------------------------------------------------------------===//
@@ -451,12 +459,14 @@
   ParamAttrs = newAttrs; 
 }
 
-bool InvokeInst::isStructReturn() const {
-  if (ParamAttrs)
-    return ParamAttrs->paramHasAttr(1, ParamAttr::StructRet);
-  return false;
+bool InvokeInst::paramHasAttr(uint16_t i, ParameterAttributes attr) const {
+  if (ParamAttrs && ParamAttrs->paramHasAttr(i, attr))
+    return true;
+  const Function *F = getCalledFunction();
+  return F && F->getParamAttrs() && F->getParamAttrs()->paramHasAttr(i, attr);
 }
 
+
 //===----------------------------------------------------------------------===//
 //                        ReturnInst Implementation
 //===----------------------------------------------------------------------===//