Make sure that intrinsics automagically get the
right parameter attributes no matter how they
are obtained.
llvm-svn: 49335
diff --git a/llvm/lib/VMCore/Function.cpp b/llvm/lib/VMCore/Function.cpp
index 302eff3..6571f10 100644
--- a/llvm/lib/VMCore/Function.cpp
+++ b/llvm/lib/VMCore/Function.cpp
@@ -160,6 +160,10 @@
if (ParentModule)
ParentModule->getFunctionList().push_back(this);
+
+ // Ensure intrinsics have the right parameter attributes.
+ if (unsigned IID = getIntrinsicID(true))
+ setParamAttrs(Intrinsic::getParamAttrs(Intrinsic::ID(IID)));
}
Function::~Function() {
@@ -328,11 +332,9 @@
unsigned numTys) {
// There can never be multiple globals with the same name of different types,
// because intrinsics must be a specific type.
- Function *F =
+ return
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
getType(id, Tys, numTys)));
- F->setParamAttrs(getParamAttrs(id));
- return F;
}
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {