1 //===-- APInt.cpp - Implement APInt class ---------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a class to represent arbitrary precision integer
11 // constant values and provide a variety of arithmetic operations on them.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/ADT/APInt.h"
16 #include "llvm/ADT/ArrayRef.h"
17 #include "llvm/ADT/FoldingSet.h"
18 #include "llvm/ADT/Hashing.h"
19 #include "llvm/ADT/SmallString.h"
20 #include "llvm/ADT/StringRef.h"
21 #include "llvm/Support/Debug.h"
22 #include "llvm/Support/ErrorHandling.h"
23 #include "llvm/Support/MathExtras.h"
24 #include "llvm/Support/raw_ostream.h"
25 #include <climits>
26 #include <cmath>
27 #include <cstdlib>
28 #include <cstring>
29 using namespace llvm;
30 
31 #define DEBUG_TYPE "apint"
32 
33 /// A utility function for allocating memory, checking for allocation failures,
34 /// and ensuring the contents are zeroed.
35 inline static uint64_t* getClearedMemory(unsigned numWords) {
36   uint64_t * result = new uint64_t[numWords];
37   assert(result && "APInt memory allocation fails!");
38   memset(result, 0, numWords * sizeof(uint64_t));
39   return result;
40 }
41 
42 /// A utility function for allocating memory and checking for allocation
43 /// failure.  The content is not zeroed.
44 inline static uint64_t* getMemory(unsigned numWords) {
45   uint64_t * result = new uint64_t[numWords];
46   assert(result && "APInt memory allocation fails!");
47   return result;
48 }
49 
50 /// A utility function that converts a character to a digit.
51 inline static unsigned getDigit(char cdigit, uint8_t radix) {
52   unsigned r;
53 
54   if (radix == 16 || radix == 36) {
55     r = cdigit - '0';
56     if (r <= 9)
57       return r;
58 
59     r = cdigit - 'A';
60     if (r <= radix - 11U)
61       return r + 10;
62 
63     r = cdigit - 'a';
64     if (r <= radix - 11U)
65       return r + 10;
66 
67     radix = 10;
68   }
69 
70   r = cdigit - '0';
71   if (r < radix)
72     return r;
73 
74   return -1U;
75 }
76 
77 
78 void APInt::initSlowCase(uint64_t val, bool isSigned) {
79   VAL = 0;
80   pVal = getClearedMemory(getNumWords());
81   pVal[0] = val;
82   if (isSigned && int64_t(val) < 0)
83     for (unsigned i = 1; i < getNumWords(); ++i)
84       pVal[i] = -1ULL;
85   clearUnusedBits();
86 }
87 
88 void APInt::initSlowCase(const APInt& that) {
89   VAL = 0;
90   pVal = getMemory(getNumWords());
91   memcpy(pVal, that.pVal, getNumWords() * APINT_WORD_SIZE);
92 }
93 
94 void APInt::initFromArray(ArrayRef<uint64_t> bigVal) {
95   assert(BitWidth && "Bitwidth too small");
96   assert(bigVal.data() && "Null pointer detected!");
97   if (isSingleWord())
98     VAL = bigVal[0];
99   else {
100     // Get memory, cleared to 0
101     VAL = 0;
102     pVal = getClearedMemory(getNumWords());
103     // Calculate the number of words to copy
104     unsigned words = std::min<unsigned>(bigVal.size(), getNumWords());
105     // Copy the words from bigVal to pVal
106     memcpy(pVal, bigVal.data(), words * APINT_WORD_SIZE);
107   }
108   // Make sure unused high bits are cleared
109   clearUnusedBits();
110 }
111 
112 APInt::APInt(unsigned numBits, ArrayRef<uint64_t> bigVal)
113   : BitWidth(numBits) {
114   initFromArray(bigVal);
115 }
116 
117 APInt::APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[])
118   : BitWidth(numBits) {
119   initFromArray(makeArrayRef(bigVal, numWords));
120 }
121 
122 APInt::APInt(unsigned numbits, StringRef Str, uint8_t radix)
123   : BitWidth(numbits), VAL(0) {
124   assert(BitWidth && "Bitwidth too small");
125   fromString(numbits, Str, radix);
126 }
127 
128 APInt& APInt::AssignSlowCase(const APInt& RHS) {
129   // Don't do anything for X = X
130   if (this == &RHS)
131     return *this;
132 
133   if (BitWidth == RHS.getBitWidth()) {
134     // assume same bit-width single-word case is already handled
135     assert(!isSingleWord());
136     memcpy(pVal, RHS.pVal, getNumWords() * APINT_WORD_SIZE);
137     return *this;
138   }
139 
140   if (isSingleWord()) {
141     // assume case where both are single words is already handled
142     assert(!RHS.isSingleWord());
143     VAL = 0;
144     pVal = getMemory(RHS.getNumWords());
145     memcpy(pVal, RHS.pVal, RHS.getNumWords() * APINT_WORD_SIZE);
146   } else if (getNumWords() == RHS.getNumWords())
147     memcpy(pVal, RHS.pVal, RHS.getNumWords() * APINT_WORD_SIZE);
148   else if (RHS.isSingleWord()) {
149     delete [] pVal;
150     VAL = RHS.VAL;
151   } else {
152     delete [] pVal;
153     pVal = getMemory(RHS.getNumWords());
154     memcpy(pVal, RHS.pVal, RHS.getNumWords() * APINT_WORD_SIZE);
155   }
156   BitWidth = RHS.BitWidth;
157   return clearUnusedBits();
158 }
159 
160 APInt& APInt::operator=(uint64_t RHS) {
161   if (isSingleWord())
162     VAL = RHS;
163   else {
164     pVal[0] = RHS;
165     memset(pVal+1, 0, (getNumWords() - 1) * APINT_WORD_SIZE);
166   }
167   return clearUnusedBits();
168 }
169 
170 /// This method 'profiles' an APInt for use with FoldingSet.
171 void APInt::Profile(FoldingSetNodeID& ID) const {
172   ID.AddInteger(BitWidth);
173 
174   if (isSingleWord()) {
175     ID.AddInteger(VAL);
176     return;
177   }
178 
179   unsigned NumWords = getNumWords();
180   for (unsigned i = 0; i < NumWords; ++i)
181     ID.AddInteger(pVal[i]);
182 }
183 
184 /// This function adds a single "digit" integer, y, to the multiple
185 /// "digit" integer array,  x[]. x[] is modified to reflect the addition and
186 /// 1 is returned if there is a carry out, otherwise 0 is returned.
187 /// @returns the carry of the addition.
188 static bool add_1(uint64_t dest[], uint64_t x[], unsigned len, uint64_t y) {
189   for (unsigned i = 0; i < len; ++i) {
190     dest[i] = y + x[i];
191     if (dest[i] < y)
192       y = 1; // Carry one to next digit.
193     else {
194       y = 0; // No need to carry so exit early
195       break;
196     }
197   }
198   return y;
199 }
200 
201 /// @brief Prefix increment operator. Increments the APInt by one.
202 APInt& APInt::operator++() {
203   if (isSingleWord())
204     ++VAL;
205   else
206     add_1(pVal, pVal, getNumWords(), 1);
207   return clearUnusedBits();
208 }
209 
210 /// This function subtracts a single "digit" (64-bit word), y, from
211 /// the multi-digit integer array, x[], propagating the borrowed 1 value until
212 /// no further borrowing is needed or it runs out of "digits" in x.  The result
213 /// is 1 if "borrowing" exhausted the digits in x, or 0 if x was not exhausted.
214 /// In other words, if y > x then this function returns 1, otherwise 0.
215 /// @returns the borrow out of the subtraction
216 static bool sub_1(uint64_t x[], unsigned len, uint64_t y) {
217   for (unsigned i = 0; i < len; ++i) {
218     uint64_t X = x[i];
219     x[i] -= y;
220     if (y > X)
221       y = 1;  // We have to "borrow 1" from next "digit"
222     else {
223       y = 0;  // No need to borrow
224       break;  // Remaining digits are unchanged so exit early
225     }
226   }
227   return bool(y);
228 }
229 
230 /// @brief Prefix decrement operator. Decrements the APInt by one.
231 APInt& APInt::operator--() {
232   if (isSingleWord())
233     --VAL;
234   else
235     sub_1(pVal, getNumWords(), 1);
236   return clearUnusedBits();
237 }
238 
239 /// This function adds the integer array x to the integer array Y and
240 /// places the result in dest.
241 /// @returns the carry out from the addition
242 /// @brief General addition of 64-bit integer arrays
243 static bool add(uint64_t *dest, const uint64_t *x, const uint64_t *y,
244                 unsigned len) {
245   bool carry = false;
246   for (unsigned i = 0; i< len; ++i) {
247     uint64_t limit = std::min(x[i],y[i]); // must come first in case dest == x
248     dest[i] = x[i] + y[i] + carry;
249     carry = dest[i] < limit || (carry && dest[i] == limit);
250   }
251   return carry;
252 }
253 
254 /// Adds the RHS APint to this APInt.
255 /// @returns this, after addition of RHS.
256 /// @brief Addition assignment operator.
257 APInt& APInt::operator+=(const APInt& RHS) {
258   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
259   if (isSingleWord())
260     VAL += RHS.VAL;
261   else {
262     add(pVal, pVal, RHS.pVal, getNumWords());
263   }
264   return clearUnusedBits();
265 }
266 
267 APInt& APInt::operator+=(uint64_t RHS) {
268   if (isSingleWord())
269     VAL += RHS;
270   else
271     add_1(pVal, pVal, getNumWords(), RHS);
272   return clearUnusedBits();
273 }
274 
275 /// Subtracts the integer array y from the integer array x
276 /// @returns returns the borrow out.
277 /// @brief Generalized subtraction of 64-bit integer arrays.
278 static bool sub(uint64_t *dest, const uint64_t *x, const uint64_t *y,
279                 unsigned len) {
280   bool borrow = false;
281   for (unsigned i = 0; i < len; ++i) {
282     uint64_t x_tmp = borrow ? x[i] - 1 : x[i];
283     borrow = y[i] > x_tmp || (borrow && x[i] == 0);
284     dest[i] = x_tmp - y[i];
285   }
286   return borrow;
287 }
288 
289 /// Subtracts the RHS APInt from this APInt
290 /// @returns this, after subtraction
291 /// @brief Subtraction assignment operator.
292 APInt& APInt::operator-=(const APInt& RHS) {
293   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
294   if (isSingleWord())
295     VAL -= RHS.VAL;
296   else
297     sub(pVal, pVal, RHS.pVal, getNumWords());
298   return clearUnusedBits();
299 }
300 
301 APInt& APInt::operator-=(uint64_t RHS) {
302   if (isSingleWord())
303     VAL -= RHS;
304   else
305     sub_1(pVal, getNumWords(), RHS);
306   return clearUnusedBits();
307 }
308 
309 /// Multiplies an integer array, x, by a uint64_t integer and places the result
310 /// into dest.
311 /// @returns the carry out of the multiplication.
312 /// @brief Multiply a multi-digit APInt by a single digit (64-bit) integer.
313 static uint64_t mul_1(uint64_t dest[], uint64_t x[], unsigned len, uint64_t y) {
314   // Split y into high 32-bit part (hy)  and low 32-bit part (ly)
315   uint64_t ly = y & 0xffffffffULL, hy = y >> 32;
316   uint64_t carry = 0;
317 
318   // For each digit of x.
319   for (unsigned i = 0; i < len; ++i) {
320     // Split x into high and low words
321     uint64_t lx = x[i] & 0xffffffffULL;
322     uint64_t hx = x[i] >> 32;
323     // hasCarry - A flag to indicate if there is a carry to the next digit.
324     // hasCarry == 0, no carry
325     // hasCarry == 1, has carry
326     // hasCarry == 2, no carry and the calculation result == 0.
327     uint8_t hasCarry = 0;
328     dest[i] = carry + lx * ly;
329     // Determine if the add above introduces carry.
330     hasCarry = (dest[i] < carry) ? 1 : 0;
331     carry = hx * ly + (dest[i] >> 32) + (hasCarry ? (1ULL << 32) : 0);
332     // The upper limit of carry can be (2^32 - 1)(2^32 - 1) +
333     // (2^32 - 1) + 2^32 = 2^64.
334     hasCarry = (!carry && hasCarry) ? 1 : (!carry ? 2 : 0);
335 
336     carry += (lx * hy) & 0xffffffffULL;
337     dest[i] = (carry << 32) | (dest[i] & 0xffffffffULL);
338     carry = (((!carry && hasCarry != 2) || hasCarry == 1) ? (1ULL << 32) : 0) +
339             (carry >> 32) + ((lx * hy) >> 32) + hx * hy;
340   }
341   return carry;
342 }
343 
344 /// Multiplies integer array x by integer array y and stores the result into
345 /// the integer array dest. Note that dest's size must be >= xlen + ylen.
346 /// @brief Generalized multiplication of integer arrays.
347 static void mul(uint64_t dest[], uint64_t x[], unsigned xlen, uint64_t y[],
348                 unsigned ylen) {
349   dest[xlen] = mul_1(dest, x, xlen, y[0]);
350   for (unsigned i = 1; i < ylen; ++i) {
351     uint64_t ly = y[i] & 0xffffffffULL, hy = y[i] >> 32;
352     uint64_t carry = 0, lx = 0, hx = 0;
353     for (unsigned j = 0; j < xlen; ++j) {
354       lx = x[j] & 0xffffffffULL;
355       hx = x[j] >> 32;
356       // hasCarry - A flag to indicate if has carry.
357       // hasCarry == 0, no carry
358       // hasCarry == 1, has carry
359       // hasCarry == 2, no carry and the calculation result == 0.
360       uint8_t hasCarry = 0;
361       uint64_t resul = carry + lx * ly;
362       hasCarry = (resul < carry) ? 1 : 0;
363       carry = (hasCarry ? (1ULL << 32) : 0) + hx * ly + (resul >> 32);
364       hasCarry = (!carry && hasCarry) ? 1 : (!carry ? 2 : 0);
365 
366       carry += (lx * hy) & 0xffffffffULL;
367       resul = (carry << 32) | (resul & 0xffffffffULL);
368       dest[i+j] += resul;
369       carry = (((!carry && hasCarry != 2) || hasCarry == 1) ? (1ULL << 32) : 0)+
370               (carry >> 32) + (dest[i+j] < resul ? 1 : 0) +
371               ((lx * hy) >> 32) + hx * hy;
372     }
373     dest[i+xlen] = carry;
374   }
375 }
376 
377 APInt& APInt::operator*=(const APInt& RHS) {
378   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
379   if (isSingleWord()) {
380     VAL *= RHS.VAL;
381     clearUnusedBits();
382     return *this;
383   }
384 
385   // Get some bit facts about LHS and check for zero
386   unsigned lhsBits = getActiveBits();
387   unsigned lhsWords = !lhsBits ? 0 : whichWord(lhsBits - 1) + 1;
388   if (!lhsWords)
389     // 0 * X ===> 0
390     return *this;
391 
392   // Get some bit facts about RHS and check for zero
393   unsigned rhsBits = RHS.getActiveBits();
394   unsigned rhsWords = !rhsBits ? 0 : whichWord(rhsBits - 1) + 1;
395   if (!rhsWords) {
396     // X * 0 ===> 0
397     clearAllBits();
398     return *this;
399   }
400 
401   // Allocate space for the result
402   unsigned destWords = rhsWords + lhsWords;
403   uint64_t *dest = getMemory(destWords);
404 
405   // Perform the long multiply
406   mul(dest, pVal, lhsWords, RHS.pVal, rhsWords);
407 
408   // Copy result back into *this
409   clearAllBits();
410   unsigned wordsToCopy = destWords >= getNumWords() ? getNumWords() : destWords;
411   memcpy(pVal, dest, wordsToCopy * APINT_WORD_SIZE);
412   clearUnusedBits();
413 
414   // delete dest array and return
415   delete[] dest;
416   return *this;
417 }
418 
419 APInt& APInt::operator&=(const APInt& RHS) {
420   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
421   if (isSingleWord()) {
422     VAL &= RHS.VAL;
423     return *this;
424   }
425   unsigned numWords = getNumWords();
426   for (unsigned i = 0; i < numWords; ++i)
427     pVal[i] &= RHS.pVal[i];
428   return *this;
429 }
430 
431 APInt &APInt::operator&=(uint64_t RHS) {
432   if (isSingleWord()) {
433     VAL &= RHS;
434     return *this;
435   }
436   pVal[0] &= RHS;
437   unsigned numWords = getNumWords();
438   for (unsigned i = 1; i < numWords; ++i)
439     pVal[i] = 0;
440   return *this;
441 }
442 
443 APInt& APInt::operator|=(const APInt& RHS) {
444   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
445   if (isSingleWord()) {
446     VAL |= RHS.VAL;
447     return *this;
448   }
449   unsigned numWords = getNumWords();
450   for (unsigned i = 0; i < numWords; ++i)
451     pVal[i] |= RHS.pVal[i];
452   return *this;
453 }
454 
455 APInt& APInt::operator^=(const APInt& RHS) {
456   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
457   if (isSingleWord()) {
458     VAL ^= RHS.VAL;
459     return *this;
460   }
461   unsigned numWords = getNumWords();
462   for (unsigned i = 0; i < numWords; ++i)
463     pVal[i] ^= RHS.pVal[i];
464   return *this;
465 }
466 
467 APInt APInt::operator*(const APInt& RHS) const {
468   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
469   if (isSingleWord())
470     return APInt(BitWidth, VAL * RHS.VAL);
471   APInt Result(*this);
472   Result *= RHS;
473   return Result;
474 }
475 
476 bool APInt::EqualSlowCase(const APInt& RHS) const {
477   return std::equal(pVal, pVal + getNumWords(), RHS.pVal);
478 }
479 
480 bool APInt::EqualSlowCase(uint64_t Val) const {
481   unsigned n = getActiveBits();
482   if (n <= APINT_BITS_PER_WORD)
483     return pVal[0] == Val;
484   else
485     return false;
486 }
487 
488 bool APInt::ult(const APInt& RHS) const {
489   assert(BitWidth == RHS.BitWidth && "Bit widths must be same for comparison");
490   if (isSingleWord())
491     return VAL < RHS.VAL;
492 
493   // Get active bit length of both operands
494   unsigned n1 = getActiveBits();
495   unsigned n2 = RHS.getActiveBits();
496 
497   // If magnitude of LHS is less than RHS, return true.
498   if (n1 < n2)
499     return true;
500 
501   // If magnitude of RHS is greater than LHS, return false.
502   if (n2 < n1)
503     return false;
504 
505   // If they both fit in a word, just compare the low order word
506   if (n1 <= APINT_BITS_PER_WORD && n2 <= APINT_BITS_PER_WORD)
507     return pVal[0] < RHS.pVal[0];
508 
509   // Otherwise, compare all words
510   unsigned topWord = whichWord(std::max(n1,n2)-1);
511   for (int i = topWord; i >= 0; --i) {
512     if (pVal[i] > RHS.pVal[i])
513       return false;
514     if (pVal[i] < RHS.pVal[i])
515       return true;
516   }
517   return false;
518 }
519 
520 bool APInt::slt(const APInt& RHS) const {
521   assert(BitWidth == RHS.BitWidth && "Bit widths must be same for comparison");
522   if (isSingleWord()) {
523     int64_t lhsSext = SignExtend64(VAL, BitWidth);
524     int64_t rhsSext = SignExtend64(RHS.VAL, BitWidth);
525     return lhsSext < rhsSext;
526   }
527 
528   bool lhsNeg = isNegative();
529   bool rhsNeg = RHS.isNegative();
530 
531   // If the sign bits don't match, then (LHS < RHS) if LHS is negative
532   if (lhsNeg != rhsNeg)
533     return lhsNeg;
534 
535   // Otherwise we can just use an unsigned comparison, because even negative
536   // numbers compare correctly this way if both have the same signed-ness.
537   return ult(RHS);
538 }
539 
540 void APInt::setBit(unsigned bitPosition) {
541   if (isSingleWord())
542     VAL |= maskBit(bitPosition);
543   else
544     pVal[whichWord(bitPosition)] |= maskBit(bitPosition);
545 }
546 
547 void APInt::setBitsSlowCase(unsigned loBit, unsigned hiBit) {
548   unsigned loWord = whichWord(loBit);
549   unsigned hiWord = whichWord(hiBit);
550 
551   // Create an initial mask for the low word with zeros below loBit.
552   uint64_t loMask = UINT64_MAX << whichBit(loBit);
553 
554   // If hiBit is not aligned, we need a high mask.
555   unsigned hiShiftAmt = whichBit(hiBit);
556   if (hiShiftAmt != 0) {
557     // Create a high mask with zeros above hiBit.
558     uint64_t hiMask = UINT64_MAX >> (APINT_BITS_PER_WORD - hiShiftAmt);
559     // If loWord and hiWord are equal, then we combine the masks. Otherwise,
560     // set the bits in hiWord.
561     if (hiWord == loWord)
562       loMask &= hiMask;
563     else
564       pVal[hiWord] |= hiMask;
565   }
566   // Apply the mask to the low word.
567   pVal[loWord] |= loMask;
568 
569   // Fill any words between loWord and hiWord with all ones.
570   for (unsigned word = loWord + 1; word < hiWord; ++word)
571     pVal[word] = UINT64_MAX;
572 }
573 
574 /// Set the given bit to 0 whose position is given as "bitPosition".
575 /// @brief Set a given bit to 0.
576 void APInt::clearBit(unsigned bitPosition) {
577   if (isSingleWord())
578     VAL &= ~maskBit(bitPosition);
579   else
580     pVal[whichWord(bitPosition)] &= ~maskBit(bitPosition);
581 }
582 
583 /// @brief Toggle every bit to its opposite value.
584 
585 /// Toggle a given bit to its opposite value whose position is given
586 /// as "bitPosition".
587 /// @brief Toggles a given bit to its opposite value.
588 void APInt::flipBit(unsigned bitPosition) {
589   assert(bitPosition < BitWidth && "Out of the bit-width range!");
590   if ((*this)[bitPosition]) clearBit(bitPosition);
591   else setBit(bitPosition);
592 }
593 
594 void APInt::insertBits(const APInt &subBits, unsigned bitPosition) {
595   unsigned subBitWidth = subBits.getBitWidth();
596   assert(0 < subBitWidth && (subBitWidth + bitPosition) <= BitWidth &&
597          "Illegal bit insertion");
598 
599   // Insertion is a direct copy.
600   if (subBitWidth == BitWidth) {
601     *this = subBits;
602     return;
603   }
604 
605   // Single word result can be done as a direct bitmask.
606   if (isSingleWord()) {
607     uint64_t mask = UINT64_MAX >> (APINT_BITS_PER_WORD - subBitWidth);
608     VAL &= ~(mask << bitPosition);
609     VAL |= (subBits.VAL << bitPosition);
610     return;
611   }
612 
613   unsigned loBit = whichBit(bitPosition);
614   unsigned loWord = whichWord(bitPosition);
615   unsigned hi1Word = whichWord(bitPosition + subBitWidth - 1);
616 
617   // Insertion within a single word can be done as a direct bitmask.
618   if (loWord == hi1Word) {
619     uint64_t mask = UINT64_MAX >> (APINT_BITS_PER_WORD - subBitWidth);
620     pVal[loWord] &= ~(mask << loBit);
621     pVal[loWord] |= (subBits.VAL << loBit);
622     return;
623   }
624 
625   // Insert on word boundaries.
626   if (loBit == 0) {
627     // Direct copy whole words.
628     unsigned numWholeSubWords = subBitWidth / APINT_BITS_PER_WORD;
629     memcpy(pVal + loWord, subBits.getRawData(),
630            numWholeSubWords * APINT_WORD_SIZE);
631 
632     // Mask+insert remaining bits.
633     unsigned remainingBits = subBitWidth % APINT_BITS_PER_WORD;
634     if (remainingBits != 0) {
635       uint64_t mask = UINT64_MAX >> (APINT_BITS_PER_WORD - remainingBits);
636       pVal[hi1Word] &= ~mask;
637       pVal[hi1Word] |= subBits.getWord(subBitWidth - 1);
638     }
639     return;
640   }
641 
642   // General case - set/clear individual bits in dst based on src.
643   // TODO - there is scope for optimization here, but at the moment this code
644   // path is barely used so prefer readability over performance.
645   for (unsigned i = 0; i != subBitWidth; ++i) {
646     if (subBits[i])
647       setBit(bitPosition + i);
648     else
649       clearBit(bitPosition + i);
650   }
651 }
652 
653 APInt APInt::extractBits(unsigned numBits, unsigned bitPosition) const {
654   assert(numBits > 0 && "Can't extract zero bits");
655   assert(bitPosition < BitWidth && (numBits + bitPosition) <= BitWidth &&
656          "Illegal bit extraction");
657 
658   if (isSingleWord())
659     return APInt(numBits, VAL >> bitPosition);
660 
661   unsigned loBit = whichBit(bitPosition);
662   unsigned loWord = whichWord(bitPosition);
663   unsigned hiWord = whichWord(bitPosition + numBits - 1);
664 
665   // Single word result extracting bits from a single word source.
666   if (loWord == hiWord)
667     return APInt(numBits, pVal[loWord] >> loBit);
668 
669   // Extracting bits that start on a source word boundary can be done
670   // as a fast memory copy.
671   if (loBit == 0)
672     return APInt(numBits, makeArrayRef(pVal + loWord, 1 + hiWord - loWord));
673 
674   // General case - shift + copy source words directly into place.
675   APInt Result(numBits, 0);
676   unsigned NumSrcWords = getNumWords();
677   unsigned NumDstWords = Result.getNumWords();
678 
679   for (unsigned word = 0; word < NumDstWords; ++word) {
680     uint64_t w0 = pVal[loWord + word];
681     uint64_t w1 =
682         (loWord + word + 1) < NumSrcWords ? pVal[loWord + word + 1] : 0;
683     Result.pVal[word] = (w0 >> loBit) | (w1 << (APINT_BITS_PER_WORD - loBit));
684   }
685 
686   return Result.clearUnusedBits();
687 }
688 
689 unsigned APInt::getBitsNeeded(StringRef str, uint8_t radix) {
690   assert(!str.empty() && "Invalid string length");
691   assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 ||
692           radix == 36) &&
693          "Radix should be 2, 8, 10, 16, or 36!");
694 
695   size_t slen = str.size();
696 
697   // Each computation below needs to know if it's negative.
698   StringRef::iterator p = str.begin();
699   unsigned isNegative = *p == '-';
700   if (*p == '-' || *p == '+') {
701     p++;
702     slen--;
703     assert(slen && "String is only a sign, needs a value.");
704   }
705 
706   // For radixes of power-of-two values, the bits required is accurately and
707   // easily computed
708   if (radix == 2)
709     return slen + isNegative;
710   if (radix == 8)
711     return slen * 3 + isNegative;
712   if (radix == 16)
713     return slen * 4 + isNegative;
714 
715   // FIXME: base 36
716 
717   // This is grossly inefficient but accurate. We could probably do something
718   // with a computation of roughly slen*64/20 and then adjust by the value of
719   // the first few digits. But, I'm not sure how accurate that could be.
720 
721   // Compute a sufficient number of bits that is always large enough but might
722   // be too large. This avoids the assertion in the constructor. This
723   // calculation doesn't work appropriately for the numbers 0-9, so just use 4
724   // bits in that case.
725   unsigned sufficient
726     = radix == 10? (slen == 1 ? 4 : slen * 64/18)
727                  : (slen == 1 ? 7 : slen * 16/3);
728 
729   // Convert to the actual binary value.
730   APInt tmp(sufficient, StringRef(p, slen), radix);
731 
732   // Compute how many bits are required. If the log is infinite, assume we need
733   // just bit.
734   unsigned log = tmp.logBase2();
735   if (log == (unsigned)-1) {
736     return isNegative + 1;
737   } else {
738     return isNegative + log + 1;
739   }
740 }
741 
742 hash_code llvm::hash_value(const APInt &Arg) {
743   if (Arg.isSingleWord())
744     return hash_combine(Arg.VAL);
745 
746   return hash_combine_range(Arg.pVal, Arg.pVal + Arg.getNumWords());
747 }
748 
749 bool APInt::isSplat(unsigned SplatSizeInBits) const {
750   assert(getBitWidth() % SplatSizeInBits == 0 &&
751          "SplatSizeInBits must divide width!");
752   // We can check that all parts of an integer are equal by making use of a
753   // little trick: rotate and check if it's still the same value.
754   return *this == rotl(SplatSizeInBits);
755 }
756 
757 /// This function returns the high "numBits" bits of this APInt.
758 APInt APInt::getHiBits(unsigned numBits) const {
759   return APIntOps::lshr(*this, BitWidth - numBits);
760 }
761 
762 /// This function returns the low "numBits" bits of this APInt.
763 APInt APInt::getLoBits(unsigned numBits) const {
764   return APIntOps::lshr(APIntOps::shl(*this, BitWidth - numBits),
765                         BitWidth - numBits);
766 }
767 
768 unsigned APInt::countLeadingZerosSlowCase() const {
769   unsigned Count = 0;
770   for (int i = getNumWords()-1; i >= 0; --i) {
771     integerPart V = pVal[i];
772     if (V == 0)
773       Count += APINT_BITS_PER_WORD;
774     else {
775       Count += llvm::countLeadingZeros(V);
776       break;
777     }
778   }
779   // Adjust for unused bits in the most significant word (they are zero).
780   unsigned Mod = BitWidth % APINT_BITS_PER_WORD;
781   Count -= Mod > 0 ? APINT_BITS_PER_WORD - Mod : 0;
782   return Count;
783 }
784 
785 unsigned APInt::countLeadingOnes() const {
786   if (isSingleWord())
787     return llvm::countLeadingOnes(VAL << (APINT_BITS_PER_WORD - BitWidth));
788 
789   unsigned highWordBits = BitWidth % APINT_BITS_PER_WORD;
790   unsigned shift;
791   if (!highWordBits) {
792     highWordBits = APINT_BITS_PER_WORD;
793     shift = 0;
794   } else {
795     shift = APINT_BITS_PER_WORD - highWordBits;
796   }
797   int i = getNumWords() - 1;
798   unsigned Count = llvm::countLeadingOnes(pVal[i] << shift);
799   if (Count == highWordBits) {
800     for (i--; i >= 0; --i) {
801       if (pVal[i] == -1ULL)
802         Count += APINT_BITS_PER_WORD;
803       else {
804         Count += llvm::countLeadingOnes(pVal[i]);
805         break;
806       }
807     }
808   }
809   return Count;
810 }
811 
812 unsigned APInt::countTrailingZeros() const {
813   if (isSingleWord())
814     return std::min(unsigned(llvm::countTrailingZeros(VAL)), BitWidth);
815   unsigned Count = 0;
816   unsigned i = 0;
817   for (; i < getNumWords() && pVal[i] == 0; ++i)
818     Count += APINT_BITS_PER_WORD;
819   if (i < getNumWords())
820     Count += llvm::countTrailingZeros(pVal[i]);
821   return std::min(Count, BitWidth);
822 }
823 
824 unsigned APInt::countTrailingOnesSlowCase() const {
825   unsigned Count = 0;
826   unsigned i = 0;
827   for (; i < getNumWords() && pVal[i] == -1ULL; ++i)
828     Count += APINT_BITS_PER_WORD;
829   if (i < getNumWords())
830     Count += llvm::countTrailingOnes(pVal[i]);
831   return std::min(Count, BitWidth);
832 }
833 
834 unsigned APInt::countPopulationSlowCase() const {
835   unsigned Count = 0;
836   for (unsigned i = 0; i < getNumWords(); ++i)
837     Count += llvm::countPopulation(pVal[i]);
838   return Count;
839 }
840 
841 /// Perform a logical right-shift from Src to Dst, which must be equal or
842 /// non-overlapping, of Words words, by Shift, which must be less than 64.
843 static void lshrNear(uint64_t *Dst, uint64_t *Src, unsigned Words,
844                      unsigned Shift) {
845   uint64_t Carry = 0;
846   for (int I = Words - 1; I >= 0; --I) {
847     uint64_t Tmp = Src[I];
848     Dst[I] = (Tmp >> Shift) | Carry;
849     Carry = Tmp << (64 - Shift);
850   }
851 }
852 
853 APInt APInt::byteSwap() const {
854   assert(BitWidth >= 16 && BitWidth % 16 == 0 && "Cannot byteswap!");
855   if (BitWidth == 16)
856     return APInt(BitWidth, ByteSwap_16(uint16_t(VAL)));
857   if (BitWidth == 32)
858     return APInt(BitWidth, ByteSwap_32(unsigned(VAL)));
859   if (BitWidth == 48) {
860     unsigned Tmp1 = unsigned(VAL >> 16);
861     Tmp1 = ByteSwap_32(Tmp1);
862     uint16_t Tmp2 = uint16_t(VAL);
863     Tmp2 = ByteSwap_16(Tmp2);
864     return APInt(BitWidth, (uint64_t(Tmp2) << 32) | Tmp1);
865   }
866   if (BitWidth == 64)
867     return APInt(BitWidth, ByteSwap_64(VAL));
868 
869   APInt Result(getNumWords() * APINT_BITS_PER_WORD, 0);
870   for (unsigned I = 0, N = getNumWords(); I != N; ++I)
871     Result.pVal[I] = ByteSwap_64(pVal[N - I - 1]);
872   if (Result.BitWidth != BitWidth) {
873     lshrNear(Result.pVal, Result.pVal, getNumWords(),
874              Result.BitWidth - BitWidth);
875     Result.BitWidth = BitWidth;
876   }
877   return Result;
878 }
879 
880 APInt APInt::reverseBits() const {
881   switch (BitWidth) {
882   case 64:
883     return APInt(BitWidth, llvm::reverseBits<uint64_t>(VAL));
884   case 32:
885     return APInt(BitWidth, llvm::reverseBits<uint32_t>(VAL));
886   case 16:
887     return APInt(BitWidth, llvm::reverseBits<uint16_t>(VAL));
888   case 8:
889     return APInt(BitWidth, llvm::reverseBits<uint8_t>(VAL));
890   default:
891     break;
892   }
893 
894   APInt Val(*this);
895   APInt Reversed(*this);
896   int S = BitWidth - 1;
897 
898   const APInt One(BitWidth, 1);
899 
900   for ((Val = Val.lshr(1)); Val != 0; (Val = Val.lshr(1))) {
901     Reversed <<= 1;
902     Reversed |= (Val & One);
903     --S;
904   }
905 
906   Reversed <<= S;
907   return Reversed;
908 }
909 
910 APInt llvm::APIntOps::GreatestCommonDivisor(const APInt& API1,
911                                             const APInt& API2) {
912   APInt A = API1, B = API2;
913   while (!!B) {
914     APInt T = B;
915     B = APIntOps::urem(A, B);
916     A = T;
917   }
918   return A;
919 }
920 
921 APInt llvm::APIntOps::RoundDoubleToAPInt(double Double, unsigned width) {
922   union {
923     double D;
924     uint64_t I;
925   } T;
926   T.D = Double;
927 
928   // Get the sign bit from the highest order bit
929   bool isNeg = T.I >> 63;
930 
931   // Get the 11-bit exponent and adjust for the 1023 bit bias
932   int64_t exp = ((T.I >> 52) & 0x7ff) - 1023;
933 
934   // If the exponent is negative, the value is < 0 so just return 0.
935   if (exp < 0)
936     return APInt(width, 0u);
937 
938   // Extract the mantissa by clearing the top 12 bits (sign + exponent).
939   uint64_t mantissa = (T.I & (~0ULL >> 12)) | 1ULL << 52;
940 
941   // If the exponent doesn't shift all bits out of the mantissa
942   if (exp < 52)
943     return isNeg ? -APInt(width, mantissa >> (52 - exp)) :
944                     APInt(width, mantissa >> (52 - exp));
945 
946   // If the client didn't provide enough bits for us to shift the mantissa into
947   // then the result is undefined, just return 0
948   if (width <= exp - 52)
949     return APInt(width, 0);
950 
951   // Otherwise, we have to shift the mantissa bits up to the right location
952   APInt Tmp(width, mantissa);
953   Tmp = Tmp.shl((unsigned)exp - 52);
954   return isNeg ? -Tmp : Tmp;
955 }
956 
957 /// This function converts this APInt to a double.
958 /// The layout for double is as following (IEEE Standard 754):
959 ///  --------------------------------------
960 /// |  Sign    Exponent    Fraction    Bias |
961 /// |-------------------------------------- |
962 /// |  1[63]   11[62-52]   52[51-00]   1023 |
963 ///  --------------------------------------
964 double APInt::roundToDouble(bool isSigned) const {
965 
966   // Handle the simple case where the value is contained in one uint64_t.
967   // It is wrong to optimize getWord(0) to VAL; there might be more than one word.
968   if (isSingleWord() || getActiveBits() <= APINT_BITS_PER_WORD) {
969     if (isSigned) {
970       int64_t sext = SignExtend64(getWord(0), BitWidth);
971       return double(sext);
972     } else
973       return double(getWord(0));
974   }
975 
976   // Determine if the value is negative.
977   bool isNeg = isSigned ? (*this)[BitWidth-1] : false;
978 
979   // Construct the absolute value if we're negative.
980   APInt Tmp(isNeg ? -(*this) : (*this));
981 
982   // Figure out how many bits we're using.
983   unsigned n = Tmp.getActiveBits();
984 
985   // The exponent (without bias normalization) is just the number of bits
986   // we are using. Note that the sign bit is gone since we constructed the
987   // absolute value.
988   uint64_t exp = n;
989 
990   // Return infinity for exponent overflow
991   if (exp > 1023) {
992     if (!isSigned || !isNeg)
993       return std::numeric_limits<double>::infinity();
994     else
995       return -std::numeric_limits<double>::infinity();
996   }
997   exp += 1023; // Increment for 1023 bias
998 
999   // Number of bits in mantissa is 52. To obtain the mantissa value, we must
1000   // extract the high 52 bits from the correct words in pVal.
1001   uint64_t mantissa;
1002   unsigned hiWord = whichWord(n-1);
1003   if (hiWord == 0) {
1004     mantissa = Tmp.pVal[0];
1005     if (n > 52)
1006       mantissa >>= n - 52; // shift down, we want the top 52 bits.
1007   } else {
1008     assert(hiWord > 0 && "huh?");
1009     uint64_t hibits = Tmp.pVal[hiWord] << (52 - n % APINT_BITS_PER_WORD);
1010     uint64_t lobits = Tmp.pVal[hiWord-1] >> (11 + n % APINT_BITS_PER_WORD);
1011     mantissa = hibits | lobits;
1012   }
1013 
1014   // The leading bit of mantissa is implicit, so get rid of it.
1015   uint64_t sign = isNeg ? (1ULL << (APINT_BITS_PER_WORD - 1)) : 0;
1016   union {
1017     double D;
1018     uint64_t I;
1019   } T;
1020   T.I = sign | (exp << 52) | mantissa;
1021   return T.D;
1022 }
1023 
1024 // Truncate to new width.
1025 APInt APInt::trunc(unsigned width) const {
1026   assert(width < BitWidth && "Invalid APInt Truncate request");
1027   assert(width && "Can't truncate to 0 bits");
1028 
1029   if (width <= APINT_BITS_PER_WORD)
1030     return APInt(width, getRawData()[0]);
1031 
1032   APInt Result(getMemory(getNumWords(width)), width);
1033 
1034   // Copy full words.
1035   unsigned i;
1036   for (i = 0; i != width / APINT_BITS_PER_WORD; i++)
1037     Result.pVal[i] = pVal[i];
1038 
1039   // Truncate and copy any partial word.
1040   unsigned bits = (0 - width) % APINT_BITS_PER_WORD;
1041   if (bits != 0)
1042     Result.pVal[i] = pVal[i] << bits >> bits;
1043 
1044   return Result;
1045 }
1046 
1047 // Sign extend to a new width.
1048 APInt APInt::sext(unsigned width) const {
1049   assert(width > BitWidth && "Invalid APInt SignExtend request");
1050 
1051   if (width <= APINT_BITS_PER_WORD) {
1052     uint64_t val = VAL << (APINT_BITS_PER_WORD - BitWidth);
1053     val = (int64_t)val >> (width - BitWidth);
1054     return APInt(width, val >> (APINT_BITS_PER_WORD - width));
1055   }
1056 
1057   APInt Result(getMemory(getNumWords(width)), width);
1058 
1059   // Copy full words.
1060   unsigned i;
1061   uint64_t word = 0;
1062   for (i = 0; i != BitWidth / APINT_BITS_PER_WORD; i++) {
1063     word = getRawData()[i];
1064     Result.pVal[i] = word;
1065   }
1066 
1067   // Read and sign-extend any partial word.
1068   unsigned bits = (0 - BitWidth) % APINT_BITS_PER_WORD;
1069   if (bits != 0)
1070     word = (int64_t)getRawData()[i] << bits >> bits;
1071   else
1072     word = (int64_t)word >> (APINT_BITS_PER_WORD - 1);
1073 
1074   // Write remaining full words.
1075   for (; i != width / APINT_BITS_PER_WORD; i++) {
1076     Result.pVal[i] = word;
1077     word = (int64_t)word >> (APINT_BITS_PER_WORD - 1);
1078   }
1079 
1080   // Write any partial word.
1081   bits = (0 - width) % APINT_BITS_PER_WORD;
1082   if (bits != 0)
1083     Result.pVal[i] = word << bits >> bits;
1084 
1085   return Result;
1086 }
1087 
1088 //  Zero extend to a new width.
1089 APInt APInt::zext(unsigned width) const {
1090   assert(width > BitWidth && "Invalid APInt ZeroExtend request");
1091 
1092   if (width <= APINT_BITS_PER_WORD)
1093     return APInt(width, VAL);
1094 
1095   APInt Result(getMemory(getNumWords(width)), width);
1096 
1097   // Copy words.
1098   unsigned i;
1099   for (i = 0; i != getNumWords(); i++)
1100     Result.pVal[i] = getRawData()[i];
1101 
1102   // Zero remaining words.
1103   memset(&Result.pVal[i], 0, (Result.getNumWords() - i) * APINT_WORD_SIZE);
1104 
1105   return Result;
1106 }
1107 
1108 APInt APInt::zextOrTrunc(unsigned width) const {
1109   if (BitWidth < width)
1110     return zext(width);
1111   if (BitWidth > width)
1112     return trunc(width);
1113   return *this;
1114 }
1115 
1116 APInt APInt::sextOrTrunc(unsigned width) const {
1117   if (BitWidth < width)
1118     return sext(width);
1119   if (BitWidth > width)
1120     return trunc(width);
1121   return *this;
1122 }
1123 
1124 APInt APInt::zextOrSelf(unsigned width) const {
1125   if (BitWidth < width)
1126     return zext(width);
1127   return *this;
1128 }
1129 
1130 APInt APInt::sextOrSelf(unsigned width) const {
1131   if (BitWidth < width)
1132     return sext(width);
1133   return *this;
1134 }
1135 
1136 /// Arithmetic right-shift this APInt by shiftAmt.
1137 /// @brief Arithmetic right-shift function.
1138 APInt APInt::ashr(const APInt &shiftAmt) const {
1139   return ashr((unsigned)shiftAmt.getLimitedValue(BitWidth));
1140 }
1141 
1142 /// Arithmetic right-shift this APInt by shiftAmt.
1143 /// @brief Arithmetic right-shift function.
1144 APInt APInt::ashr(unsigned shiftAmt) const {
1145   assert(shiftAmt <= BitWidth && "Invalid shift amount");
1146   // Handle a degenerate case
1147   if (shiftAmt == 0)
1148     return *this;
1149 
1150   // Handle single word shifts with built-in ashr
1151   if (isSingleWord()) {
1152     if (shiftAmt == BitWidth)
1153       return APInt(BitWidth, 0); // undefined
1154     return APInt(BitWidth, SignExtend64(VAL, BitWidth) >> shiftAmt);
1155   }
1156 
1157   // If all the bits were shifted out, the result is, technically, undefined.
1158   // We return -1 if it was negative, 0 otherwise. We check this early to avoid
1159   // issues in the algorithm below.
1160   if (shiftAmt == BitWidth) {
1161     if (isNegative())
1162       return APInt(BitWidth, -1ULL, true);
1163     else
1164       return APInt(BitWidth, 0);
1165   }
1166 
1167   // Create some space for the result.
1168   uint64_t * val = new uint64_t[getNumWords()];
1169 
1170   // Compute some values needed by the following shift algorithms
1171   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD; // bits to shift per word
1172   unsigned offset = shiftAmt / APINT_BITS_PER_WORD; // word offset for shift
1173   unsigned breakWord = getNumWords() - 1 - offset; // last word affected
1174   unsigned bitsInWord = whichBit(BitWidth); // how many bits in last word?
1175   if (bitsInWord == 0)
1176     bitsInWord = APINT_BITS_PER_WORD;
1177 
1178   // If we are shifting whole words, just move whole words
1179   if (wordShift == 0) {
1180     // Move the words containing significant bits
1181     for (unsigned i = 0; i <= breakWord; ++i)
1182       val[i] = pVal[i+offset]; // move whole word
1183 
1184     // Adjust the top significant word for sign bit fill, if negative
1185     if (isNegative())
1186       if (bitsInWord < APINT_BITS_PER_WORD)
1187         val[breakWord] |= ~0ULL << bitsInWord; // set high bits
1188   } else {
1189     // Shift the low order words
1190     for (unsigned i = 0; i < breakWord; ++i) {
1191       // This combines the shifted corresponding word with the low bits from
1192       // the next word (shifted into this word's high bits).
1193       val[i] = (pVal[i+offset] >> wordShift) |
1194                (pVal[i+offset+1] << (APINT_BITS_PER_WORD - wordShift));
1195     }
1196 
1197     // Shift the break word. In this case there are no bits from the next word
1198     // to include in this word.
1199     val[breakWord] = pVal[breakWord+offset] >> wordShift;
1200 
1201     // Deal with sign extension in the break word, and possibly the word before
1202     // it.
1203     if (isNegative()) {
1204       if (wordShift > bitsInWord) {
1205         if (breakWord > 0)
1206           val[breakWord-1] |=
1207             ~0ULL << (APINT_BITS_PER_WORD - (wordShift - bitsInWord));
1208         val[breakWord] |= ~0ULL;
1209       } else
1210         val[breakWord] |= (~0ULL << (bitsInWord - wordShift));
1211     }
1212   }
1213 
1214   // Remaining words are 0 or -1, just assign them.
1215   uint64_t fillValue = (isNegative() ? -1ULL : 0);
1216   for (unsigned i = breakWord+1; i < getNumWords(); ++i)
1217     val[i] = fillValue;
1218   APInt Result(val, BitWidth);
1219   Result.clearUnusedBits();
1220   return Result;
1221 }
1222 
1223 /// Logical right-shift this APInt by shiftAmt.
1224 /// @brief Logical right-shift function.
1225 APInt APInt::lshr(const APInt &shiftAmt) const {
1226   return lshr((unsigned)shiftAmt.getLimitedValue(BitWidth));
1227 }
1228 
1229 /// Logical right-shift this APInt by shiftAmt.
1230 /// @brief Logical right-shift function.
1231 APInt APInt::lshr(unsigned shiftAmt) const {
1232   if (isSingleWord()) {
1233     if (shiftAmt >= BitWidth)
1234       return APInt(BitWidth, 0);
1235     else
1236       return APInt(BitWidth, this->VAL >> shiftAmt);
1237   }
1238 
1239   // If all the bits were shifted out, the result is 0. This avoids issues
1240   // with shifting by the size of the integer type, which produces undefined
1241   // results. We define these "undefined results" to always be 0.
1242   if (shiftAmt >= BitWidth)
1243     return APInt(BitWidth, 0);
1244 
1245   // If none of the bits are shifted out, the result is *this. This avoids
1246   // issues with shifting by the size of the integer type, which produces
1247   // undefined results in the code below. This is also an optimization.
1248   if (shiftAmt == 0)
1249     return *this;
1250 
1251   // Create some space for the result.
1252   uint64_t * val = new uint64_t[getNumWords()];
1253 
1254   // If we are shifting less than a word, compute the shift with a simple carry
1255   if (shiftAmt < APINT_BITS_PER_WORD) {
1256     lshrNear(val, pVal, getNumWords(), shiftAmt);
1257     APInt Result(val, BitWidth);
1258     Result.clearUnusedBits();
1259     return Result;
1260   }
1261 
1262   // Compute some values needed by the remaining shift algorithms
1263   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD;
1264   unsigned offset = shiftAmt / APINT_BITS_PER_WORD;
1265 
1266   // If we are shifting whole words, just move whole words
1267   if (wordShift == 0) {
1268     for (unsigned i = 0; i < getNumWords() - offset; ++i)
1269       val[i] = pVal[i+offset];
1270     for (unsigned i = getNumWords()-offset; i < getNumWords(); i++)
1271       val[i] = 0;
1272     APInt Result(val, BitWidth);
1273     Result.clearUnusedBits();
1274     return Result;
1275   }
1276 
1277   // Shift the low order words
1278   unsigned breakWord = getNumWords() - offset -1;
1279   for (unsigned i = 0; i < breakWord; ++i)
1280     val[i] = (pVal[i+offset] >> wordShift) |
1281              (pVal[i+offset+1] << (APINT_BITS_PER_WORD - wordShift));
1282   // Shift the break word.
1283   val[breakWord] = pVal[breakWord+offset] >> wordShift;
1284 
1285   // Remaining words are 0
1286   for (unsigned i = breakWord+1; i < getNumWords(); ++i)
1287     val[i] = 0;
1288   APInt Result(val, BitWidth);
1289   Result.clearUnusedBits();
1290   return Result;
1291 }
1292 
1293 /// Left-shift this APInt by shiftAmt.
1294 /// @brief Left-shift function.
1295 APInt APInt::shl(const APInt &shiftAmt) const {
1296   // It's undefined behavior in C to shift by BitWidth or greater.
1297   return shl((unsigned)shiftAmt.getLimitedValue(BitWidth));
1298 }
1299 
1300 APInt APInt::shlSlowCase(unsigned shiftAmt) const {
1301   // If all the bits were shifted out, the result is 0. This avoids issues
1302   // with shifting by the size of the integer type, which produces undefined
1303   // results. We define these "undefined results" to always be 0.
1304   if (shiftAmt == BitWidth)
1305     return APInt(BitWidth, 0);
1306 
1307   // If none of the bits are shifted out, the result is *this. This avoids a
1308   // lshr by the words size in the loop below which can produce incorrect
1309   // results. It also avoids the expensive computation below for a common case.
1310   if (shiftAmt == 0)
1311     return *this;
1312 
1313   // Create some space for the result.
1314   uint64_t * val = new uint64_t[getNumWords()];
1315 
1316   // If we are shifting less than a word, do it the easy way
1317   if (shiftAmt < APINT_BITS_PER_WORD) {
1318     uint64_t carry = 0;
1319     for (unsigned i = 0; i < getNumWords(); i++) {
1320       val[i] = pVal[i] << shiftAmt | carry;
1321       carry = pVal[i] >> (APINT_BITS_PER_WORD - shiftAmt);
1322     }
1323     APInt Result(val, BitWidth);
1324     Result.clearUnusedBits();
1325     return Result;
1326   }
1327 
1328   // Compute some values needed by the remaining shift algorithms
1329   unsigned wordShift = shiftAmt % APINT_BITS_PER_WORD;
1330   unsigned offset = shiftAmt / APINT_BITS_PER_WORD;
1331 
1332   // If we are shifting whole words, just move whole words
1333   if (wordShift == 0) {
1334     for (unsigned i = 0; i < offset; i++)
1335       val[i] = 0;
1336     for (unsigned i = offset; i < getNumWords(); i++)
1337       val[i] = pVal[i-offset];
1338     APInt Result(val, BitWidth);
1339     Result.clearUnusedBits();
1340     return Result;
1341   }
1342 
1343   // Copy whole words from this to Result.
1344   unsigned i = getNumWords() - 1;
1345   for (; i > offset; --i)
1346     val[i] = pVal[i-offset] << wordShift |
1347              pVal[i-offset-1] >> (APINT_BITS_PER_WORD - wordShift);
1348   val[offset] = pVal[0] << wordShift;
1349   for (i = 0; i < offset; ++i)
1350     val[i] = 0;
1351   APInt Result(val, BitWidth);
1352   Result.clearUnusedBits();
1353   return Result;
1354 }
1355 
1356 // Calculate the rotate amount modulo the bit width.
1357 static unsigned rotateModulo(unsigned BitWidth, const APInt &rotateAmt) {
1358   unsigned rotBitWidth = rotateAmt.getBitWidth();
1359   APInt rot = rotateAmt;
1360   if (rotBitWidth < BitWidth) {
1361     // Extend the rotate APInt, so that the urem doesn't divide by 0.
1362     // e.g. APInt(1, 32) would give APInt(1, 0).
1363     rot = rotateAmt.zext(BitWidth);
1364   }
1365   rot = rot.urem(APInt(rot.getBitWidth(), BitWidth));
1366   return rot.getLimitedValue(BitWidth);
1367 }
1368 
1369 APInt APInt::rotl(const APInt &rotateAmt) const {
1370   return rotl(rotateModulo(BitWidth, rotateAmt));
1371 }
1372 
1373 APInt APInt::rotl(unsigned rotateAmt) const {
1374   rotateAmt %= BitWidth;
1375   if (rotateAmt == 0)
1376     return *this;
1377   return shl(rotateAmt) | lshr(BitWidth - rotateAmt);
1378 }
1379 
1380 APInt APInt::rotr(const APInt &rotateAmt) const {
1381   return rotr(rotateModulo(BitWidth, rotateAmt));
1382 }
1383 
1384 APInt APInt::rotr(unsigned rotateAmt) const {
1385   rotateAmt %= BitWidth;
1386   if (rotateAmt == 0)
1387     return *this;
1388   return lshr(rotateAmt) | shl(BitWidth - rotateAmt);
1389 }
1390 
1391 // Square Root - this method computes and returns the square root of "this".
1392 // Three mechanisms are used for computation. For small values (<= 5 bits),
1393 // a table lookup is done. This gets some performance for common cases. For
1394 // values using less than 52 bits, the value is converted to double and then
1395 // the libc sqrt function is called. The result is rounded and then converted
1396 // back to a uint64_t which is then used to construct the result. Finally,
1397 // the Babylonian method for computing square roots is used.
1398 APInt APInt::sqrt() const {
1399 
1400   // Determine the magnitude of the value.
1401   unsigned magnitude = getActiveBits();
1402 
1403   // Use a fast table for some small values. This also gets rid of some
1404   // rounding errors in libc sqrt for small values.
1405   if (magnitude <= 5) {
1406     static const uint8_t results[32] = {
1407       /*     0 */ 0,
1408       /*  1- 2 */ 1, 1,
1409       /*  3- 6 */ 2, 2, 2, 2,
1410       /*  7-12 */ 3, 3, 3, 3, 3, 3,
1411       /* 13-20 */ 4, 4, 4, 4, 4, 4, 4, 4,
1412       /* 21-30 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1413       /*    31 */ 6
1414     };
1415     return APInt(BitWidth, results[ (isSingleWord() ? VAL : pVal[0]) ]);
1416   }
1417 
1418   // If the magnitude of the value fits in less than 52 bits (the precision of
1419   // an IEEE double precision floating point value), then we can use the
1420   // libc sqrt function which will probably use a hardware sqrt computation.
1421   // This should be faster than the algorithm below.
1422   if (magnitude < 52) {
1423     return APInt(BitWidth,
1424                  uint64_t(::round(::sqrt(double(isSingleWord()?VAL:pVal[0])))));
1425   }
1426 
1427   // Okay, all the short cuts are exhausted. We must compute it. The following
1428   // is a classical Babylonian method for computing the square root. This code
1429   // was adapted to APInt from a wikipedia article on such computations.
1430   // See http://www.wikipedia.org/ and go to the page named
1431   // Calculate_an_integer_square_root.
1432   unsigned nbits = BitWidth, i = 4;
1433   APInt testy(BitWidth, 16);
1434   APInt x_old(BitWidth, 1);
1435   APInt x_new(BitWidth, 0);
1436   APInt two(BitWidth, 2);
1437 
1438   // Select a good starting value using binary logarithms.
1439   for (;; i += 2, testy = testy.shl(2))
1440     if (i >= nbits || this->ule(testy)) {
1441       x_old = x_old.shl(i / 2);
1442       break;
1443     }
1444 
1445   // Use the Babylonian method to arrive at the integer square root:
1446   for (;;) {
1447     x_new = (this->udiv(x_old) + x_old).udiv(two);
1448     if (x_old.ule(x_new))
1449       break;
1450     x_old = x_new;
1451   }
1452 
1453   // Make sure we return the closest approximation
1454   // NOTE: The rounding calculation below is correct. It will produce an
1455   // off-by-one discrepancy with results from pari/gp. That discrepancy has been
1456   // determined to be a rounding issue with pari/gp as it begins to use a
1457   // floating point representation after 192 bits. There are no discrepancies
1458   // between this algorithm and pari/gp for bit widths < 192 bits.
1459   APInt square(x_old * x_old);
1460   APInt nextSquare((x_old + 1) * (x_old +1));
1461   if (this->ult(square))
1462     return x_old;
1463   assert(this->ule(nextSquare) && "Error in APInt::sqrt computation");
1464   APInt midpoint((nextSquare - square).udiv(two));
1465   APInt offset(*this - square);
1466   if (offset.ult(midpoint))
1467     return x_old;
1468   return x_old + 1;
1469 }
1470 
1471 /// Computes the multiplicative inverse of this APInt for a given modulo. The
1472 /// iterative extended Euclidean algorithm is used to solve for this value,
1473 /// however we simplify it to speed up calculating only the inverse, and take
1474 /// advantage of div+rem calculations. We also use some tricks to avoid copying
1475 /// (potentially large) APInts around.
1476 APInt APInt::multiplicativeInverse(const APInt& modulo) const {
1477   assert(ult(modulo) && "This APInt must be smaller than the modulo");
1478 
1479   // Using the properties listed at the following web page (accessed 06/21/08):
1480   //   http://www.numbertheory.org/php/euclid.html
1481   // (especially the properties numbered 3, 4 and 9) it can be proved that
1482   // BitWidth bits suffice for all the computations in the algorithm implemented
1483   // below. More precisely, this number of bits suffice if the multiplicative
1484   // inverse exists, but may not suffice for the general extended Euclidean
1485   // algorithm.
1486 
1487   APInt r[2] = { modulo, *this };
1488   APInt t[2] = { APInt(BitWidth, 0), APInt(BitWidth, 1) };
1489   APInt q(BitWidth, 0);
1490 
1491   unsigned i;
1492   for (i = 0; r[i^1] != 0; i ^= 1) {
1493     // An overview of the math without the confusing bit-flipping:
1494     // q = r[i-2] / r[i-1]
1495     // r[i] = r[i-2] % r[i-1]
1496     // t[i] = t[i-2] - t[i-1] * q
1497     udivrem(r[i], r[i^1], q, r[i]);
1498     t[i] -= t[i^1] * q;
1499   }
1500 
1501   // If this APInt and the modulo are not coprime, there is no multiplicative
1502   // inverse, so return 0. We check this by looking at the next-to-last
1503   // remainder, which is the gcd(*this,modulo) as calculated by the Euclidean
1504   // algorithm.
1505   if (r[i] != 1)
1506     return APInt(BitWidth, 0);
1507 
1508   // The next-to-last t is the multiplicative inverse.  However, we are
1509   // interested in a positive inverse. Calcuate a positive one from a negative
1510   // one if necessary. A simple addition of the modulo suffices because
1511   // abs(t[i]) is known to be less than *this/2 (see the link above).
1512   return t[i].isNegative() ? t[i] + modulo : t[i];
1513 }
1514 
1515 /// Calculate the magic numbers required to implement a signed integer division
1516 /// by a constant as a sequence of multiplies, adds and shifts.  Requires that
1517 /// the divisor not be 0, 1, or -1.  Taken from "Hacker's Delight", Henry S.
1518 /// Warren, Jr., chapter 10.
1519 APInt::ms APInt::magic() const {
1520   const APInt& d = *this;
1521   unsigned p;
1522   APInt ad, anc, delta, q1, r1, q2, r2, t;
1523   APInt signedMin = APInt::getSignedMinValue(d.getBitWidth());
1524   struct ms mag;
1525 
1526   ad = d.abs();
1527   t = signedMin + (d.lshr(d.getBitWidth() - 1));
1528   anc = t - 1 - t.urem(ad);   // absolute value of nc
1529   p = d.getBitWidth() - 1;    // initialize p
1530   q1 = signedMin.udiv(anc);   // initialize q1 = 2p/abs(nc)
1531   r1 = signedMin - q1*anc;    // initialize r1 = rem(2p,abs(nc))
1532   q2 = signedMin.udiv(ad);    // initialize q2 = 2p/abs(d)
1533   r2 = signedMin - q2*ad;     // initialize r2 = rem(2p,abs(d))
1534   do {
1535     p = p + 1;
1536     q1 = q1<<1;          // update q1 = 2p/abs(nc)
1537     r1 = r1<<1;          // update r1 = rem(2p/abs(nc))
1538     if (r1.uge(anc)) {  // must be unsigned comparison
1539       q1 = q1 + 1;
1540       r1 = r1 - anc;
1541     }
1542     q2 = q2<<1;          // update q2 = 2p/abs(d)
1543     r2 = r2<<1;          // update r2 = rem(2p/abs(d))
1544     if (r2.uge(ad)) {   // must be unsigned comparison
1545       q2 = q2 + 1;
1546       r2 = r2 - ad;
1547     }
1548     delta = ad - r2;
1549   } while (q1.ult(delta) || (q1 == delta && r1 == 0));
1550 
1551   mag.m = q2 + 1;
1552   if (d.isNegative()) mag.m = -mag.m;   // resulting magic number
1553   mag.s = p - d.getBitWidth();          // resulting shift
1554   return mag;
1555 }
1556 
1557 /// Calculate the magic numbers required to implement an unsigned integer
1558 /// division by a constant as a sequence of multiplies, adds and shifts.
1559 /// Requires that the divisor not be 0.  Taken from "Hacker's Delight", Henry
1560 /// S. Warren, Jr., chapter 10.
1561 /// LeadingZeros can be used to simplify the calculation if the upper bits
1562 /// of the divided value are known zero.
1563 APInt::mu APInt::magicu(unsigned LeadingZeros) const {
1564   const APInt& d = *this;
1565   unsigned p;
1566   APInt nc, delta, q1, r1, q2, r2;
1567   struct mu magu;
1568   magu.a = 0;               // initialize "add" indicator
1569   APInt allOnes = APInt::getAllOnesValue(d.getBitWidth()).lshr(LeadingZeros);
1570   APInt signedMin = APInt::getSignedMinValue(d.getBitWidth());
1571   APInt signedMax = APInt::getSignedMaxValue(d.getBitWidth());
1572 
1573   nc = allOnes - (allOnes - d).urem(d);
1574   p = d.getBitWidth() - 1;  // initialize p
1575   q1 = signedMin.udiv(nc);  // initialize q1 = 2p/nc
1576   r1 = signedMin - q1*nc;   // initialize r1 = rem(2p,nc)
1577   q2 = signedMax.udiv(d);   // initialize q2 = (2p-1)/d
1578   r2 = signedMax - q2*d;    // initialize r2 = rem((2p-1),d)
1579   do {
1580     p = p + 1;
1581     if (r1.uge(nc - r1)) {
1582       q1 = q1 + q1 + 1;  // update q1
1583       r1 = r1 + r1 - nc; // update r1
1584     }
1585     else {
1586       q1 = q1+q1; // update q1
1587       r1 = r1+r1; // update r1
1588     }
1589     if ((r2 + 1).uge(d - r2)) {
1590       if (q2.uge(signedMax)) magu.a = 1;
1591       q2 = q2+q2 + 1;     // update q2
1592       r2 = r2+r2 + 1 - d; // update r2
1593     }
1594     else {
1595       if (q2.uge(signedMin)) magu.a = 1;
1596       q2 = q2+q2;     // update q2
1597       r2 = r2+r2 + 1; // update r2
1598     }
1599     delta = d - 1 - r2;
1600   } while (p < d.getBitWidth()*2 &&
1601            (q1.ult(delta) || (q1 == delta && r1 == 0)));
1602   magu.m = q2 + 1; // resulting magic number
1603   magu.s = p - d.getBitWidth();  // resulting shift
1604   return magu;
1605 }
1606 
1607 /// Implementation of Knuth's Algorithm D (Division of nonnegative integers)
1608 /// from "Art of Computer Programming, Volume 2", section 4.3.1, p. 272. The
1609 /// variables here have the same names as in the algorithm. Comments explain
1610 /// the algorithm and any deviation from it.
1611 static void KnuthDiv(unsigned *u, unsigned *v, unsigned *q, unsigned* r,
1612                      unsigned m, unsigned n) {
1613   assert(u && "Must provide dividend");
1614   assert(v && "Must provide divisor");
1615   assert(q && "Must provide quotient");
1616   assert(u != v && u != q && v != q && "Must use different memory");
1617   assert(n>1 && "n must be > 1");
1618 
1619   // b denotes the base of the number system. In our case b is 2^32.
1620   const uint64_t b = uint64_t(1) << 32;
1621 
1622   DEBUG(dbgs() << "KnuthDiv: m=" << m << " n=" << n << '\n');
1623   DEBUG(dbgs() << "KnuthDiv: original:");
1624   DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1625   DEBUG(dbgs() << " by");
1626   DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]);
1627   DEBUG(dbgs() << '\n');
1628   // D1. [Normalize.] Set d = b / (v[n-1] + 1) and multiply all the digits of
1629   // u and v by d. Note that we have taken Knuth's advice here to use a power
1630   // of 2 value for d such that d * v[n-1] >= b/2 (b is the base). A power of
1631   // 2 allows us to shift instead of multiply and it is easy to determine the
1632   // shift amount from the leading zeros.  We are basically normalizing the u
1633   // and v so that its high bits are shifted to the top of v's range without
1634   // overflow. Note that this can require an extra word in u so that u must
1635   // be of length m+n+1.
1636   unsigned shift = countLeadingZeros(v[n-1]);
1637   unsigned v_carry = 0;
1638   unsigned u_carry = 0;
1639   if (shift) {
1640     for (unsigned i = 0; i < m+n; ++i) {
1641       unsigned u_tmp = u[i] >> (32 - shift);
1642       u[i] = (u[i] << shift) | u_carry;
1643       u_carry = u_tmp;
1644     }
1645     for (unsigned i = 0; i < n; ++i) {
1646       unsigned v_tmp = v[i] >> (32 - shift);
1647       v[i] = (v[i] << shift) | v_carry;
1648       v_carry = v_tmp;
1649     }
1650   }
1651   u[m+n] = u_carry;
1652 
1653   DEBUG(dbgs() << "KnuthDiv:   normal:");
1654   DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1655   DEBUG(dbgs() << " by");
1656   DEBUG(for (int i = n; i >0; i--) dbgs() << " " << v[i-1]);
1657   DEBUG(dbgs() << '\n');
1658 
1659   // D2. [Initialize j.]  Set j to m. This is the loop counter over the places.
1660   int j = m;
1661   do {
1662     DEBUG(dbgs() << "KnuthDiv: quotient digit #" << j << '\n');
1663     // D3. [Calculate q'.].
1664     //     Set qp = (u[j+n]*b + u[j+n-1]) / v[n-1]. (qp=qprime=q')
1665     //     Set rp = (u[j+n]*b + u[j+n-1]) % v[n-1]. (rp=rprime=r')
1666     // Now test if qp == b or qp*v[n-2] > b*rp + u[j+n-2]; if so, decrease
1667     // qp by 1, inrease rp by v[n-1], and repeat this test if rp < b. The test
1668     // on v[n-2] determines at high speed most of the cases in which the trial
1669     // value qp is one too large, and it eliminates all cases where qp is two
1670     // too large.
1671     uint64_t dividend = ((uint64_t(u[j+n]) << 32) + u[j+n-1]);
1672     DEBUG(dbgs() << "KnuthDiv: dividend == " << dividend << '\n');
1673     uint64_t qp = dividend / v[n-1];
1674     uint64_t rp = dividend % v[n-1];
1675     if (qp == b || qp*v[n-2] > b*rp + u[j+n-2]) {
1676       qp--;
1677       rp += v[n-1];
1678       if (rp < b && (qp == b || qp*v[n-2] > b*rp + u[j+n-2]))
1679         qp--;
1680     }
1681     DEBUG(dbgs() << "KnuthDiv: qp == " << qp << ", rp == " << rp << '\n');
1682 
1683     // D4. [Multiply and subtract.] Replace (u[j+n]u[j+n-1]...u[j]) with
1684     // (u[j+n]u[j+n-1]..u[j]) - qp * (v[n-1]...v[1]v[0]). This computation
1685     // consists of a simple multiplication by a one-place number, combined with
1686     // a subtraction.
1687     // The digits (u[j+n]...u[j]) should be kept positive; if the result of
1688     // this step is actually negative, (u[j+n]...u[j]) should be left as the
1689     // true value plus b**(n+1), namely as the b's complement of
1690     // the true value, and a "borrow" to the left should be remembered.
1691     int64_t borrow = 0;
1692     for (unsigned i = 0; i < n; ++i) {
1693       uint64_t p = uint64_t(qp) * uint64_t(v[i]);
1694       int64_t subres = int64_t(u[j+i]) - borrow - (unsigned)p;
1695       u[j+i] = (unsigned)subres;
1696       borrow = (p >> 32) - (subres >> 32);
1697       DEBUG(dbgs() << "KnuthDiv: u[j+i] = " << u[j+i]
1698                    << ", borrow = " << borrow << '\n');
1699     }
1700     bool isNeg = u[j+n] < borrow;
1701     u[j+n] -= (unsigned)borrow;
1702 
1703     DEBUG(dbgs() << "KnuthDiv: after subtraction:");
1704     DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1705     DEBUG(dbgs() << '\n');
1706 
1707     // D5. [Test remainder.] Set q[j] = qp. If the result of step D4 was
1708     // negative, go to step D6; otherwise go on to step D7.
1709     q[j] = (unsigned)qp;
1710     if (isNeg) {
1711       // D6. [Add back]. The probability that this step is necessary is very
1712       // small, on the order of only 2/b. Make sure that test data accounts for
1713       // this possibility. Decrease q[j] by 1
1714       q[j]--;
1715       // and add (0v[n-1]...v[1]v[0]) to (u[j+n]u[j+n-1]...u[j+1]u[j]).
1716       // A carry will occur to the left of u[j+n], and it should be ignored
1717       // since it cancels with the borrow that occurred in D4.
1718       bool carry = false;
1719       for (unsigned i = 0; i < n; i++) {
1720         unsigned limit = std::min(u[j+i],v[i]);
1721         u[j+i] += v[i] + carry;
1722         carry = u[j+i] < limit || (carry && u[j+i] == limit);
1723       }
1724       u[j+n] += carry;
1725     }
1726     DEBUG(dbgs() << "KnuthDiv: after correction:");
1727     DEBUG(for (int i = m+n; i >=0; i--) dbgs() << " " << u[i]);
1728     DEBUG(dbgs() << "\nKnuthDiv: digit result = " << q[j] << '\n');
1729 
1730   // D7. [Loop on j.]  Decrease j by one. Now if j >= 0, go back to D3.
1731   } while (--j >= 0);
1732 
1733   DEBUG(dbgs() << "KnuthDiv: quotient:");
1734   DEBUG(for (int i = m; i >=0; i--) dbgs() <<" " << q[i]);
1735   DEBUG(dbgs() << '\n');
1736 
1737   // D8. [Unnormalize]. Now q[...] is the desired quotient, and the desired
1738   // remainder may be obtained by dividing u[...] by d. If r is non-null we
1739   // compute the remainder (urem uses this).
1740   if (r) {
1741     // The value d is expressed by the "shift" value above since we avoided
1742     // multiplication by d by using a shift left. So, all we have to do is
1743     // shift right here.
1744     if (shift) {
1745       unsigned carry = 0;
1746       DEBUG(dbgs() << "KnuthDiv: remainder:");
1747       for (int i = n-1; i >= 0; i--) {
1748         r[i] = (u[i] >> shift) | carry;
1749         carry = u[i] << (32 - shift);
1750         DEBUG(dbgs() << " " << r[i]);
1751       }
1752     } else {
1753       for (int i = n-1; i >= 0; i--) {
1754         r[i] = u[i];
1755         DEBUG(dbgs() << " " << r[i]);
1756       }
1757     }
1758     DEBUG(dbgs() << '\n');
1759   }
1760   DEBUG(dbgs() << '\n');
1761 }
1762 
1763 void APInt::divide(const APInt &LHS, unsigned lhsWords, const APInt &RHS,
1764                    unsigned rhsWords, APInt *Quotient, APInt *Remainder) {
1765   assert(lhsWords >= rhsWords && "Fractional result");
1766 
1767   // First, compose the values into an array of 32-bit words instead of
1768   // 64-bit words. This is a necessity of both the "short division" algorithm
1769   // and the Knuth "classical algorithm" which requires there to be native
1770   // operations for +, -, and * on an m bit value with an m*2 bit result. We
1771   // can't use 64-bit operands here because we don't have native results of
1772   // 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't
1773   // work on large-endian machines.
1774   uint64_t mask = ~0ull >> (sizeof(unsigned)*CHAR_BIT);
1775   unsigned n = rhsWords * 2;
1776   unsigned m = (lhsWords * 2) - n;
1777 
1778   // Allocate space for the temporary values we need either on the stack, if
1779   // it will fit, or on the heap if it won't.
1780   unsigned SPACE[128];
1781   unsigned *U = nullptr;
1782   unsigned *V = nullptr;
1783   unsigned *Q = nullptr;
1784   unsigned *R = nullptr;
1785   if ((Remainder?4:3)*n+2*m+1 <= 128) {
1786     U = &SPACE[0];
1787     V = &SPACE[m+n+1];
1788     Q = &SPACE[(m+n+1) + n];
1789     if (Remainder)
1790       R = &SPACE[(m+n+1) + n + (m+n)];
1791   } else {
1792     U = new unsigned[m + n + 1];
1793     V = new unsigned[n];
1794     Q = new unsigned[m+n];
1795     if (Remainder)
1796       R = new unsigned[n];
1797   }
1798 
1799   // Initialize the dividend
1800   memset(U, 0, (m+n+1)*sizeof(unsigned));
1801   for (unsigned i = 0; i < lhsWords; ++i) {
1802     uint64_t tmp = (LHS.getNumWords() == 1 ? LHS.VAL : LHS.pVal[i]);
1803     U[i * 2] = (unsigned)(tmp & mask);
1804     U[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT));
1805   }
1806   U[m+n] = 0; // this extra word is for "spill" in the Knuth algorithm.
1807 
1808   // Initialize the divisor
1809   memset(V, 0, (n)*sizeof(unsigned));
1810   for (unsigned i = 0; i < rhsWords; ++i) {
1811     uint64_t tmp = (RHS.getNumWords() == 1 ? RHS.VAL : RHS.pVal[i]);
1812     V[i * 2] = (unsigned)(tmp & mask);
1813     V[i * 2 + 1] = (unsigned)(tmp >> (sizeof(unsigned)*CHAR_BIT));
1814   }
1815 
1816   // initialize the quotient and remainder
1817   memset(Q, 0, (m+n) * sizeof(unsigned));
1818   if (Remainder)
1819     memset(R, 0, n * sizeof(unsigned));
1820 
1821   // Now, adjust m and n for the Knuth division. n is the number of words in
1822   // the divisor. m is the number of words by which the dividend exceeds the
1823   // divisor (i.e. m+n is the length of the dividend). These sizes must not
1824   // contain any zero words or the Knuth algorithm fails.
1825   for (unsigned i = n; i > 0 && V[i-1] == 0; i--) {
1826     n--;
1827     m++;
1828   }
1829   for (unsigned i = m+n; i > 0 && U[i-1] == 0; i--)
1830     m--;
1831 
1832   // If we're left with only a single word for the divisor, Knuth doesn't work
1833   // so we implement the short division algorithm here. This is much simpler
1834   // and faster because we are certain that we can divide a 64-bit quantity
1835   // by a 32-bit quantity at hardware speed and short division is simply a
1836   // series of such operations. This is just like doing short division but we
1837   // are using base 2^32 instead of base 10.
1838   assert(n != 0 && "Divide by zero?");
1839   if (n == 1) {
1840     unsigned divisor = V[0];
1841     unsigned remainder = 0;
1842     for (int i = m+n-1; i >= 0; i--) {
1843       uint64_t partial_dividend = uint64_t(remainder) << 32 | U[i];
1844       if (partial_dividend == 0) {
1845         Q[i] = 0;
1846         remainder = 0;
1847       } else if (partial_dividend < divisor) {
1848         Q[i] = 0;
1849         remainder = (unsigned)partial_dividend;
1850       } else if (partial_dividend == divisor) {
1851         Q[i] = 1;
1852         remainder = 0;
1853       } else {
1854         Q[i] = (unsigned)(partial_dividend / divisor);
1855         remainder = (unsigned)(partial_dividend - (Q[i] * divisor));
1856       }
1857     }
1858     if (R)
1859       R[0] = remainder;
1860   } else {
1861     // Now we're ready to invoke the Knuth classical divide algorithm. In this
1862     // case n > 1.
1863     KnuthDiv(U, V, Q, R, m, n);
1864   }
1865 
1866   // If the caller wants the quotient
1867   if (Quotient) {
1868     // Set up the Quotient value's memory.
1869     if (Quotient->BitWidth != LHS.BitWidth) {
1870       if (Quotient->isSingleWord())
1871         Quotient->VAL = 0;
1872       else
1873         delete [] Quotient->pVal;
1874       Quotient->BitWidth = LHS.BitWidth;
1875       if (!Quotient->isSingleWord())
1876         Quotient->pVal = getClearedMemory(Quotient->getNumWords());
1877     } else
1878       Quotient->clearAllBits();
1879 
1880     // The quotient is in Q. Reconstitute the quotient into Quotient's low
1881     // order words.
1882     // This case is currently dead as all users of divide() handle trivial cases
1883     // earlier.
1884     if (lhsWords == 1) {
1885       uint64_t tmp =
1886         uint64_t(Q[0]) | (uint64_t(Q[1]) << (APINT_BITS_PER_WORD / 2));
1887       if (Quotient->isSingleWord())
1888         Quotient->VAL = tmp;
1889       else
1890         Quotient->pVal[0] = tmp;
1891     } else {
1892       assert(!Quotient->isSingleWord() && "Quotient APInt not large enough");
1893       for (unsigned i = 0; i < lhsWords; ++i)
1894         Quotient->pVal[i] =
1895           uint64_t(Q[i*2]) | (uint64_t(Q[i*2+1]) << (APINT_BITS_PER_WORD / 2));
1896     }
1897   }
1898 
1899   // If the caller wants the remainder
1900   if (Remainder) {
1901     // Set up the Remainder value's memory.
1902     if (Remainder->BitWidth != RHS.BitWidth) {
1903       if (Remainder->isSingleWord())
1904         Remainder->VAL = 0;
1905       else
1906         delete [] Remainder->pVal;
1907       Remainder->BitWidth = RHS.BitWidth;
1908       if (!Remainder->isSingleWord())
1909         Remainder->pVal = getClearedMemory(Remainder->getNumWords());
1910     } else
1911       Remainder->clearAllBits();
1912 
1913     // The remainder is in R. Reconstitute the remainder into Remainder's low
1914     // order words.
1915     if (rhsWords == 1) {
1916       uint64_t tmp =
1917         uint64_t(R[0]) | (uint64_t(R[1]) << (APINT_BITS_PER_WORD / 2));
1918       if (Remainder->isSingleWord())
1919         Remainder->VAL = tmp;
1920       else
1921         Remainder->pVal[0] = tmp;
1922     } else {
1923       assert(!Remainder->isSingleWord() && "Remainder APInt not large enough");
1924       for (unsigned i = 0; i < rhsWords; ++i)
1925         Remainder->pVal[i] =
1926           uint64_t(R[i*2]) | (uint64_t(R[i*2+1]) << (APINT_BITS_PER_WORD / 2));
1927     }
1928   }
1929 
1930   // Clean up the memory we allocated.
1931   if (U != &SPACE[0]) {
1932     delete [] U;
1933     delete [] V;
1934     delete [] Q;
1935     delete [] R;
1936   }
1937 }
1938 
1939 APInt APInt::udiv(const APInt& RHS) const {
1940   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
1941 
1942   // First, deal with the easy case
1943   if (isSingleWord()) {
1944     assert(RHS.VAL != 0 && "Divide by zero?");
1945     return APInt(BitWidth, VAL / RHS.VAL);
1946   }
1947 
1948   // Get some facts about the LHS and RHS number of bits and words
1949   unsigned rhsBits = RHS.getActiveBits();
1950   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
1951   assert(rhsWords && "Divided by zero???");
1952   unsigned lhsBits = this->getActiveBits();
1953   unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1);
1954 
1955   // Deal with some degenerate cases
1956   if (!lhsWords)
1957     // 0 / X ===> 0
1958     return APInt(BitWidth, 0);
1959   else if (lhsWords < rhsWords || this->ult(RHS)) {
1960     // X / Y ===> 0, iff X < Y
1961     return APInt(BitWidth, 0);
1962   } else if (*this == RHS) {
1963     // X / X ===> 1
1964     return APInt(BitWidth, 1);
1965   } else if (lhsWords == 1 && rhsWords == 1) {
1966     // All high words are zero, just use native divide
1967     return APInt(BitWidth, this->pVal[0] / RHS.pVal[0]);
1968   }
1969 
1970   // We have to compute it the hard way. Invoke the Knuth divide algorithm.
1971   APInt Quotient(1,0); // to hold result.
1972   divide(*this, lhsWords, RHS, rhsWords, &Quotient, nullptr);
1973   return Quotient;
1974 }
1975 
1976 APInt APInt::sdiv(const APInt &RHS) const {
1977   if (isNegative()) {
1978     if (RHS.isNegative())
1979       return (-(*this)).udiv(-RHS);
1980     return -((-(*this)).udiv(RHS));
1981   }
1982   if (RHS.isNegative())
1983     return -(this->udiv(-RHS));
1984   return this->udiv(RHS);
1985 }
1986 
1987 APInt APInt::urem(const APInt& RHS) const {
1988   assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
1989   if (isSingleWord()) {
1990     assert(RHS.VAL != 0 && "Remainder by zero?");
1991     return APInt(BitWidth, VAL % RHS.VAL);
1992   }
1993 
1994   // Get some facts about the LHS
1995   unsigned lhsBits = getActiveBits();
1996   unsigned lhsWords = !lhsBits ? 0 : (whichWord(lhsBits - 1) + 1);
1997 
1998   // Get some facts about the RHS
1999   unsigned rhsBits = RHS.getActiveBits();
2000   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
2001   assert(rhsWords && "Performing remainder operation by zero ???");
2002 
2003   // Check the degenerate cases
2004   if (lhsWords == 0) {
2005     // 0 % Y ===> 0
2006     return APInt(BitWidth, 0);
2007   } else if (lhsWords < rhsWords || this->ult(RHS)) {
2008     // X % Y ===> X, iff X < Y
2009     return *this;
2010   } else if (*this == RHS) {
2011     // X % X == 0;
2012     return APInt(BitWidth, 0);
2013   } else if (lhsWords == 1) {
2014     // All high words are zero, just use native remainder
2015     return APInt(BitWidth, pVal[0] % RHS.pVal[0]);
2016   }
2017 
2018   // We have to compute it the hard way. Invoke the Knuth divide algorithm.
2019   APInt Remainder(1,0);
2020   divide(*this, lhsWords, RHS, rhsWords, nullptr, &Remainder);
2021   return Remainder;
2022 }
2023 
2024 APInt APInt::srem(const APInt &RHS) const {
2025   if (isNegative()) {
2026     if (RHS.isNegative())
2027       return -((-(*this)).urem(-RHS));
2028     return -((-(*this)).urem(RHS));
2029   }
2030   if (RHS.isNegative())
2031     return this->urem(-RHS);
2032   return this->urem(RHS);
2033 }
2034 
2035 void APInt::udivrem(const APInt &LHS, const APInt &RHS,
2036                     APInt &Quotient, APInt &Remainder) {
2037   assert(LHS.BitWidth == RHS.BitWidth && "Bit widths must be the same");
2038 
2039   // First, deal with the easy case
2040   if (LHS.isSingleWord()) {
2041     assert(RHS.VAL != 0 && "Divide by zero?");
2042     uint64_t QuotVal = LHS.VAL / RHS.VAL;
2043     uint64_t RemVal = LHS.VAL % RHS.VAL;
2044     Quotient = APInt(LHS.BitWidth, QuotVal);
2045     Remainder = APInt(LHS.BitWidth, RemVal);
2046     return;
2047   }
2048 
2049   // Get some size facts about the dividend and divisor
2050   unsigned lhsBits  = LHS.getActiveBits();
2051   unsigned lhsWords = !lhsBits ? 0 : (APInt::whichWord(lhsBits - 1) + 1);
2052   unsigned rhsBits  = RHS.getActiveBits();
2053   unsigned rhsWords = !rhsBits ? 0 : (APInt::whichWord(rhsBits - 1) + 1);
2054 
2055   // Check the degenerate cases
2056   if (lhsWords == 0) {
2057     Quotient = 0;                // 0 / Y ===> 0
2058     Remainder = 0;               // 0 % Y ===> 0
2059     return;
2060   }
2061 
2062   if (lhsWords < rhsWords || LHS.ult(RHS)) {
2063     Remainder = LHS;            // X % Y ===> X, iff X < Y
2064     Quotient = 0;               // X / Y ===> 0, iff X < Y
2065     return;
2066   }
2067 
2068   if (LHS == RHS) {
2069     Quotient  = 1;              // X / X ===> 1
2070     Remainder = 0;              // X % X ===> 0;
2071     return;
2072   }
2073 
2074   if (lhsWords == 1 && rhsWords == 1) {
2075     // There is only one word to consider so use the native versions.
2076     uint64_t lhsValue = LHS.isSingleWord() ? LHS.VAL : LHS.pVal[0];
2077     uint64_t rhsValue = RHS.isSingleWord() ? RHS.VAL : RHS.pVal[0];
2078     Quotient = APInt(LHS.getBitWidth(), lhsValue / rhsValue);
2079     Remainder = APInt(LHS.getBitWidth(), lhsValue % rhsValue);
2080     return;
2081   }
2082 
2083   // Okay, lets do it the long way
2084   divide(LHS, lhsWords, RHS, rhsWords, &Quotient, &Remainder);
2085 }
2086 
2087 void APInt::sdivrem(const APInt &LHS, const APInt &RHS,
2088                     APInt &Quotient, APInt &Remainder) {
2089   if (LHS.isNegative()) {
2090     if (RHS.isNegative())
2091       APInt::udivrem(-LHS, -RHS, Quotient, Remainder);
2092     else {
2093       APInt::udivrem(-LHS, RHS, Quotient, Remainder);
2094       Quotient = -Quotient;
2095     }
2096     Remainder = -Remainder;
2097   } else if (RHS.isNegative()) {
2098     APInt::udivrem(LHS, -RHS, Quotient, Remainder);
2099     Quotient = -Quotient;
2100   } else {
2101     APInt::udivrem(LHS, RHS, Quotient, Remainder);
2102   }
2103 }
2104 
2105 APInt APInt::sadd_ov(const APInt &RHS, bool &Overflow) const {
2106   APInt Res = *this+RHS;
2107   Overflow = isNonNegative() == RHS.isNonNegative() &&
2108              Res.isNonNegative() != isNonNegative();
2109   return Res;
2110 }
2111 
2112 APInt APInt::uadd_ov(const APInt &RHS, bool &Overflow) const {
2113   APInt Res = *this+RHS;
2114   Overflow = Res.ult(RHS);
2115   return Res;
2116 }
2117 
2118 APInt APInt::ssub_ov(const APInt &RHS, bool &Overflow) const {
2119   APInt Res = *this - RHS;
2120   Overflow = isNonNegative() != RHS.isNonNegative() &&
2121              Res.isNonNegative() != isNonNegative();
2122   return Res;
2123 }
2124 
2125 APInt APInt::usub_ov(const APInt &RHS, bool &Overflow) const {
2126   APInt Res = *this-RHS;
2127   Overflow = Res.ugt(*this);
2128   return Res;
2129 }
2130 
2131 APInt APInt::sdiv_ov(const APInt &RHS, bool &Overflow) const {
2132   // MININT/-1  -->  overflow.
2133   Overflow = isMinSignedValue() && RHS.isAllOnesValue();
2134   return sdiv(RHS);
2135 }
2136 
2137 APInt APInt::smul_ov(const APInt &RHS, bool &Overflow) const {
2138   APInt Res = *this * RHS;
2139 
2140   if (*this != 0 && RHS != 0)
2141     Overflow = Res.sdiv(RHS) != *this || Res.sdiv(*this) != RHS;
2142   else
2143     Overflow = false;
2144   return Res;
2145 }
2146 
2147 APInt APInt::umul_ov(const APInt &RHS, bool &Overflow) const {
2148   APInt Res = *this * RHS;
2149 
2150   if (*this != 0 && RHS != 0)
2151     Overflow = Res.udiv(RHS) != *this || Res.udiv(*this) != RHS;
2152   else
2153     Overflow = false;
2154   return Res;
2155 }
2156 
2157 APInt APInt::sshl_ov(const APInt &ShAmt, bool &Overflow) const {
2158   Overflow = ShAmt.uge(getBitWidth());
2159   if (Overflow)
2160     return APInt(BitWidth, 0);
2161 
2162   if (isNonNegative()) // Don't allow sign change.
2163     Overflow = ShAmt.uge(countLeadingZeros());
2164   else
2165     Overflow = ShAmt.uge(countLeadingOnes());
2166 
2167   return *this << ShAmt;
2168 }
2169 
2170 APInt APInt::ushl_ov(const APInt &ShAmt, bool &Overflow) const {
2171   Overflow = ShAmt.uge(getBitWidth());
2172   if (Overflow)
2173     return APInt(BitWidth, 0);
2174 
2175   Overflow = ShAmt.ugt(countLeadingZeros());
2176 
2177   return *this << ShAmt;
2178 }
2179 
2180 
2181 
2182 
2183 void APInt::fromString(unsigned numbits, StringRef str, uint8_t radix) {
2184   // Check our assumptions here
2185   assert(!str.empty() && "Invalid string length");
2186   assert((radix == 10 || radix == 8 || radix == 16 || radix == 2 ||
2187           radix == 36) &&
2188          "Radix should be 2, 8, 10, 16, or 36!");
2189 
2190   StringRef::iterator p = str.begin();
2191   size_t slen = str.size();
2192   bool isNeg = *p == '-';
2193   if (*p == '-' || *p == '+') {
2194     p++;
2195     slen--;
2196     assert(slen && "String is only a sign, needs a value.");
2197   }
2198   assert((slen <= numbits || radix != 2) && "Insufficient bit width");
2199   assert(((slen-1)*3 <= numbits || radix != 8) && "Insufficient bit width");
2200   assert(((slen-1)*4 <= numbits || radix != 16) && "Insufficient bit width");
2201   assert((((slen-1)*64)/22 <= numbits || radix != 10) &&
2202          "Insufficient bit width");
2203 
2204   // Allocate memory
2205   if (!isSingleWord())
2206     pVal = getClearedMemory(getNumWords());
2207 
2208   // Figure out if we can shift instead of multiply
2209   unsigned shift = (radix == 16 ? 4 : radix == 8 ? 3 : radix == 2 ? 1 : 0);
2210 
2211   // Set up an APInt for the digit to add outside the loop so we don't
2212   // constantly construct/destruct it.
2213   APInt apdigit(getBitWidth(), 0);
2214   APInt apradix(getBitWidth(), radix);
2215 
2216   // Enter digit traversal loop
2217   for (StringRef::iterator e = str.end(); p != e; ++p) {
2218     unsigned digit = getDigit(*p, radix);
2219     assert(digit < radix && "Invalid character in digit string");
2220 
2221     // Shift or multiply the value by the radix
2222     if (slen > 1) {
2223       if (shift)
2224         *this <<= shift;
2225       else
2226         *this *= apradix;
2227     }
2228 
2229     // Add in the digit we just interpreted
2230     if (apdigit.isSingleWord())
2231       apdigit.VAL = digit;
2232     else
2233       apdigit.pVal[0] = digit;
2234     *this += apdigit;
2235   }
2236   // If its negative, put it in two's complement form
2237   if (isNeg) {
2238     --(*this);
2239     this->flipAllBits();
2240   }
2241 }
2242 
2243 void APInt::toString(SmallVectorImpl<char> &Str, unsigned Radix,
2244                      bool Signed, bool formatAsCLiteral) const {
2245   assert((Radix == 10 || Radix == 8 || Radix == 16 || Radix == 2 ||
2246           Radix == 36) &&
2247          "Radix should be 2, 8, 10, 16, or 36!");
2248 
2249   const char *Prefix = "";
2250   if (formatAsCLiteral) {
2251     switch (Radix) {
2252       case 2:
2253         // Binary literals are a non-standard extension added in gcc 4.3:
2254         // http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Binary-constants.html
2255         Prefix = "0b";
2256         break;
2257       case 8:
2258         Prefix = "0";
2259         break;
2260       case 10:
2261         break; // No prefix
2262       case 16:
2263         Prefix = "0x";
2264         break;
2265       default:
2266         llvm_unreachable("Invalid radix!");
2267     }
2268   }
2269 
2270   // First, check for a zero value and just short circuit the logic below.
2271   if (*this == 0) {
2272     while (*Prefix) {
2273       Str.push_back(*Prefix);
2274       ++Prefix;
2275     };
2276     Str.push_back('0');
2277     return;
2278   }
2279 
2280   static const char Digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
2281 
2282   if (isSingleWord()) {
2283     char Buffer[65];
2284     char *BufPtr = Buffer+65;
2285 
2286     uint64_t N;
2287     if (!Signed) {
2288       N = getZExtValue();
2289     } else {
2290       int64_t I = getSExtValue();
2291       if (I >= 0) {
2292         N = I;
2293       } else {
2294         Str.push_back('-');
2295         N = -(uint64_t)I;
2296       }
2297     }
2298 
2299     while (*Prefix) {
2300       Str.push_back(*Prefix);
2301       ++Prefix;
2302     };
2303 
2304     while (N) {
2305       *--BufPtr = Digits[N % Radix];
2306       N /= Radix;
2307     }
2308     Str.append(BufPtr, Buffer+65);
2309     return;
2310   }
2311 
2312   APInt Tmp(*this);
2313 
2314   if (Signed && isNegative()) {
2315     // They want to print the signed version and it is a negative value
2316     // Flip the bits and add one to turn it into the equivalent positive
2317     // value and put a '-' in the result.
2318     Tmp.flipAllBits();
2319     ++Tmp;
2320     Str.push_back('-');
2321   }
2322 
2323   while (*Prefix) {
2324     Str.push_back(*Prefix);
2325     ++Prefix;
2326   };
2327 
2328   // We insert the digits backward, then reverse them to get the right order.
2329   unsigned StartDig = Str.size();
2330 
2331   // For the 2, 8 and 16 bit cases, we can just shift instead of divide
2332   // because the number of bits per digit (1, 3 and 4 respectively) divides
2333   // equaly.  We just shift until the value is zero.
2334   if (Radix == 2 || Radix == 8 || Radix == 16) {
2335     // Just shift tmp right for each digit width until it becomes zero
2336     unsigned ShiftAmt = (Radix == 16 ? 4 : (Radix == 8 ? 3 : 1));
2337     unsigned MaskAmt = Radix - 1;
2338 
2339     while (Tmp != 0) {
2340       unsigned Digit = unsigned(Tmp.getRawData()[0]) & MaskAmt;
2341       Str.push_back(Digits[Digit]);
2342       Tmp = Tmp.lshr(ShiftAmt);
2343     }
2344   } else {
2345     APInt divisor(Radix == 10? 4 : 8, Radix);
2346     while (Tmp != 0) {
2347       APInt APdigit(1, 0);
2348       APInt tmp2(Tmp.getBitWidth(), 0);
2349       divide(Tmp, Tmp.getNumWords(), divisor, divisor.getNumWords(), &tmp2,
2350              &APdigit);
2351       unsigned Digit = (unsigned)APdigit.getZExtValue();
2352       assert(Digit < Radix && "divide failed");
2353       Str.push_back(Digits[Digit]);
2354       Tmp = tmp2;
2355     }
2356   }
2357 
2358   // Reverse the digits before returning.
2359   std::reverse(Str.begin()+StartDig, Str.end());
2360 }
2361 
2362 /// Returns the APInt as a std::string. Note that this is an inefficient method.
2363 /// It is better to pass in a SmallVector/SmallString to the methods above.
2364 std::string APInt::toString(unsigned Radix = 10, bool Signed = true) const {
2365   SmallString<40> S;
2366   toString(S, Radix, Signed, /* formatAsCLiteral = */false);
2367   return S.str();
2368 }
2369 
2370 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
2371 LLVM_DUMP_METHOD void APInt::dump() const {
2372   SmallString<40> S, U;
2373   this->toStringUnsigned(U);
2374   this->toStringSigned(S);
2375   dbgs() << "APInt(" << BitWidth << "b, "
2376          << U << "u " << S << "s)\n";
2377 }
2378 #endif
2379 
2380 void APInt::print(raw_ostream &OS, bool isSigned) const {
2381   SmallString<40> S;
2382   this->toString(S, 10, isSigned, /* formatAsCLiteral = */false);
2383   OS << S;
2384 }
2385 
2386 // This implements a variety of operations on a representation of
2387 // arbitrary precision, two's-complement, bignum integer values.
2388 
2389 // Assumed by lowHalf, highHalf, partMSB and partLSB.  A fairly safe
2390 // and unrestricting assumption.
2391 static_assert(integerPartWidth % 2 == 0, "Part width must be divisible by 2!");
2392 
2393 /* Some handy functions local to this file.  */
2394 namespace {
2395 
2396   /* Returns the integer part with the least significant BITS set.
2397      BITS cannot be zero.  */
2398   static inline integerPart
2399   lowBitMask(unsigned int bits)
2400   {
2401     assert(bits != 0 && bits <= integerPartWidth);
2402 
2403     return ~(integerPart) 0 >> (integerPartWidth - bits);
2404   }
2405 
2406   /* Returns the value of the lower half of PART.  */
2407   static inline integerPart
2408   lowHalf(integerPart part)
2409   {
2410     return part & lowBitMask(integerPartWidth / 2);
2411   }
2412 
2413   /* Returns the value of the upper half of PART.  */
2414   static inline integerPart
2415   highHalf(integerPart part)
2416   {
2417     return part >> (integerPartWidth / 2);
2418   }
2419 
2420   /* Returns the bit number of the most significant set bit of a part.
2421      If the input number has no bits set -1U is returned.  */
2422   static unsigned int
2423   partMSB(integerPart value)
2424   {
2425     return findLastSet(value, ZB_Max);
2426   }
2427 
2428   /* Returns the bit number of the least significant set bit of a
2429      part.  If the input number has no bits set -1U is returned.  */
2430   static unsigned int
2431   partLSB(integerPart value)
2432   {
2433     return findFirstSet(value, ZB_Max);
2434   }
2435 }
2436 
2437 /* Sets the least significant part of a bignum to the input value, and
2438    zeroes out higher parts.  */
2439 void
2440 APInt::tcSet(integerPart *dst, integerPart part, unsigned int parts)
2441 {
2442   unsigned int i;
2443 
2444   assert(parts > 0);
2445 
2446   dst[0] = part;
2447   for (i = 1; i < parts; i++)
2448     dst[i] = 0;
2449 }
2450 
2451 /* Assign one bignum to another.  */
2452 void
2453 APInt::tcAssign(integerPart *dst, const integerPart *src, unsigned int parts)
2454 {
2455   unsigned int i;
2456 
2457   for (i = 0; i < parts; i++)
2458     dst[i] = src[i];
2459 }
2460 
2461 /* Returns true if a bignum is zero, false otherwise.  */
2462 bool
2463 APInt::tcIsZero(const integerPart *src, unsigned int parts)
2464 {
2465   unsigned int i;
2466 
2467   for (i = 0; i < parts; i++)
2468     if (src[i])
2469       return false;
2470 
2471   return true;
2472 }
2473 
2474 /* Extract the given bit of a bignum; returns 0 or 1.  */
2475 int
2476 APInt::tcExtractBit(const integerPart *parts, unsigned int bit)
2477 {
2478   return (parts[bit / integerPartWidth] &
2479           ((integerPart) 1 << bit % integerPartWidth)) != 0;
2480 }
2481 
2482 /* Set the given bit of a bignum. */
2483 void
2484 APInt::tcSetBit(integerPart *parts, unsigned int bit)
2485 {
2486   parts[bit / integerPartWidth] |= (integerPart) 1 << (bit % integerPartWidth);
2487 }
2488 
2489 /* Clears the given bit of a bignum. */
2490 void
2491 APInt::tcClearBit(integerPart *parts, unsigned int bit)
2492 {
2493   parts[bit / integerPartWidth] &=
2494     ~((integerPart) 1 << (bit % integerPartWidth));
2495 }
2496 
2497 /* Returns the bit number of the least significant set bit of a
2498    number.  If the input number has no bits set -1U is returned.  */
2499 unsigned int
2500 APInt::tcLSB(const integerPart *parts, unsigned int n)
2501 {
2502   unsigned int i, lsb;
2503 
2504   for (i = 0; i < n; i++) {
2505       if (parts[i] != 0) {
2506           lsb = partLSB(parts[i]);
2507 
2508           return lsb + i * integerPartWidth;
2509       }
2510   }
2511 
2512   return -1U;
2513 }
2514 
2515 /* Returns the bit number of the most significant set bit of a number.
2516    If the input number has no bits set -1U is returned.  */
2517 unsigned int
2518 APInt::tcMSB(const integerPart *parts, unsigned int n)
2519 {
2520   unsigned int msb;
2521 
2522   do {
2523     --n;
2524 
2525     if (parts[n] != 0) {
2526       msb = partMSB(parts[n]);
2527 
2528       return msb + n * integerPartWidth;
2529     }
2530   } while (n);
2531 
2532   return -1U;
2533 }
2534 
2535 /* Copy the bit vector of width srcBITS from SRC, starting at bit
2536    srcLSB, to DST, of dstCOUNT parts, such that the bit srcLSB becomes
2537    the least significant bit of DST.  All high bits above srcBITS in
2538    DST are zero-filled.  */
2539 void
2540 APInt::tcExtract(integerPart *dst, unsigned int dstCount,const integerPart *src,
2541                  unsigned int srcBits, unsigned int srcLSB)
2542 {
2543   unsigned int firstSrcPart, dstParts, shift, n;
2544 
2545   dstParts = (srcBits + integerPartWidth - 1) / integerPartWidth;
2546   assert(dstParts <= dstCount);
2547 
2548   firstSrcPart = srcLSB / integerPartWidth;
2549   tcAssign (dst, src + firstSrcPart, dstParts);
2550 
2551   shift = srcLSB % integerPartWidth;
2552   tcShiftRight (dst, dstParts, shift);
2553 
2554   /* We now have (dstParts * integerPartWidth - shift) bits from SRC
2555      in DST.  If this is less that srcBits, append the rest, else
2556      clear the high bits.  */
2557   n = dstParts * integerPartWidth - shift;
2558   if (n < srcBits) {
2559     integerPart mask = lowBitMask (srcBits - n);
2560     dst[dstParts - 1] |= ((src[firstSrcPart + dstParts] & mask)
2561                           << n % integerPartWidth);
2562   } else if (n > srcBits) {
2563     if (srcBits % integerPartWidth)
2564       dst[dstParts - 1] &= lowBitMask (srcBits % integerPartWidth);
2565   }
2566 
2567   /* Clear high parts.  */
2568   while (dstParts < dstCount)
2569     dst[dstParts++] = 0;
2570 }
2571 
2572 /* DST += RHS + C where C is zero or one.  Returns the carry flag.  */
2573 integerPart
2574 APInt::tcAdd(integerPart *dst, const integerPart *rhs,
2575              integerPart c, unsigned int parts)
2576 {
2577   unsigned int i;
2578 
2579   assert(c <= 1);
2580 
2581   for (i = 0; i < parts; i++) {
2582     integerPart l;
2583 
2584     l = dst[i];
2585     if (c) {
2586       dst[i] += rhs[i] + 1;
2587       c = (dst[i] <= l);
2588     } else {
2589       dst[i] += rhs[i];
2590       c = (dst[i] < l);
2591     }
2592   }
2593 
2594   return c;
2595 }
2596 
2597 /* DST -= RHS + C where C is zero or one.  Returns the carry flag.  */
2598 integerPart
2599 APInt::tcSubtract(integerPart *dst, const integerPart *rhs,
2600                   integerPart c, unsigned int parts)
2601 {
2602   unsigned int i;
2603 
2604   assert(c <= 1);
2605 
2606   for (i = 0; i < parts; i++) {
2607     integerPart l;
2608 
2609     l = dst[i];
2610     if (c) {
2611       dst[i] -= rhs[i] + 1;
2612       c = (dst[i] >= l);
2613     } else {
2614       dst[i] -= rhs[i];
2615       c = (dst[i] > l);
2616     }
2617   }
2618 
2619   return c;
2620 }
2621 
2622 /* Negate a bignum in-place.  */
2623 void
2624 APInt::tcNegate(integerPart *dst, unsigned int parts)
2625 {
2626   tcComplement(dst, parts);
2627   tcIncrement(dst, parts);
2628 }
2629 
2630 /*  DST += SRC * MULTIPLIER + CARRY   if add is true
2631     DST  = SRC * MULTIPLIER + CARRY   if add is false
2632 
2633     Requires 0 <= DSTPARTS <= SRCPARTS + 1.  If DST overlaps SRC
2634     they must start at the same point, i.e. DST == SRC.
2635 
2636     If DSTPARTS == SRCPARTS + 1 no overflow occurs and zero is
2637     returned.  Otherwise DST is filled with the least significant
2638     DSTPARTS parts of the result, and if all of the omitted higher
2639     parts were zero return zero, otherwise overflow occurred and
2640     return one.  */
2641 int
2642 APInt::tcMultiplyPart(integerPart *dst, const integerPart *src,
2643                       integerPart multiplier, integerPart carry,
2644                       unsigned int srcParts, unsigned int dstParts,
2645                       bool add)
2646 {
2647   unsigned int i, n;
2648 
2649   /* Otherwise our writes of DST kill our later reads of SRC.  */
2650   assert(dst <= src || dst >= src + srcParts);
2651   assert(dstParts <= srcParts + 1);
2652 
2653   /* N loops; minimum of dstParts and srcParts.  */
2654   n = dstParts < srcParts ? dstParts: srcParts;
2655 
2656   for (i = 0; i < n; i++) {
2657     integerPart low, mid, high, srcPart;
2658 
2659       /* [ LOW, HIGH ] = MULTIPLIER * SRC[i] + DST[i] + CARRY.
2660 
2661          This cannot overflow, because
2662 
2663          (n - 1) * (n - 1) + 2 (n - 1) = (n - 1) * (n + 1)
2664 
2665          which is less than n^2.  */
2666 
2667     srcPart = src[i];
2668 
2669     if (multiplier == 0 || srcPart == 0)        {
2670       low = carry;
2671       high = 0;
2672     } else {
2673       low = lowHalf(srcPart) * lowHalf(multiplier);
2674       high = highHalf(srcPart) * highHalf(multiplier);
2675 
2676       mid = lowHalf(srcPart) * highHalf(multiplier);
2677       high += highHalf(mid);
2678       mid <<= integerPartWidth / 2;
2679       if (low + mid < low)
2680         high++;
2681       low += mid;
2682 
2683       mid = highHalf(srcPart) * lowHalf(multiplier);
2684       high += highHalf(mid);
2685       mid <<= integerPartWidth / 2;
2686       if (low + mid < low)
2687         high++;
2688       low += mid;
2689 
2690       /* Now add carry.  */
2691       if (low + carry < low)
2692         high++;
2693       low += carry;
2694     }
2695 
2696     if (add) {
2697       /* And now DST[i], and store the new low part there.  */
2698       if (low + dst[i] < low)
2699         high++;
2700       dst[i] += low;
2701     } else
2702       dst[i] = low;
2703 
2704     carry = high;
2705   }
2706 
2707   if (i < dstParts) {
2708     /* Full multiplication, there is no overflow.  */
2709     assert(i + 1 == dstParts);
2710     dst[i] = carry;
2711     return 0;
2712   } else {
2713     /* We overflowed if there is carry.  */
2714     if (carry)
2715       return 1;
2716 
2717     /* We would overflow if any significant unwritten parts would be
2718        non-zero.  This is true if any remaining src parts are non-zero
2719        and the multiplier is non-zero.  */
2720     if (multiplier)
2721       for (; i < srcParts; i++)
2722         if (src[i])
2723           return 1;
2724 
2725     /* We fitted in the narrow destination.  */
2726     return 0;
2727   }
2728 }
2729 
2730 /* DST = LHS * RHS, where DST has the same width as the operands and
2731    is filled with the least significant parts of the result.  Returns
2732    one if overflow occurred, otherwise zero.  DST must be disjoint
2733    from both operands.  */
2734 int
2735 APInt::tcMultiply(integerPart *dst, const integerPart *lhs,
2736                   const integerPart *rhs, unsigned int parts)
2737 {
2738   unsigned int i;
2739   int overflow;
2740 
2741   assert(dst != lhs && dst != rhs);
2742 
2743   overflow = 0;
2744   tcSet(dst, 0, parts);
2745 
2746   for (i = 0; i < parts; i++)
2747     overflow |= tcMultiplyPart(&dst[i], lhs, rhs[i], 0, parts,
2748                                parts - i, true);
2749 
2750   return overflow;
2751 }
2752 
2753 /* DST = LHS * RHS, where DST has width the sum of the widths of the
2754    operands.  No overflow occurs.  DST must be disjoint from both
2755    operands.  Returns the number of parts required to hold the
2756    result.  */
2757 unsigned int
2758 APInt::tcFullMultiply(integerPart *dst, const integerPart *lhs,
2759                       const integerPart *rhs, unsigned int lhsParts,
2760                       unsigned int rhsParts)
2761 {
2762   /* Put the narrower number on the LHS for less loops below.  */
2763   if (lhsParts > rhsParts) {
2764     return tcFullMultiply (dst, rhs, lhs, rhsParts, lhsParts);
2765   } else {
2766     unsigned int n;
2767 
2768     assert(dst != lhs && dst != rhs);
2769 
2770     tcSet(dst, 0, rhsParts);
2771 
2772     for (n = 0; n < lhsParts; n++)
2773       tcMultiplyPart(&dst[n], rhs, lhs[n], 0, rhsParts, rhsParts + 1, true);
2774 
2775     n = lhsParts + rhsParts;
2776 
2777     return n - (dst[n - 1] == 0);
2778   }
2779 }
2780 
2781 /* If RHS is zero LHS and REMAINDER are left unchanged, return one.
2782    Otherwise set LHS to LHS / RHS with the fractional part discarded,
2783    set REMAINDER to the remainder, return zero.  i.e.
2784 
2785    OLD_LHS = RHS * LHS + REMAINDER
2786 
2787    SCRATCH is a bignum of the same size as the operands and result for
2788    use by the routine; its contents need not be initialized and are
2789    destroyed.  LHS, REMAINDER and SCRATCH must be distinct.
2790 */
2791 int
2792 APInt::tcDivide(integerPart *lhs, const integerPart *rhs,
2793                 integerPart *remainder, integerPart *srhs,
2794                 unsigned int parts)
2795 {
2796   unsigned int n, shiftCount;
2797   integerPart mask;
2798 
2799   assert(lhs != remainder && lhs != srhs && remainder != srhs);
2800 
2801   shiftCount = tcMSB(rhs, parts) + 1;
2802   if (shiftCount == 0)
2803     return true;
2804 
2805   shiftCount = parts * integerPartWidth - shiftCount;
2806   n = shiftCount / integerPartWidth;
2807   mask = (integerPart) 1 << (shiftCount % integerPartWidth);
2808 
2809   tcAssign(srhs, rhs, parts);
2810   tcShiftLeft(srhs, parts, shiftCount);
2811   tcAssign(remainder, lhs, parts);
2812   tcSet(lhs, 0, parts);
2813 
2814   /* Loop, subtracting SRHS if REMAINDER is greater and adding that to
2815      the total.  */
2816   for (;;) {
2817       int compare;
2818 
2819       compare = tcCompare(remainder, srhs, parts);
2820       if (compare >= 0) {
2821         tcSubtract(remainder, srhs, 0, parts);
2822         lhs[n] |= mask;
2823       }
2824 
2825       if (shiftCount == 0)
2826         break;
2827       shiftCount--;
2828       tcShiftRight(srhs, parts, 1);
2829       if ((mask >>= 1) == 0) {
2830         mask = (integerPart) 1 << (integerPartWidth - 1);
2831         n--;
2832       }
2833   }
2834 
2835   return false;
2836 }
2837 
2838 /* Shift a bignum left COUNT bits in-place.  Shifted in bits are zero.
2839    There are no restrictions on COUNT.  */
2840 void
2841 APInt::tcShiftLeft(integerPart *dst, unsigned int parts, unsigned int count)
2842 {
2843   if (count) {
2844     unsigned int jump, shift;
2845 
2846     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2847     jump = count / integerPartWidth;
2848     shift = count % integerPartWidth;
2849 
2850     while (parts > jump) {
2851       integerPart part;
2852 
2853       parts--;
2854 
2855       /* dst[i] comes from the two parts src[i - jump] and, if we have
2856          an intra-part shift, src[i - jump - 1].  */
2857       part = dst[parts - jump];
2858       if (shift) {
2859         part <<= shift;
2860         if (parts >= jump + 1)
2861           part |= dst[parts - jump - 1] >> (integerPartWidth - shift);
2862       }
2863 
2864       dst[parts] = part;
2865     }
2866 
2867     while (parts > 0)
2868       dst[--parts] = 0;
2869   }
2870 }
2871 
2872 /* Shift a bignum right COUNT bits in-place.  Shifted in bits are
2873    zero.  There are no restrictions on COUNT.  */
2874 void
2875 APInt::tcShiftRight(integerPart *dst, unsigned int parts, unsigned int count)
2876 {
2877   if (count) {
2878     unsigned int i, jump, shift;
2879 
2880     /* Jump is the inter-part jump; shift is is intra-part shift.  */
2881     jump = count / integerPartWidth;
2882     shift = count % integerPartWidth;
2883 
2884     /* Perform the shift.  This leaves the most significant COUNT bits
2885        of the result at zero.  */
2886     for (i = 0; i < parts; i++) {
2887       integerPart part;
2888 
2889       if (i + jump >= parts) {
2890         part = 0;
2891       } else {
2892         part = dst[i + jump];
2893         if (shift) {
2894           part >>= shift;
2895           if (i + jump + 1 < parts)
2896             part |= dst[i + jump + 1] << (integerPartWidth - shift);
2897         }
2898       }
2899 
2900       dst[i] = part;
2901     }
2902   }
2903 }
2904 
2905 /* Bitwise and of two bignums.  */
2906 void
2907 APInt::tcAnd(integerPart *dst, const integerPart *rhs, unsigned int parts)
2908 {
2909   unsigned int i;
2910 
2911   for (i = 0; i < parts; i++)
2912     dst[i] &= rhs[i];
2913 }
2914 
2915 /* Bitwise inclusive or of two bignums.  */
2916 void
2917 APInt::tcOr(integerPart *dst, const integerPart *rhs, unsigned int parts)
2918 {
2919   unsigned int i;
2920 
2921   for (i = 0; i < parts; i++)
2922     dst[i] |= rhs[i];
2923 }
2924 
2925 /* Bitwise exclusive or of two bignums.  */
2926 void
2927 APInt::tcXor(integerPart *dst, const integerPart *rhs, unsigned int parts)
2928 {
2929   unsigned int i;
2930 
2931   for (i = 0; i < parts; i++)
2932     dst[i] ^= rhs[i];
2933 }
2934 
2935 /* Complement a bignum in-place.  */
2936 void
2937 APInt::tcComplement(integerPart *dst, unsigned int parts)
2938 {
2939   unsigned int i;
2940 
2941   for (i = 0; i < parts; i++)
2942     dst[i] = ~dst[i];
2943 }
2944 
2945 /* Comparison (unsigned) of two bignums.  */
2946 int
2947 APInt::tcCompare(const integerPart *lhs, const integerPart *rhs,
2948                  unsigned int parts)
2949 {
2950   while (parts) {
2951       parts--;
2952       if (lhs[parts] == rhs[parts])
2953         continue;
2954 
2955       if (lhs[parts] > rhs[parts])
2956         return 1;
2957       else
2958         return -1;
2959     }
2960 
2961   return 0;
2962 }
2963 
2964 /* Increment a bignum in-place, return the carry flag.  */
2965 integerPart
2966 APInt::tcIncrement(integerPart *dst, unsigned int parts)
2967 {
2968   unsigned int i;
2969 
2970   for (i = 0; i < parts; i++)
2971     if (++dst[i] != 0)
2972       break;
2973 
2974   return i == parts;
2975 }
2976 
2977 /* Decrement a bignum in-place, return the borrow flag.  */
2978 integerPart
2979 APInt::tcDecrement(integerPart *dst, unsigned int parts) {
2980   for (unsigned int i = 0; i < parts; i++) {
2981     // If the current word is non-zero, then the decrement has no effect on the
2982     // higher-order words of the integer and no borrow can occur. Exit early.
2983     if (dst[i]--)
2984       return 0;
2985   }
2986   // If every word was zero, then there is a borrow.
2987   return 1;
2988 }
2989 
2990 
2991 /* Set the least significant BITS bits of a bignum, clear the
2992    rest.  */
2993 void
2994 APInt::tcSetLeastSignificantBits(integerPart *dst, unsigned int parts,
2995                                  unsigned int bits)
2996 {
2997   unsigned int i;
2998 
2999   i = 0;
3000   while (bits > integerPartWidth) {
3001     dst[i++] = ~(integerPart) 0;
3002     bits -= integerPartWidth;
3003   }
3004 
3005   if (bits)
3006     dst[i++] = ~(integerPart) 0 >> (integerPartWidth - bits);
3007 
3008   while (i < parts)
3009     dst[i++] = 0;
3010 }
3011