Lines Matching defs:DynamicAPInt
1 //===- DynamicAPInt.h - DynamicAPInt Class ----------------------*- C++ -*-===//
46 class DynamicAPInt {
75 LLVM_ATTRIBUTE_ALWAYS_INLINE explicit DynamicAPInt(
114 LLVM_ATTRIBUTE_ALWAYS_INLINE explicit DynamicAPInt(int64_t Val)
118 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt() : DynamicAPInt(0) {}
119 LLVM_ATTRIBUTE_ALWAYS_INLINE ~DynamicAPInt() {
123 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt(const DynamicAPInt &O)
129 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator=(const DynamicAPInt &O) {
137 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator=(int X) {
147 bool operator==(const DynamicAPInt &O) const;
148 bool operator!=(const DynamicAPInt &O) const;
149 bool operator>(const DynamicAPInt &O) const;
150 bool operator<(const DynamicAPInt &O) const;
151 bool operator<=(const DynamicAPInt &O) const;
152 bool operator>=(const DynamicAPInt &O) const;
153 DynamicAPInt operator+(const DynamicAPInt &O) const;
154 DynamicAPInt operator-(const DynamicAPInt &O) const;
155 DynamicAPInt operator*(const DynamicAPInt &O) const;
156 DynamicAPInt operator/(const DynamicAPInt &O) const;
157 DynamicAPInt operator%(const DynamicAPInt &O) const;
158 DynamicAPInt &operator+=(const DynamicAPInt &O);
159 DynamicAPInt &operator-=(const DynamicAPInt &O);
160 DynamicAPInt &operator*=(const DynamicAPInt &O);
161 DynamicAPInt &operator/=(const DynamicAPInt &O);
162 DynamicAPInt &operator%=(const DynamicAPInt &O);
163 DynamicAPInt operator-() const;
164 DynamicAPInt &operator++();
165 DynamicAPInt &operator--();
169 DynamicAPInt divByPositive(const DynamicAPInt &O) const;
170 DynamicAPInt &divByPositiveInPlace(const DynamicAPInt &O);
172 friend DynamicAPInt abs(const DynamicAPInt &X);
173 friend DynamicAPInt ceilDiv(const DynamicAPInt &LHS, const DynamicAPInt &RHS);
174 friend DynamicAPInt floorDiv(const DynamicAPInt &LHS,
175 const DynamicAPInt &RHS);
177 friend DynamicAPInt gcd(const DynamicAPInt &A, const DynamicAPInt &B);
178 friend DynamicAPInt lcm(const DynamicAPInt &A, const DynamicAPInt &B);
179 friend DynamicAPInt mod(const DynamicAPInt &LHS, const DynamicAPInt &RHS);
184 friend DynamicAPInt &operator+=(DynamicAPInt &A, int64_t B);
185 friend DynamicAPInt &operator-=(DynamicAPInt &A, int64_t B);
186 friend DynamicAPInt &operator*=(DynamicAPInt &A, int64_t B);
187 friend DynamicAPInt &operator/=(DynamicAPInt &A, int64_t B);
188 friend DynamicAPInt &operator%=(DynamicAPInt &A, int64_t B);
190 friend bool operator==(const DynamicAPInt &A, int64_t B);
191 friend bool operator!=(const DynamicAPInt &A, int64_t B);
192 friend bool operator>(const DynamicAPInt &A, int64_t B);
193 friend bool operator<(const DynamicAPInt &A, int64_t B);
194 friend bool operator<=(const DynamicAPInt &A, int64_t B);
195 friend bool operator>=(const DynamicAPInt &A, int64_t B);
196 friend DynamicAPInt operator+(const DynamicAPInt &A, int64_t B);
197 friend DynamicAPInt operator-(const DynamicAPInt &A, int64_t B);
198 friend DynamicAPInt operator*(const DynamicAPInt &A, int64_t B);
199 friend DynamicAPInt operator/(const DynamicAPInt &A, int64_t B);
200 friend DynamicAPInt operator%(const DynamicAPInt &A, int64_t B);
202 friend bool operator==(int64_t A, const DynamicAPInt &B);
203 friend bool operator!=(int64_t A, const DynamicAPInt &B);
204 friend bool operator>(int64_t A, const DynamicAPInt &B);
205 friend bool operator<(int64_t A, const DynamicAPInt &B);
206 friend bool operator<=(int64_t A, const DynamicAPInt &B);
207 friend bool operator>=(int64_t A, const DynamicAPInt &B);
208 friend DynamicAPInt operator+(int64_t A, const DynamicAPInt &B);
209 friend DynamicAPInt operator-(int64_t A, const DynamicAPInt &B);
210 friend DynamicAPInt operator*(int64_t A, const DynamicAPInt &B);
211 friend DynamicAPInt operator/(int64_t A, const DynamicAPInt &B);
212 friend DynamicAPInt operator%(int64_t A, const DynamicAPInt &B);
214 friend hash_code hash_value(const DynamicAPInt &x); // NOLINT
222 inline raw_ostream &operator<<(raw_ostream &OS, const DynamicAPInt &X) {
229 hash_code hash_value(const DynamicAPInt &X); // NOLINT
234 static inline int64_t int64fromDynamicAPInt(const DynamicAPInt &X) {
237 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt dynamicAPIntFromInt64(int64_t X) {
238 return DynamicAPInt(X);
243 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt mod(const DynamicAPInt &LHS,
244 const DynamicAPInt &RHS);
252 DynamicAPInt::operator==(const DynamicAPInt &O) const {
258 DynamicAPInt::operator!=(const DynamicAPInt &O) const {
264 DynamicAPInt::operator>(const DynamicAPInt &O) const {
270 DynamicAPInt::operator<(const DynamicAPInt &O) const {
276 DynamicAPInt::operator<=(const DynamicAPInt &O) const {
282 DynamicAPInt::operator>=(const DynamicAPInt &O) const {
292 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
293 DynamicAPInt::operator+(const DynamicAPInt &O) const {
295 DynamicAPInt Result;
299 return DynamicAPInt(detail::SlowDynamicAPInt(*this) +
302 return DynamicAPInt(detail::SlowDynamicAPInt(*this) +
305 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
306 DynamicAPInt::operator-(const DynamicAPInt &O) const {
308 DynamicAPInt Result;
312 return DynamicAPInt(detail::SlowDynamicAPInt(*this) -
315 return DynamicAPInt(detail::SlowDynamicAPInt(*this) -
318 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
319 DynamicAPInt::operator*(const DynamicAPInt &O) const {
321 DynamicAPInt Result;
325 return DynamicAPInt(detail::SlowDynamicAPInt(*this) *
328 return DynamicAPInt(detail::SlowDynamicAPInt(*this) *
333 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
334 DynamicAPInt::divByPositive(const DynamicAPInt &O) const {
337 return DynamicAPInt(getSmall() / O.getSmall());
338 return DynamicAPInt(detail::SlowDynamicAPInt(*this) /
342 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
343 DynamicAPInt::operator/(const DynamicAPInt &O) const {
348 return DynamicAPInt(getSmall() / O.getSmall());
350 return DynamicAPInt(detail::SlowDynamicAPInt(*this) /
354 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt abs(const DynamicAPInt &X) {
355 return DynamicAPInt(X >= 0 ? X : -X);
358 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt ceilDiv(const DynamicAPInt &LHS,
359 const DynamicAPInt &RHS) {
364 return DynamicAPInt(divideCeilSigned(LHS.getSmall(), RHS.getSmall()));
366 return DynamicAPInt(
369 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt floorDiv(const DynamicAPInt &LHS,
370 const DynamicAPInt &RHS) {
375 return DynamicAPInt(divideFloorSigned(LHS.getSmall(), RHS.getSmall()));
377 return DynamicAPInt(
382 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt mod(const DynamicAPInt &LHS,
383 const DynamicAPInt &RHS) {
385 return DynamicAPInt(mod(LHS.getSmall(), RHS.getSmall()));
386 return DynamicAPInt(
390 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt gcd(const DynamicAPInt &A,
391 const DynamicAPInt &B) {
394 return DynamicAPInt(std::gcd(A.getSmall(), B.getSmall()));
395 return DynamicAPInt(
400 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt lcm(const DynamicAPInt &A,
401 const DynamicAPInt &B) {
402 DynamicAPInt X = abs(A);
403 DynamicAPInt Y = abs(B);
408 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt
409 DynamicAPInt::operator%(const DynamicAPInt &O) const {
411 return DynamicAPInt(getSmall() % O.getSmall());
412 return DynamicAPInt(detail::SlowDynamicAPInt(*this) %
416 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt DynamicAPInt::operator-() const {
419 return DynamicAPInt(-getSmall());
420 return DynamicAPInt(-detail::SlowDynamicAPInt(*this));
422 return DynamicAPInt(-detail::SlowDynamicAPInt(*this));
428 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
429 DynamicAPInt::operator+=(const DynamicAPInt &O) {
439 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) +
442 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) +
445 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
446 DynamicAPInt::operator-=(const DynamicAPInt &O) {
456 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) -
459 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) -
462 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
463 DynamicAPInt::operator*=(const DynamicAPInt &O) {
473 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) *
476 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) *
479 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
480 DynamicAPInt::operator/=(const DynamicAPInt &O) {
488 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) /
493 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
494 DynamicAPInt::divByPositiveInPlace(const DynamicAPInt &O) {
500 return *this = DynamicAPInt(detail::SlowDynamicAPInt(*this) /
504 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &
505 DynamicAPInt::operator%=(const DynamicAPInt &O) {
508 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &DynamicAPInt::operator++() {
511 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &DynamicAPInt::operator--() {
518 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator+=(DynamicAPInt &A,
522 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator-=(DynamicAPInt &A,
526 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator*=(DynamicAPInt &A,
530 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator/=(DynamicAPInt &A,
534 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt &operator%=(DynamicAPInt &A,
538 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator+(const DynamicAPInt &A,
540 return A + DynamicAPInt(B);
542 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator-(const DynamicAPInt &A,
544 return A - DynamicAPInt(B);
546 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator*(const DynamicAPInt &A,
548 return A * DynamicAPInt(B);
550 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator/(const DynamicAPInt &A,
552 return A / DynamicAPInt(B);
554 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator%(const DynamicAPInt &A,
556 return A % DynamicAPInt(B);
558 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator+(int64_t A,
559 const DynamicAPInt &B) {
560 return DynamicAPInt(A) + B;
562 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator-(int64_t A,
563 const DynamicAPInt &B) {
564 return DynamicAPInt(A) - B;
566 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator*(int64_t A,
567 const DynamicAPInt &B) {
568 return DynamicAPInt(A) * B;
570 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator/(int64_t A,
571 const DynamicAPInt &B) {
572 return DynamicAPInt(A) / B;
574 LLVM_ATTRIBUTE_ALWAYS_INLINE DynamicAPInt operator%(int64_t A,
575 const DynamicAPInt &B) {
576 return DynamicAPInt(A) % B;
581 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator==(const DynamicAPInt &A, int64_t B) {
586 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator!=(const DynamicAPInt &A, int64_t B) {
591 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator>(const DynamicAPInt &A, int64_t B) {
596 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator<(const DynamicAPInt &A, int64_t B) {
601 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator<=(const DynamicAPInt &A, int64_t B) {
606 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator>=(const DynamicAPInt &A, int64_t B) {
611 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator==(int64_t A, const DynamicAPInt &B) {
616 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator!=(int64_t A, const DynamicAPInt &B) {
621 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator>(int64_t A, const DynamicAPInt &B) {
626 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator<(int64_t A, const DynamicAPInt &B) {
631 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator<=(int64_t A, const DynamicAPInt &B) {
636 LLVM_ATTRIBUTE_ALWAYS_INLINE bool operator>=(int64_t A, const DynamicAPInt &B) {