Added FoldingSet style 'profiling' support for APInt.

llvm-svn: 46188
This commit is contained in:
Ted Kremenek 2008-01-19 04:23:33 +00:00
parent c0259639ad
commit 5c75d54c5b
2 changed files with 18 additions and 1 deletions

View 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;

View 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.