Added FoldingSet style 'profiling' support for APInt.
authorTed Kremenek <kremenek@apple.com>
Sat, 19 Jan 2008 04:23:33 +0000 (04:23 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 19 Jan 2008 04:23:33 +0000 (04:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46188 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/APInt.h
lib/Support/APInt.cpp

index 3a98ae42349d7cdb0e378892b01d537dfc283dab..e97d5e75a86654c441b9c37dc84fd34d681f2b08 100644 (file)
@@ -24,6 +24,7 @@
 namespace llvm {
   class Serializer;
   class Deserializer;
+  class FoldingSetNodeID;
   
   /* An unsigned host type used as a single part of a multi-part
      bignum.  */
@@ -210,6 +211,10 @@ public:
   ///  for object deserialization (pair this with the static method Read).
   explicit APInt() : BitWidth(1) {}
   
+  /// Profile - Used to insert APInt objects, or objects that contain APInt 
+  ///  objects, into FoldingSets.
+  void Profile(FoldingSetNodeID& ID) const;
+  
   /// @brief Used by the Bitcode serializer to emit APInts to Bitcode.
   void Emit(Serializer& S) const;
   
index 671fc4e7c3b2ec7851195b9d522634f7489532eb..88f32810d6751a5061a1dd3b5f1925ddc892e148 100644 (file)
@@ -14,6 +14,7 @@
 
 #define DEBUG_TYPE "apint"
 #include "llvm/ADT/APInt.h"
+#include "llvm/ADT/FoldingSet.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include <math.h>
@@ -24,7 +25,6 @@
 
 using namespace llvm;
 
-
 /// This enumeration just provides for internal constants used in this
 /// translation unit. 
 enum {
@@ -165,6 +165,18 @@ APInt& APInt::operator=(uint64_t RHS) {
   return clearUnusedBits();
 }
 
+/// Profile - This method 'profiles' an APInt for use with FoldingSet.
+void APInt::Profile(FoldingSetNodeID& ID) const {
+  if (isSingleWord()) {
+    ID.AddInteger(VAL);
+    return;
+  }
+
+  uint32_t NumWords = getNumWords();
+  for (unsigned i = 0; i < NumWords; ++i)
+    ID.AddInteger(pVal[i]);
+}
+
 /// add_1 - This function adds a single "digit" integer, y, to the multiple 
 /// "digit" integer array,  x[]. x[] is modified to reflect the addition and
 /// 1 is returned if there is a carry out, otherwise 0 is returned.