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
//===----------------------------------------------------------------------===//