Index: include/llvm/Function.h
===================================================================
--- include/llvm/Function.h	(revision 3710)
+++ include/llvm/Function.h	(working copy)
@@ -93,6 +93,8 @@
   // The Calling Convention is stored in Value::SubclassData.
   /*CallingConv::ID CallingConvention;*/
 
+  unsigned intrinsicID;                   ///< ID of intrinsic, 0 otherwise
+
   friend class SymbolTableListTraits<Function, Module>;
 
   void setParent(Module *parent);
@@ -109,6 +111,8 @@
       BuildLazyArguments();
   }
   void BuildLazyArguments() const;
+
+  unsigned initIntrinsicID() const;
   
   Function(const Function&); // DO NOT IMPLEMENT
   void operator=(const Function&); // DO NOT IMPLEMENT
@@ -146,8 +150,8 @@
   /// The particular intrinsic functions which correspond to this value are
   /// defined in llvm/Intrinsics.h.
   ///
-  unsigned getIntrinsicID() const LLVM_ATTRIBUTE_READONLY;
-  bool isIntrinsic() const { return getIntrinsicID() != 0; }
+  unsigned getIntrinsicID() const { return intrinsicID; }
+  bool isIntrinsic() const { return intrinsicID != 0; }
 
   /// getCallingConv()/setCallingConv(CC) - These method get and set the
   /// calling convention of this function.  The enum values for the known
Index: lib/VMCore/Function.cpp
===================================================================
--- lib/VMCore/Function.cpp	(revision 3710)
+++ lib/VMCore/Function.cpp	(working copy)
@@ -178,9 +178,9 @@
     ParentModule->getFunctionList().push_back(this);
 
   // Ensure intrinsics have the right parameter attributes.
-  if (unsigned IID = getIntrinsicID())
-    setAttributes(Intrinsic::getAttributes(Intrinsic::ID(IID)));
-
+  intrinsicID = initIntrinsicID();
+  if (intrinsicID)
+    setAttributes(Intrinsic::getAttributes(Intrinsic::ID(intrinsicID)));
 }
 
 Function::~Function() {
@@ -310,14 +310,14 @@
     clearGC();
 }
 
-/// getIntrinsicID - This method returns the ID number of the specified
+/// initIntrinsicID - This method returns the ID number of the specified
 /// function, or Intrinsic::not_intrinsic if the function is not an
 /// intrinsic, or if the pointer is null.  This value is always defined to be
 /// zero to allow easy checking for whether a function is intrinsic or not.  The
 /// particular intrinsic functions which correspond to this value are defined in
 /// llvm/Intrinsics.h.
 ///
-unsigned Function::getIntrinsicID() const {
+unsigned Function::initIntrinsicID() const {
   const ValueName *ValName = this->getValueName();
   if (!ValName)
     return 0;
