blob: 79716256bbb434ecbc50f8b1bfaf7ddf93660295 [file] [log] [blame]
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;