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