29#ifndef HAVE_POLY_INT_H
30#define HAVE_POLY_INT_H
32template<
unsigned int N,
typename T>
class poly_int;
73 static const int signedness = (
T (0) >=
T (-1));
75 static const T max_value = (signedness
76 ? ((
T (1) << (precision - 2))
77 + ((
T (1) << (precision - 2)) - 1))
79 static const int rank =
sizeof (
T) * 2 + !signedness;
81 template<
typename Arg>
90 static const int signedness = -1;
94 template<
typename Arg>
104 static const int signedness = 1;
108 template<
typename Arg>
118 static const int signedness = 1;
122 template<
typename Arg>
127template<
typename T1,
typename T2>
156#define RANK(X) poly_coeff_traits<X>::rank
169template<
typename T1,
typename T2,
typename T3,
172template<
typename T1,
typename T2,
typename T3>
200template<
unsigned int N,
typename C>
211template<
typename T1,
typename T2 =
T1,
214template<
typename T1,
typename T2>
222template<
typename T1,
typename T2,
typename T3,
226template<
typename T1,
typename T2,
typename T3>
234template<
typename T1,
typename T2 =
T1,
237template<
typename T1,
typename T2>
256template<
typename T1,
typename T2 =
T1,
261template<
typename T1,
typename T2>
271template<
typename T1,
typename T2>
281template<
typename T1,
typename T2>
293#define POLY_POLY_COEFF(C1, C2) typename poly_result<C1, C2>::type
299#define POLY_CONST_COEFF(C1, T2) \
300 POLY_POLY_COEFF (C1, typename if_nonpoly<T2>::type)
303#define CONST_POLY_COEFF(T1, C2) \
304 POLY_POLY_COEFF (typename if_nonpoly<T1>::type, C2)
308#define POLY_POLY_RESULT(N, C1, C2) poly_int<N, POLY_POLY_COEFF (C1, C2)>
312#define POLY_CONST_RESULT(N, C1, T2) poly_int<N, POLY_CONST_COEFF (C1, T2)>
316#define CONST_POLY_RESULT(N, T1, C2) poly_int<N, CONST_POLY_COEFF (T1, C2)>
320#define CONST_CONST_RESULT(N, T1, T2) \
321 POLY_POLY_COEFF (typename if_nonpoly<T1>::type, \
322 typename if_nonpoly<T2>::type)
326#define POLY_CAST(C1, C2) typename poly_result<C1, C2>::cast
330#define POLY_BINARY_COEFF(T1, T2) \
331 typename poly_result<typename poly_int_traits<T1>::coeff_type, \
332 typename poly_int_traits<T2>::coeff_type>::type
336#define POLY_INT_TYPE(T) typename poly_int_traits<T>::int_type
351#define POLY_SET_COEFF(C, RES, I, VALUE) \
352 ((void) (&(RES).coeffs[0] == (C *) (void *) &(RES).coeffs[0]), \
353 wi::int_traits<C>::precision_type == wi::FLEXIBLE_PRECISION \
354 ? (void) ((RES).coeffs[I] = VALUE) \
355 : (void) ((RES).coeffs[I].~C (), new (&(RES).coeffs[I]) C (VALUE)))
372template<
unsigned int N,
typename C>
379 template<
typename Ca>
382 template<
typename ...Cs>
387 template<
typename Ca>
389 template<
typename Ca>
392 template<
typename Ca>
394 template<
typename Ca>
397 template<
typename Ca>
399 template<
typename Ca>
402 template<
typename Ca>
414 template<
typename Ca>
417 template<
typename Ca>
425#if POLY_INT_CONVERSION
432 template<
typename ...Cs>
435 template<
typename C0,
typename ...Cs>
439template<
unsigned int N,
typename C>
444 for (
unsigned int i = 0;
i <
N;
i++)
448template<
unsigned int N,
typename C>
449template<
typename ...Cs>
456template<
unsigned int N,
typename C>
457template<
typename C0,
typename ...Cs>
463template<
unsigned int N,
typename C>
464template<
typename ...Cs>
470template<
unsigned int N,
typename C>
475 for (
unsigned int i = 0;
i <
N;
i++)
480template<
unsigned int N,
typename C>
487 for (
unsigned int i = 1;
i <
N;
i++)
492template<
unsigned int N,
typename C>
497 for (
unsigned int i = 0;
i <
N;
i++)
502template<
unsigned int N,
typename C>
507 this->coeffs[0] +=
a;
511template<
unsigned int N,
typename C>
516 for (
unsigned int i = 0;
i <
N;
i++)
521template<
unsigned int N,
typename C>
526 this->coeffs[0] -=
a;
530template<
unsigned int N,
typename C>
535 for (
unsigned int i = 0;
i <
N;
i++)
536 this->coeffs[
i] *=
a;
540template<
unsigned int N,
typename C>
544 for (
unsigned int i = 0;
i <
N;
i++)
545 this->coeffs[
i] <<=
a;
551template<
unsigned int N,
typename C>
556 for (
unsigned int i = 1;
i <
N;
i++)
557 if (this->coeffs[
i] != 0)
565template<
unsigned int N,
typename C>
584template<
unsigned int N,
typename C>
589 return this->coeffs[0];
596template<
unsigned int N,
typename C>
603 for (
unsigned int i = 0;
i <
N;
i++)
611template<
unsigned int N,
typename C>
617 for (
unsigned int i = 0;
i <
N;
i++)
626template<
unsigned int N,
typename C>
630 for (
unsigned int i = 0;
i <
N;
i++)
633 for (
unsigned int i = 0;
i <
N;
i++)
643template<
unsigned int N,
typename C>
647 for (
unsigned int i = 0;
i <
N;
i++)
650 for (
unsigned int i = 0;
i <
N;
i++)
651 r->coeffs[
i] =
this->coeffs[
i].to_uhwi ();
658template<
unsigned int N,
typename C>
663 for (
unsigned int i = 0;
i <
N;
i++)
671template<
unsigned int N,
typename C>
676 for (
unsigned int i = 0;
i <
N;
i++)
681#if POLY_INT_CONVERSION
684template<
unsigned int N,
typename C>
689 return this->coeffs[0];
695template<
typename Ca,
typename Cb,
typename Cc>
699 return a >=
b &&
a <= c;
702template<
unsigned int N,
typename Ca,
typename Cb,
typename Cc>
706 for (
unsigned int i = 0;
i <
N;
i++)
707 if (
a.coeffs[
i] <
b ||
a.coeffs[
i] > c)
715template<
unsigned int N>
720 for (
unsigned int i = 0;
i <
N;
i++)
727template<
unsigned int N>
732 for (
unsigned int i = 0;
i <
N;
i++)
739template<
unsigned int N,
typename Ca>
745 for (
unsigned int i = 0;
i <
N;
i++)
752template<
unsigned int N,
typename Ca>
758 for (
unsigned int i = 0;
i <
N;
i++)
764template<
unsigned int N,
typename Ca,
typename Cb>
771 for (
unsigned int i = 0;
i <
N;
i++)
776template<
unsigned int N,
typename Ca,
typename Cb>
785 for (
unsigned int i = 1;
i <
N;
i++)
790template<
unsigned int N,
typename Ca,
typename Cb>
799 for (
unsigned int i = 1;
i <
N;
i++)
807template<
unsigned int N,
typename Ca,
typename Cb>
813 for (
unsigned int i = 0;
i <
N;
i++)
818template<
unsigned int N,
typename Ca,
typename Cb>
825 for (
unsigned int i = 1;
i <
N;
i++)
831template<
unsigned int N,
typename Ca,
typename Cb>
838 for (
unsigned int i = 1;
i <
N;
i++)
844template<
unsigned int N,
typename Ca,
typename Cb>
852 for (
unsigned int i = 1;
i <
N;
i++)
863template<
unsigned int N,
typename Ca,
typename Cb>
870 for (
unsigned int i = 0;
i <
N;
i++)
875template<
unsigned int N,
typename Ca,
typename Cb>
884 for (
unsigned int i = 1;
i <
N;
i++)
889template<
unsigned int N,
typename Ca,
typename Cb>
898 for (
unsigned int i = 1;
i <
N;
i++)
906template<
unsigned int N,
typename Ca,
typename Cb>
912 for (
unsigned int i = 0;
i <
N;
i++)
917template<
unsigned int N,
typename Ca,
typename Cb>
924 for (
unsigned int i = 1;
i <
N;
i++)
930template<
unsigned int N,
typename Ca,
typename Cb>
937 for (
unsigned int i = 1;
i <
N;
i++)
943template<
unsigned int N,
typename Ca,
typename Cb>
951 for (
unsigned int i = 1;
i <
N;
i++)
962template<
unsigned int N,
typename Ca>
969 for (
unsigned int i = 0;
i <
N;
i++)
977template<
unsigned int N,
typename Ca>
983 for (
unsigned int i = 0;
i <
N;
i++)
988template<
unsigned int N,
typename Ca>
995 for (
unsigned int i = 1;
i <
N;
i++)
1005template<
unsigned int N,
typename Ca>
1011 return ~a.coeffs[0];
1014template<
unsigned int N,
typename Ca,
typename Cb>
1021 for (
unsigned int i = 0;
i <
N;
i++)
1026template<
unsigned int N,
typename Ca,
typename Cb>
1033 for (
unsigned int i = 0;
i <
N;
i++)
1041template<
unsigned int N,
typename Ca,
typename Cb>
1047 for (
unsigned int i = 0;
i <
N;
i++)
1052template<
unsigned int N,
typename Ca,
typename Cb>
1058 for (
unsigned int i = 0;
i <
N;
i++)
1063template<
unsigned int N,
typename Ca,
typename Cb>
1071 for (
unsigned int i = 1;
i <
N;
i++)
1081template<
unsigned int N,
typename Ca,
typename Cb>
1088 for (
unsigned int i = 0;
i <
N;
i++)
1096template<
unsigned int N,
typename Ca,
typename Cb>
1102 for (
unsigned int i = 0;
i <
N;
i++)
1110template<
unsigned int N,
typename C>
1115 for (
unsigned int i = 0;
i <
N;
i++)
1124template<
typename Ca,
typename Cb>
1145template<
typename Ca,
typename Cb>
1164template<
unsigned int N,
typename Ca,
typename Cb>
1170 return maybe_eq_2 (
a.coeffs[0],
a.coeffs[1],
b.coeffs[0],
b.coeffs[1]);
1171 return a.coeffs[0] ==
b.coeffs[0];
1174template<
unsigned int N,
typename Ca,
typename Cb>
1181 return a.coeffs[0] ==
b;
1184template<
unsigned int N,
typename Ca,
typename Cb>
1191 return a ==
b.coeffs[0];
1194template<
typename Ca,
typename Cb>
1203template<
unsigned int N,
typename Ca,
typename Cb>
1208 for (
unsigned int i = 1;
i <
N;
i++)
1209 if (
a.coeffs[
i] !=
b.coeffs[
i])
1211 return a.coeffs[0] !=
b.coeffs[0];
1214template<
unsigned int N,
typename Ca,
typename Cb>
1219 for (
unsigned int i = 1;
i <
N;
i++)
1220 if (
a.coeffs[
i] != 0)
1222 return a.coeffs[0] !=
b;
1225template<
unsigned int N,
typename Ca,
typename Cb>
1230 for (
unsigned int i = 1;
i <
N;
i++)
1231 if (
b.coeffs[
i] != 0)
1233 return a !=
b.coeffs[0];
1236template<
typename Ca,
typename Cb>
1244#define known_eq(A, B) (!maybe_ne (A, B))
1247#define known_ne(A, B) (!maybe_eq (A, B))
1252template<
unsigned int N,
typename Ca,
typename Cb>
1257 for (
unsigned int i = 1;
i <
N;
i++)
1258 if (
a.coeffs[
i] <
b.coeffs[
i])
1260 return a.coeffs[0] <=
b.coeffs[0];
1263template<
unsigned int N,
typename Ca,
typename Cb>
1268 for (
unsigned int i = 1;
i <
N;
i++)
1269 if (
a.coeffs[
i] < 0)
1271 return a.coeffs[0] <=
b;
1274template<
unsigned int N,
typename Ca,
typename Cb>
1279 for (
unsigned int i = 1;
i <
N;
i++)
1280 if (
b.coeffs[
i] > 0)
1282 return a <=
b.coeffs[0];
1285template<
typename Ca,
typename Cb>
1294template<
unsigned int N,
typename Ca,
typename Cb>
1299 for (
unsigned int i = 1;
i <
N;
i++)
1300 if (
a.coeffs[
i] <
b.coeffs[
i])
1302 return a.coeffs[0] <
b.coeffs[0];
1305template<
unsigned int N,
typename Ca,
typename Cb>
1310 for (
unsigned int i = 1;
i <
N;
i++)
1311 if (
a.coeffs[
i] < 0)
1313 return a.coeffs[0] <
b;
1316template<
unsigned int N,
typename Ca,
typename Cb>
1321 for (
unsigned int i = 1;
i <
N;
i++)
1322 if (
b.coeffs[
i] > 0)
1324 return a <
b.coeffs[0];
1327template<
typename Ca,
typename Cb>
1335#define maybe_ge(A, B) maybe_le (B, A)
1338#define maybe_gt(A, B) maybe_lt (B, A)
1341#define known_le(A, B) (!maybe_gt (A, B))
1344#define known_lt(A, B) (!maybe_ge (A, B))
1347#define known_gt(A, B) (!maybe_le (A, B))
1350#define known_ge(A, B) (!maybe_lt (A, B))
1354template<
typename T1,
typename T2>
1370template<
unsigned int N,
typename Ca,
typename Cb>
1384template<
unsigned int N,
typename Ca,
typename Cb>
1398template<
unsigned int N,
typename Ca,
typename Cb>
1418template<
unsigned int N,
typename Ca,
typename Cb>
1432template<
unsigned int N,
typename Ca,
typename Cb>
1446template<
unsigned int N,
typename Ca,
typename Cb>
1463template<
unsigned int N,
typename Ca>
1473template<
unsigned int N,
typename Ca,
typename Cb>
1485template<
unsigned int N,
typename Ca,
typename Cb>
1498template<
unsigned int N,
typename Ca,
typename Cb>
1510 for (
unsigned int i = 1;
i <
N;
i++)
1515template<
unsigned int N,
typename Ca,
typename Cb>
1519 return lower_bound (
b,
a);
1522template<
unsigned int N,
typename Ca,
typename Cb>
1531 for (
unsigned int i = 0;
i <
N;
i++)
1536template<
typename Ca,
typename Cb>
1538lower_bound (
const Ca &
a,
const Cb &
b)
1540 return a <
b ?
a :
b;
1547template<
unsigned int N,
typename Ca,
typename Cb>
1559 for (
unsigned int i = 1;
i <
N;
i++)
1564template<
unsigned int N,
typename Ca,
typename Cb>
1568 return upper_bound (
b,
a);
1571template<
unsigned int N,
typename Ca,
typename Cb>
1580 for (
unsigned int i = 0;
i <
N;
i++)
1588template<
unsigned int N,
typename Ca>
1594 for (
i =
N - 1;
i > 0; --
i)
1595 if (
a.coeffs[
i] != 0)
1599 for (
unsigned int j = 0;
j <
i; ++
j)
1600 if (
a.coeffs[
j] != 0)
1609template<
unsigned int N,
typename Ca,
typename Cb>
1617template<
unsigned int N,
typename Ca,
typename Cb>
1632template<
unsigned int N,
typename Ca,
typename Cb>
1636 if (
b.is_constant ())
1638 if (
a.is_constant ())
1646 for (
unsigned int i = 1;
i <
N; ++
i)
1647 if (
a.coeffs[
i] !=
ICa (0))
1652 for (
unsigned int j = 0;
j <
N; ++
j)
1670template<
unsigned int N,
typename Ca,
typename Cb>
1674 for (
unsigned int i =
N;
i-- > 0; )
1675 if (
a.coeffs[
i] !=
b.coeffs[
i])
1676 return a.coeffs[
i] <
b.coeffs[
i] ? -1 : 1;
1682template<
unsigned int N,
typename Ca,
typename Cb>
1686 for (
unsigned int i = 1;
i <
N;
i++)
1687 if ((value.
coeffs[
i] & (align - 1)) != 0)
1695template<
unsigned int N,
typename Ca,
typename Cb>
1709template<
unsigned int N,
typename Ca,
typename Cb>
1724template<
unsigned int N,
typename Ca,
typename Cb,
typename Cc>
1741template<
unsigned int N,
typename Ca,
typename Cb,
typename Cc>
1761template<
unsigned int N,
typename Ca,
typename Cb>
1766 return value + (-value.
coeffs[0] & (align - 1));
1776template<
unsigned int N,
typename Ca,
typename Cb>
1781 return value - (value.
coeffs[0] & (align - 1));
1788template<
unsigned int N,
typename Ca,
typename Cb>
1793 for (
unsigned int i = 0;
i <
N;
i++)
1797 - (value.
coeffs[
i] & (align - 1))));
1805template<
unsigned int N,
typename Ca,
typename Cb>
1810 for (
unsigned int i = 0;
i <
N;
i++)
1812 + (-value.
coeffs[
i] & (align - 1))));
1824template<
unsigned int N,
typename Ca,
typename Cb>
1832 - (value.
coeffs[0] & (align - 1)))
1835 for (
unsigned int i = 1;
i <
N;
i++)
1848template<
unsigned int N,
typename Ca,
typename Cb>
1856 + (-value.
coeffs[0] & (align - 1)))
1859 for (
unsigned int i = 1;
i <
N;
i++)
1868template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
1875 *misalign = value.
coeffs[0] & (align - 1);
1883template<
unsigned int N,
typename Ca,
typename Cb>
1888 return a.coeffs[0] & (align - 1);
1894template<
unsigned int N,
typename Ca>
1900 for (
unsigned int i = 1;
i <
N; ++
i)
1908template<
unsigned int N,
typename Ca,
typename Cb,
typename Cr>
1916 for (
unsigned int i = 1;
i <
N;
i++)
1917 if ((-(
a.coeffs[
i] & -
a.coeffs[
i]) &
b) != int_type (0))
1920 result->coeffs[0] |=
b;
1927template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
1936 if (
NCa (
a.coeffs[0]) %
NCb (
b) != 0 || !
a.is_constant ())
1942template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
1952 if (
NCa (
a) %
NCb (
b.coeffs[0]) != 0
1953 || (
a != int_type (0) && !
b.is_constant ()))
1959template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
1970 if (
NCa (
a.coeffs[0]) %
NCb (
b.coeffs[0]) != 0)
1974 for (
unsigned int i = 1;
i <
N; ++
i)
1975 if (
b.coeffs[
i] ==
ICb (0)
1976 ?
a.coeffs[
i] !=
ICa (0)
1977 : (
NCa (
a.coeffs[
i]) %
NCb (
b.coeffs[
i]) != 0
1987template<
unsigned int N,
typename Ca,
typename Cb>
1996 if (
NCa (
a.coeffs[0]) %
NCb (
b) != 0 || !
a.is_constant ())
2001template<
unsigned int N,
typename Ca,
typename Cb>
2011 if (
NCa (
a) %
NCb (
b.coeffs[0]) != 0
2012 || (
a != int_type (0) && !
b.is_constant ()))
2017template<
unsigned int N,
typename Ca,
typename Cb>
2027 if (
NCa (
a.coeffs[0]) %
NCb (
b.coeffs[0]) != 0)
2031 for (
unsigned int i = 1;
i <
N; ++
i)
2032 if (
b.coeffs[
i] ==
ICb (0)
2033 ?
a.coeffs[
i] !=
ICa (0)
2034 : (
NCa (
a.coeffs[
i]) %
NCb (
b.coeffs[
i]) != 0
2043template<
typename Ca,
typename Cb>
2052template<
unsigned int N,
typename Ca,
typename Cb>
2056 for (
unsigned int i = 0;
i <
N; ++
i)
2057 if (
a.coeffs[
i] %
b != 0)
2064template<
unsigned int N,
typename Ca,
typename Cb>
2072 return a %
b.coeffs[0] == 0 && (
a == int_type (0) ||
b.is_constant ());
2078template<
unsigned int N,
typename Ca,
typename Cb>
2082 if (
b.is_constant ())
2091template<
typename Ca,
typename Cb,
typename Cm>
2104template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
2110 for (
unsigned int i = 0;
i <
N; ++
i)
2118template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
2126 if (
a %
b.coeffs[0] != 0 || (
NCa (
a) != 0 && !
b.is_constant ()))
2136template<
unsigned int N,
typename Ca,
typename Cb,
typename Cm>
2141 if (
b.is_constant ())
2148template<
unsigned int N,
typename Ca,
typename Cb>
2154 for (
unsigned int i = 0;
i <
N;
i++)
2164template<
unsigned int N,
typename Ca,
typename Cb>
2168 if (
b.is_constant ())
2178 for (
unsigned int i = 1;
i <
N; ++
i)
2180 ?
a.coeffs[
i] == int_type (0)
2181 : (
a.coeffs[
i] %
b.coeffs[
i] == 0
2195template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq>
2205 if (!
a.is_constant ())
2211template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq>
2223 C q =
NCa (
a.coeffs[0]) /
NCb (
b.coeffs[0]);
2271 for (
unsigned int i = 1;
i <
N; ++
i)
2273 if (
b.coeffs[
i] ==
ICb (0))
2276 if (
a.coeffs[
i] !=
ICa (0))
2300 else if (q <= 0 &&
qi < q &&
qi + 1 == q)
2302 else if (q >= 0 &&
qi > q &&
qi - 1 == q)
2321template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq,
typename Cr>
2340template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq>
2346 for (
unsigned int i = 1;
i <
N; ++
i)
2347 if (
a.coeffs[
i] %
b != 0)
2349 for (
unsigned int i = 0;
i <
N; ++
i)
2356template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq,
typename Cr>
2373template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq>
2378 if (
b.is_constant ())
2382 for (
unsigned int i = 1;
i <
N; ++
i)
2395template<
unsigned int N,
typename Ca,
typename Cb,
typename Cq>
2410template<
unsigned int N,
typename C>
2419 for (
unsigned int i = 0;
i <
N; ++
i)
2422 fputc (
i ==
N - 1 ?
']' :
',', file);
2430template<
unsigned int N,
typename C>
2441template<
unsigned int N,
typename C>
2450 for (
unsigned int i = 0;
i <
N; ++
i)
2453 fputc (
i ==
N - 1 ?
']' :
',', file);
2475template<
typename T1,
typename T2,
2480 template<
typename T>
2481 static const T &cast (
const T &x) {
return x; }
2484template<
typename T1,
typename T2>
2487 template<
typename T>
2489 cast (
const T &x) {
return x; }
2491 template<
unsigned int N,
typename T>
2510template<
typename T1,
typename T2,
typename T3>
2526 return maybe_lt (start_span::cast (val) - start_span::cast (pos),
2527 size_span::cast (size));
2534template<
typename T1,
typename T2,
typename T3>
2542 &&
known_lt (start_span::cast (val) - start_span::cast (pos),
2543 size_span::cast (size)));
2550template<
typename T1,
typename T2,
typename T3,
typename T4>
2566template<
typename T1,
typename T2,
typename T3,
typename T4>
2589 - start_span::cast (lower_bound (
pos1,
pos2)),
2590 size1_span::cast (
size1))
2592 - start_span::cast (lower_bound (
pos1,
pos2)),
2593 size2_span::cast (
size2)));
2600template<
typename T1,
typename T2,
typename T3,
typename T4>
2615 size_span::cast (
size2) - size_span::cast (
size1)));
2630template<
unsigned int N,
typename C>
2636 for (
unsigned int i = 0;
i <
N; ++
i)
2642template<
unsigned int N,
typename C>
2648template<
unsigned int N,
typename C>
2654template<
unsigned int N,
typename C>
2660#undef POLY_SET_COEFF
2662#undef POLY_BINARY_COEFF
2663#undef CONST_CONST_RESULT
2664#undef POLY_CONST_RESULT
2665#undef CONST_POLY_RESULT
2666#undef POLY_POLY_RESULT
2667#undef POLY_CONST_COEFF
2668#undef CONST_POLY_COEFF
2669#undef POLY_POLY_COEFF
Definition poly-int.h:374
C to_constant() const
Definition poly-int.h:586
poly_int< N, unsigned HOST_WIDE_INT > force_uhwi() const
Definition poly-int.h:673
bool to_shwi(poly_int< N, HOST_WIDE_INT > *) const
Definition poly-int.h:628
poly_int< N, HOST_WIDE_INT > force_shwi() const
Definition poly-int.h:660
bool is_constant() const
Definition poly-int.h:553
static poly_int< N, C > from(const poly_int< N, Ca > &, signop)
Definition poly-int.h:614
constexpr poly_int(poly_int_hungry, const C0 &, const Cs &...)
poly_int & operator+=(const poly_int< N, Ca > &)
if_lossless< T, C, bool >::type is_constant(T *) const
Definition poly-int.h:568
if_nonpoly< Ca, poly_int >::type & operator*=(const Ca &)
Definition poly-int.h:533
C coeffs[N]
Definition poly-int.h:429
poly_int & operator<<=(unsigned int)
Definition poly-int.h:542
bool to_uhwi(poly_int< N, unsigned HOST_WIDE_INT > *) const
Definition poly-int.h:645
poly_int & operator-=(const poly_int< N, Ca > &)
poly_int(const poly_int< N, Ca > &)
Definition poly-int.h:442
constexpr poly_int(poly_int_full, const Cs &...)
poly_int(const poly_int &)=default
constexpr poly_int(const Cs &...)
static poly_int< N, C > from(const poly_int< N, Ca > &, unsigned int, signop)
Definition poly-int.h:599
poly_int & operator=(const poly_int &)=default
Definition wide-int.h:1967
void(* gt_pointer_operator)(void *, void *, void *)
Definition coretypes.h:462
dump_flags_t operator~(dump_flags_t flags)
Definition dumpfile.h:226
#define CHAR_BIT
Definition genautomata.cc:120
static type_p type(options_p *optsp, bool nested)
Definition gengtype-parse.cc:883
static struct token T
Definition gengtype-parse.cc:45
#define N
Definition gensupport.cc:202
void gt_ggc_mx(const char *&x)
Definition ggc-page.cc:1518
void gt_pch_nx(const char *)
Definition ggc.h:341
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
#define INT_MAX
Definition glimits.h:85
HOST_WIDE_INT gcd(HOST_WIDE_INT a, HOST_WIDE_INT b)
Definition hwint.cc:132
HOST_WIDE_INT least_common_multiple(HOST_WIDE_INT a, HOST_WIDE_INT b)
Definition hwint.cc:187
HOST_WIDE_INT sext_hwi(HOST_WIDE_INT src, unsigned int prec)
Definition hwint.h:299
Definition double-int.h:439
poly_int< N, hwi_with_prec > uhwi(const poly_int< N, unsigned HOST_WIDE_INT > &a, unsigned int precision)
Definition poly-int.h:729
poly_int< N, C > r
Definition poly-int.h:744
UNARY_PREDICATE fits_shwi_p(const T &)
UNARY_FUNCTION zext(const T &, unsigned int)
BINARY_FUNCTION sub(const T1 &, const T2 &)
UNARY_FUNCTION neg(const T &)
Ca unsigned int precision
Definition poly-int.h:742
static void accumulate_overflow(overflow_type &, overflow_type)
Definition wide-int.h:4064
Ca & a
Definition poly-int.h:741
UNARY_PREDICATE fits_uhwi_p(const T &)
BINARY_FUNCTION mul(const T1 &, const T2 &)
UNARY_FUNCTION sext(const T &, unsigned int)
SHIFT_FUNCTION lshift(const T1 &, const T2 &)
BINARY_FUNCTION add(const T1 &, const T2 &)
i
Definition poly-int.h:746
overflow_type
Definition wide-int.h:377
poly_int< N, hwi_with_prec > shwi(const poly_int< N, HOST_WIDE_INT > &a, unsigned int precision)
Definition poly-int.h:717
#define POLY_CONST_COEFF(C1, T2)
Definition poly-int.h:299
#define CONST_POLY_COEFF(T1, C2)
Definition poly-int.h:303
#define POLY_SET_COEFF(C, RES, I, VALUE)
Definition poly-int.h:351
#define POLY_POLY_RESULT(N, C1, C2)
Definition poly-int.h:308
poly_int< N, C > r
Definition poly-int.h:770
#define POLY_CAST(C1, C2)
Definition poly-int.h:326
NCa(a.coeffs[i])+b.coeffs[i])
#define POLY_INT_TYPE(T)
Definition poly-int.h:336
i
Definition poly-int.h:772
#define POLY_BINARY_COEFF(T1, T2)
Definition poly-int.h:330
#define POLY_CONST_RESULT(N, C1, T2)
Definition poly-int.h:312
#define CONST_CONST_RESULT(N, T1, T2)
Definition poly-int.h:320
#define RANK(X)
Definition poly-int.h:156
#define POLY_POLY_COEFF(C1, C2)
Definition poly-int.h:293
if_nonpoly< Ca, bool >::type coeffs_in_range_p(const Ca &a, const Cb &b, const Cc &c)
Definition poly-int.h:697
Ca const poly_int< N, Cb > & b
Definition poly-int.h:767
Ca & a
Definition poly-int.h:766
#define CONST_POLY_RESULT(N, T1, C2)
Definition poly-int.h:316
signop
Definition signop.h:28
@ UNSIGNED
Definition signop.h:30
@ SIGNED
Definition signop.h:29
sreal operator<<(const sreal &a, int exp)
Definition sreal.h:187
T3 type
Definition poly-int.h:175
Definition poly-int.h:171
T3 type
Definition poly-int.h:229
Definition poly-int.h:225
T2 type
Definition poly-int.h:217
Definition poly-int.h:213
T2 type
Definition poly-int.h:240
Definition poly-int.h:236
Definition poly-int.h:129
static const int result_kind
Definition poly-int.h:158
static const bool lossless_p
Definition poly-int.h:144
typedef WI_UNARY_RESULT(T) result
int int_type
Definition poly-int.h:116
T type
Definition poly-int.h:82
T result
Definition poly-int.h:71
T int_type
Definition poly-int.h:72
typedef WI_UNARY_RESULT(T) result
int int_type
Definition poly-int.h:102
int int_type
Definition poly-int.h:89
T result
Definition poly-int.h:88
Definition poly-int.h:361
Definition poly-int.h:366
Definition poly-int.h:362
poly_coeff_traits< C >::int_type int_type
Definition poly-int.h:206
C coeff_type
Definition poly-int.h:205
Definition poly-int.h:194
T coeff_type
Definition poly-int.h:197
static const bool is_poly
Definition poly-int.h:195
poly_coeff_traits< T >::int_type int_type
Definition poly-int.h:198
static const unsigned int num_coeffs
Definition poly-int.h:196
HOST_WIDE_INT type
Definition poly-int.h:264
type cast
Definition poly-int.h:267
type cast
Definition poly-int.h:277
unsigned HOST_WIDE_INT type
Definition poly-int.h:274
const T1 & cast
Definition poly-int.h:287
typedef WI_BINARY_RESULT(T1, T2) type
Definition poly-int.h:258
Definition gengtype.h:252
Definition wide-int.h:427
Definition wide-int.h:2043
#define gcc_unreachable()
Definition system.h:848
#define true
Definition system.h:894
#define false
Definition system.h:895
#define MIN(X, Y)
Definition system.h:392
#define STATIC_ASSERT(X)
Definition system.h:871
#define gcc_checking_assert(EXPR)
Definition system.h:828
#define MAX(X, Y)
Definition system.h:393
comp_cost operator+(comp_cost cost1, comp_cost cost2)
Definition tree-ssa-loop-ivopts.cc:269
comp_cost operator-(comp_cost cost1, comp_cost cost2)
Definition tree-ssa-loop-ivopts.cc:282
void print_hex(const wide_int_ref &val, char *buf)
Definition wide-int-print.cc:141
void print_dec(const wide_int_ref &wi, char *buf, signop sgn)
Definition wide-int-print.cc:34
#define WI_BINARY_RESULT(T1, T2)
Definition wide-int.h:289
#define WI_UNARY_RESULT(T)
Definition wide-int.h:315
#define WIDE_INT_MAX_PRECISION
Definition wide-int.h:253