aboutsummaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/APInt.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp
index 671fc4e7c3..88f32810d6 100644
--- a/lib/Support/APInt.cpp
+++ b/lib/Support/APInt.cpp
@@ -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.