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) {