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