45#include "isl_srcdir.c"
47#define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array))
52 char *pattern =
"%s/test_inputs/%s.%s";
54 length = strlen(pattern) - 6 + strlen(srcdir) + strlen(
name)
61 sprintf(filename, pattern, srcdir,
name, suffix);
120 isl_multi_val_free(mv);
129 "{ A[x, y] -> [] : x + y >= 0 }",
130 "{ A[x, y] -> B[] : x + y >= 0 }",
131 "{ A[x, y] -> [x] : x + y >= 0 }",
132 "[N] -> { A[x, y] -> [x] : x + y <= N }",
133 "{ A[x, y] -> [x, y] : x + y >= 0 }",
134 "{ A[x, y] -> [(x : x >= 0), (y : y >= 0)] : x + y >= 0 }",
135 "[N] -> { [] : N >= 0 }",
136 "[N] -> { [] : N >= 0 }",
137 "[N] -> { [N] : N >= 0 }",
138 "[N] -> { [N, N + 1] : N >= 0 }",
139 "[N, M] -> { [(N : N >= 0), (M : M >= 0)] : N + M >= 0 }",
140 "{ [a] -> [b = a] }",
141 "{ [a] -> [b = a] : a >= 0 }",
145#define BASE multi_pw_aff
154 "{ [a] -> [b] : b = a }",
155 "{ [a] -> [b = a] : b >= 0 }",
165 "{ [x] -> [x % 4] }",
166 "{ [x] -> [x % 4] : x mod 3 = 1 }",
167 "{ [x, x] -> [x % 4] }",
168 "{ [x, x + 1] -> [x % 4] : x mod 3 = 1 }",
169 "{ [x, x mod 2] -> [x % 4] }",
170 "{ [a] -> [a//2] : exists (e0: 8*floor((-a + e0)/8) <= -8 - a + 8e0) }",
174#define BASE pw_multi_aff
193 if (check_reparse_pw_multi_aff(ctx,
pma) < 0)
196 if (check_reparse_pw_multi_aff_tests(ctx) < 0)
206 "{ [a] -> [b] : b = a }",
207 "{ [a] -> [b = a] : b >= 0 }",
211#define BASE union_pw_multi_aff
221 if (check_parse_union_pw_multi_aff_fail_tests(ctx) < 0)
248 mpa = isl_multi_pw_aff_zero(space);
249 r = check_reparse_multi_pw_aff(ctx, mpa);
258 mpa = isl_multi_pw_aff_zero(space);
260 r = check_reparse_multi_pw_aff(ctx, mpa);
267 if (check_reparse_multi_pw_aff(ctx, mpa) < 0)
270 if (check_reparse_multi_pw_aff_tests(ctx) < 0)
272 if (check_parse_multi_pw_aff_fail_tests(ctx) < 0)
285 "(A[] : { S[x] : x > 0; T[y] : y >= 0 })",
287 "[N] -> (A[] : { })",
288 "[N] -> (A[] : { : N >= 0 })",
289 "[N] -> (A[] : { S[x] : x > N; T[y] : y >= 0 })",
290 "(A[] : [N] -> { S[x] : x > N; T[y] : y >= 0 })",
291 "A[{ S[x] -> [x + 1]; T[x] -> [x] }]",
292 "(A[{ S[x] -> [x + 1]; T[x] -> [x] }] : "
293 "{ S[x] : x > 0; T[y] : y >= 0 })",
297#define BASE multi_union_pw_aff
319 r = check_reparse_multi_union_pw_aff(ctx,
mupa);
334 r = check_reparse_multi_union_pw_aff(ctx,
mupa);
338 if (check_reparse_multi_union_pw_aff_tests(ctx) < 0)
363 {
"{ [x,y] : [([x/2]+y)/3] >= 1 }",
364 "{ [x, y] : 2y >= 6 - x }" },
365 {
"{ [x,y] : x <= min(y, 2*y+3) }",
366 "{ [x,y] : x <= y, 2*y + 3 }" },
367 {
"{ [x,y] : x >= min(y, 2*y+3) }",
368 "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }" },
369 {
"[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }",
370 "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }" },
371 {
"{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }",
372 "{ [i,j] -> [min(i,j)] }" },
373 {
"{ [i,j] : i != j }",
374 "{ [i,j] : i < j or i > j }" },
375 {
"{ [i,j] : (i+1)*2 >= j }",
376 "{ [i, j] : j <= 2 + 2i }" },
377 {
"{ [i] -> [i > 0 ? 4 : 5] }",
378 "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }" },
379 {
"[N=2,M] -> { [i=[(M+N)/4]] }",
380 "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }" },
381 {
"{ [x] : x >= 0 }",
382 "{ [x] : x-0 >= 0 }" },
383 {
"{ [i] : ((i > 10)) }",
384 "{ [i] : i >= 11 }" },
386 "{ [i] -> [0 * i] }" },
387 {
"{ [a] -> [b] : (not false) }",
388 "{ [a] -> [b] : true }" },
389 {
"{ [i] : i/2 <= 5 }",
390 "{ [i] : i <= 10 }" },
391 {
"{Sym=[n] [i] : i <= n }",
392 "[n] -> { [i] : i <= n }" },
395 {
"{ [i] : 2*floor(i/2) = i }",
396 "{ [i] : exists a : i = 2 a }" },
397 {
"{ [a] -> [b] : a = 5 implies b = 5 }",
398 "{ [a] -> [b] : a != 5 or b = 5 }" },
399 {
"{ [a] -> [a - 1 : a > 0] }",
400 "{ [a] -> [a - 1] : a > 0 }" },
401 {
"{ [a] -> [a - 1 : a > 0; a : a <= 0] }",
402 "{ [a] -> [a - 1] : a > 0; [a] -> [a] : a <= 0 }" },
403 {
"{ [a] -> [(a) * 2 : a >= 0; 0 : a < 0] }",
404 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
405 {
"{ [a] -> [(a * 2) : a >= 0; 0 : a < 0] }",
406 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
407 {
"{ [a] -> [(a * 2 : a >= 0); 0 : a < 0] }",
408 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
409 {
"{ [a] -> [(a * 2 : a >= 0; 0 : a < 0)] }",
410 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
411 {
"{ [a,b] -> [i,j] : a,b << i,j }",
412 "{ [a,b] -> [i,j] : a < i or (a = i and b < j) }" },
413 {
"{ [a,b] -> [i,j] : a,b <<= i,j }",
414 "{ [a,b] -> [i,j] : a < i or (a = i and b <= j) }" },
415 {
"{ [a,b] -> [i,j] : a,b >> i,j }",
416 "{ [a,b] -> [i,j] : a > i or (a = i and b > j) }" },
417 {
"{ [a,b] -> [i,j] : a,b >>= i,j }",
418 "{ [a,b] -> [i,j] : a > i or (a = i and b >= j) }" },
419 {
"{ [n] -> [i] : exists (a, b, c: 8b <= i - 32a and "
420 "8b >= -7 + i - 32 a and b >= 0 and b <= 3 and "
421 "8c < n - 32a and i < n and c >= 0 and "
422 "c <= 3 and c >= -4a) }",
423 "{ [n] -> [i] : 0 <= i < n }" },
424 {
"{ [x] -> [] : exists (a, b: 0 <= a <= 1 and 0 <= b <= 3 and "
425 "2b <= x - 8a and 2b >= -1 + x - 8a) }",
426 "{ [x] -> [] : 0 <= x <= 15 }" },
427 {
"{ [x] -> [x] : }",
429 {
"{ [x=4:5] -> [x + 1] }",
430 "{ [x] -> [x + 1] : 4 <= x <= 5 }" },
431 {
"{ [x=4:5] -> [x + 1 : x + 1] }",
432 "{ [x=4:5] -> [x + 1] }" },
433 {
"{ [x] -> [x - 1 : x + 1] }",
434 "{ [x] -> [y] : x - 1 <= y <= x + 1 }" },
435 {
"{ [x=4:] -> [x + 1] }",
436 "{ [x] -> [x + 1] : 4 <= x }" },
437 {
"{ [x=:5] -> [x + 1] }",
438 "{ [x] -> [x + 1] : x <= 5 }" },
439 {
"{ [x=:] -> [x + 1] }",
440 "{ [x] -> [x + 1] }" },
444 "{ [x, floor(x/4)] }" },
459 {
"{ [-2^2:2^2-1] }",
465 {
"[a, b, c, d] -> { [max(a,b,c,d)] }",
466 "[a, b, c, d] -> { [a] : b < a and c < a and d < a; "
467 "[b] : b >= a and c < b and d < b; "
468 "[c] : c >= a and c >= b and d < c; "
469 "[d] : d >= a and d >= b and d >= c }" },
470 {
"[a, b, c, d] -> { [min(a,b,c,d)] }",
471 "[a, b, c, d] -> { [a] : b >= a and c >= a and d >= a; "
472 "[b] : b < a and c >= b and d >= b; "
473 "[c] : c < b and c < a and d >= c; "
474 "[d] : d < c and d < b and d < a }" },
481 const char *
str, *str2;
496 str =
"{ [i] -> [-i] }";
501 str =
"{ A[i] -> L[([i/3])] }";
508 "p1 = 1 && (y1 <= y2 || y2 = 0) }");
517 str =
"{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}";
519 str =
"{ [new, old] -> [o0, o1] : "
520 "exists (e0 = [(-1 - new + o0)/2], e1 = [(-1 - old + o1)/2]: "
521 "2e0 = -1 - new + o0 and 2e1 = -1 - old + o1 and o0 >= 0 and "
522 "o0 <= 1 and o1 >= 0 and o1 <= 1) }";
528 str =
"{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}";
530 str =
"{[new,old] -> [(new+1)%2,(old+1)%2]}";
537 test_parse_map(ctx,
"{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }");
550 const char *
str =
"{[y]: Exists ( alpha : 2alpha = y)}";
555 input = fopen(filename,
"r");
573 "read sets not equal",
return -1);
591 "set not considered bounded",
return -1);
602 "set considered bounded",
return -1);
612 "set considered bounded",
return -1);
672 "failed construction",
return -1);
695 "[n] -> { [i] -> [j] : exists (a = [i/10] : i - 10a <= n ) }");
698 "[n] -> { [i,k] -> [j] : exists (a = [i/10] : i - 10a <= n ) }");
714 "unexpected result",
return -1);
716 str =
"[n] -> { [i] -> [] : exists a : 0 <= i <= n and i = 2 a }";
718 str =
"{ [i] -> [j] : exists a : 0 <= i <= j and i = 2 a }";
729 "unexpected result",
return -1);
735#define BASE multi_val
739#define BASE multi_aff
868 {
"0",
'+',
"0",
"0" },
869 {
"1",
'+',
"0",
"1" },
870 {
"1",
'+',
"1",
"2" },
871 {
"1",
'-',
"1",
"0" },
872 {
"1",
'*',
"1",
"1" },
873 {
"1",
'/',
"1",
"1" },
874 {
"2",
'*',
"3",
"6" },
875 {
"2",
'*',
"1/2",
"1" },
876 {
"2",
'*',
"1/3",
"2/3" },
877 {
"2/3",
'*',
"3/5",
"2/5" },
878 {
"2/3",
'*',
"7/5",
"14/15" },
879 {
"2",
'/',
"1/2",
"4" },
880 {
"-2",
'/',
"-1/2",
"4" },
881 {
"-2",
'/',
"1/2",
"-4" },
882 {
"2",
'/',
"-1/2",
"-4" },
883 {
"2",
'/',
"2",
"1" },
884 {
"2",
'/',
"3",
"2/3" },
885 {
"2/3",
'/',
"5/3",
"2/5" },
886 {
"2/3",
'/',
"5/7",
"14/15" },
887 {
"0",
'/',
"0",
"NaN" },
888 {
"42",
'/',
"0",
"NaN" },
889 {
"-42",
'/',
"0",
"NaN" },
890 {
"infty",
'/',
"0",
"NaN" },
891 {
"-infty",
'/',
"0",
"NaN" },
892 {
"NaN",
'/',
"0",
"NaN" },
893 {
"0",
'/',
"NaN",
"NaN" },
894 {
"42",
'/',
"NaN",
"NaN" },
895 {
"-42",
'/',
"NaN",
"NaN" },
896 {
"infty",
'/',
"NaN",
"NaN" },
897 {
"-infty",
'/',
"NaN",
"NaN" },
898 {
"NaN",
'/',
"NaN",
"NaN" },
899 {
"0",
'/',
"infty",
"0" },
900 {
"42",
'/',
"infty",
"0" },
901 {
"-42",
'/',
"infty",
"0" },
902 {
"infty",
'/',
"infty",
"NaN" },
903 {
"-infty",
'/',
"infty",
"NaN" },
904 {
"NaN",
'/',
"infty",
"NaN" },
905 {
"0",
'/',
"-infty",
"0" },
906 {
"42",
'/',
"-infty",
"0" },
907 {
"-42",
'/',
"-infty",
"0" },
908 {
"infty",
'/',
"-infty",
"NaN" },
909 {
"-infty",
'/',
"-infty",
"NaN" },
910 {
"NaN",
'/',
"-infty",
"NaN" },
911 {
"1",
'-',
"1/3",
"2/3" },
912 {
"1/3",
'+',
"1/2",
"5/6" },
913 {
"1/2",
'+',
"1/2",
"1" },
914 {
"3/4",
'-',
"1/4",
"1/2" },
915 {
"1/2",
'-',
"1/3",
"1/6" },
916 {
"infty",
'+',
"42",
"infty" },
917 {
"infty",
'+',
"infty",
"infty" },
918 {
"42",
'+',
"infty",
"infty" },
919 {
"infty",
'-',
"infty",
"NaN" },
920 {
"infty",
'*',
"infty",
"infty" },
921 {
"infty",
'*',
"-infty",
"-infty" },
922 {
"-infty",
'*',
"infty",
"-infty" },
923 {
"-infty",
'*',
"-infty",
"infty" },
924 {
"0",
'*',
"infty",
"NaN" },
925 {
"1",
'*',
"infty",
"infty" },
926 {
"infty",
'*',
"0",
"NaN" },
927 {
"infty",
'*',
"42",
"infty" },
928 {
"42",
'-',
"infty",
"-infty" },
929 {
"infty",
'+',
"-infty",
"NaN" },
930 {
"4",
'g',
"6",
"2" },
931 {
"5",
'g',
"6",
"1" },
932 {
"42",
'm',
"3",
"3" },
933 {
"42",
'M',
"3",
"42" },
934 {
"3",
'm',
"42",
"3" },
935 {
"3",
'M',
"42",
"42" },
936 {
"42",
'm',
"infty",
"42" },
937 {
"42",
'M',
"infty",
"infty" },
938 {
"42",
'm',
"-infty",
"-infty" },
939 {
"42",
'M',
"-infty",
"42" },
940 {
"42",
'm',
"NaN",
"NaN" },
941 {
"42",
'M',
"NaN",
"NaN" },
942 {
"infty",
'm',
"-infty",
"-infty" },
943 {
"infty",
'M',
"-infty",
"infty" },
972 "unexpected result",
return -1);
993 "{ [i,j] : 2 * [i/2] + 3 * [j/4] <= 10 and 2 i = j }",
994 "{ [m, w] : exists a : w - 2m - 5 <= 3a <= m - 2w }",
995 "{ [m, w] : exists a : w >= 0 and a < m and -1 + w <= a <= 2m - w }",
1015 "expecting no existentials",
return -1);
1050 assert(bset && bset->n_div == 1);
1073 assert(bset && bset->n_div == 1);
1096 assert(bset && bset->n_div == 1);
1140 assert(bset && bset->n_div == 0);
1161 assert(bset && bset->n_div == 1);
1265 str =
"{ [i] : exists (e0, e1: 3e1 >= 1 + 2e0 and "
1266 "8e1 <= -1 + 5i - 5e0 and 2e1 >= 1 + 2i - 5e0) }";
1276 str =
"{ [i,j,k] : 3 + i + 2j >= 0 and 2 * [(i+2j)/4] <= k }";
1286 "result not as accurate as expected",
return -1);
1300 input = fopen(filename,
"r");
1335 input = fopen(filename,
"r");
1359 {
"{ [i] : 0 <= i <= 10 }",
"{ [0] }" },
1360 {
"{ [i] : 0 <= i }",
"{ [i] : 0 <= i }" },
1361 {
"{ [i] : i <= 10 }",
"{ [i] : i <= 0 }" },
1362 {
"{ [i] : false }",
"{ [i] : false }" },
1407 str =
"[m] -> { [i0] : exists (e0, e1: e1 <= 1 + i0 and "
1408 "m >= 3 and 4i0 <= 2 + m and e1 >= i0 and "
1409 "e1 >= 0 and e1 <= 2 and e1 >= 1 + 2e0 and "
1410 "2e1 <= 1 + m + 4e0 and 2e1 >= 2 - m + 4i0 - 4e0) }";
1424 str =
"{ [a, b, c, 0] : exists (e0 = [(b)/32], e1 = [(c)/32]: "
1425 "32e0 = b and 32e1 = c); "
1426 "[a, 0, c, 0] : exists (e0 = [(c)/32]: 32e0 = c) }";
1433 str =
"{ [a] : exists e0, e1, e2: 32e1 = 31 + 31a + 31e0 and "
1434 "32e2 = 31 + 31e0 }";
1437 str =
"{ [a] : exists e : a = 32 e }";
1463 str =
"{[x, y] : x = 0 or 2*((x+y)//2) <= y + 2 }";
1469 if (is_universe < 0)
1473 "hull should not have any constraints",
1488 "{ [i,j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
1489 "{ [i,j] : i >= 1 }" },
1491 "{ [n,i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
1492 "(j mod 4 = 2 and k mod 6 = n) }",
1493 "{ [n,i,j,k] : j mod 4 = 2 }" },
1495 "{ [0,x,y] : x <= -1; [1,x,y] : x <= y <= -x; [2,x,y] : x <= 1 }",
1496 "{ [t,x,y] : 0 <= t <= 2 and x <= 1 }" },
1498 "{ [a, b] : b <= 0 and "
1499 "2*floor((-2*floor((b)/2))/5) >= a - floor((b)/2); "
1500 "[a, b] : a mod 2 = 0 }",
1540 str =
"{ [x, y] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x;"
1541 "[y, x] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x }";
1572 {
"{ S[x, y] : 0 <= x, y < 10 }",
"{ S[0, 0] }",
"{ S[10, 10] }" },
1573 {
"[N] -> { S[x, y] : N <= x, y < N + 10 }",
1574 "[N] -> { S[N, N] }",
"{ S[10, 10] }" },
1575 {
"{ S[x, y] : 0 <= x + y, x - y < 10 }",
1576 "{ S[0, -4] }",
"{ S[10, 9] }" },
1577 {
"{ [i=0:10] : exists (e0, e1: 3e1 >= 1 + 2e0 and "
1578 "8e1 <= -1 + 5i - 5e0 and 2e1 >= 1 + 2i - 5e0) }",
1579 "{ [3] }",
"{ [8] }" },
1580 {
"[N] -> { [w = 0:17] : exists (e0: w < 2N and "
1581 "-1 + w <= e0 <= w and 2e0 >= N + w and w <= 2e0 <= 15 + w) }",
1582 "[N] -> { [N] }",
"{ [9] }" },
1604 r = multi_aff_check_plain_equal(
offset,
str);
1607 r = multi_val_check_plain_equal(
size,
str);
1608 isl_multi_aff_free(
offset);
1609 isl_multi_val_free(
size);
1628 input = fopen(filename,
"r");
1652 {
"{ [i0, i1, i2] : (i2 = 1 and i0 = 0 and i1 >= 0) or "
1653 "(i0 = 1 and i1 = 0 and i2 = 1) or "
1654 "(i0 = 0 and i1 = 0 and i2 = 0) }",
1655 "{ [i0, i1, i2] : i0 >= 0 and i2 >= i0 and i2 <= 1 and i1 >= 0 }" },
1656 {
"[n] -> { [i0, i1, i0] : i0 <= -4 + n; "
1657 "[i0, i0, i2] : n = 6 and i0 >= 0 and i2 <= 7 - i0 and "
1658 "i2 <= 5 and i2 >= 4; "
1659 "[3, i1, 3] : n = 5 and i1 <= 2 and i1 >= 0 }",
1660 "[n] -> { [i0, i1, i2] : i2 <= -1 + n and 2i2 <= -6 + 3n - i0 and "
1661 "i2 <= 5 + i0 and i2 >= i0 }" },
1662 {
"{ [x, y] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x }",
1663 "{ [x, y] : 1 = 0 }" },
1664 {
"{ [x, y, z] : 0 <= x, y, z <= 10; [x, y, 0] : x >= 0 and y > 0; "
1665 "[x, y, 0] : x >= 0 and y < 0 }",
1666 "{ [x, y, z] : x >= 0 and 0 <= z <= 10 }" },
1667 {
"{ [a, b, c] : a <= 1 and -a < b <= 1 and 0 <= c <= 2 - a - b and "
1669 "[0, 2, 0]; [3, 1, 0] }",
1670 "{ [a, b, c] : b > -a and 2b >= -1 + a and 0 <= c <= a and "
1671 "5c <= 6 - a - 3b }" },
1712 "unexpected convex hull",
return -1);
1737 isl_bool empty_before, empty_after;
1748 if (empty_before < 0 || empty_after < 0)
1768 map =
"{ [] -> [a, b, c] : 2b = 1 + a }";
1769 context =
"{ [] -> [a, b, c] : 2c = 2 + a }";
1772 map =
"{ [] -> [0, 0] }";
1773 context =
"{ [] -> [a, b] : a > b }";
1787 {
"{ [i] -> [j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
1788 "{ [i] -> [j] : i >= 1 }",
1789 "{ [i] -> [j] : j >= 1 or i >= 2 and j <= 10 }" },
1790 {
"{ [n] -> [i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
1791 "(j mod 4 = 2 and k mod 6 = n) }",
1792 "{ [n] -> [i,j,k] : j mod 4 = 2 }",
1793 "{ [n] -> [i,j,k] : (i mod 3 = 2) or (k mod 6 = n) }" },
1794 {
"{ [i] -> [j] : i > j and (exists a,b : i <= 2a + 5b <= 2) }",
1795 "{ [i] -> [j] : i > j }",
1796 "{ [i] -> [j] : exists a,b : i <= 2a + 5b <= 2 }" },
1823 "incorrect gist result",
return -1);
1835 {
"{ [i] : exists (e0, e1: 3e1 >= 1 + 2e0 and "
1836 "8e1 <= -1 + 5i - 5e0 and 2e1 >= 1 + 2i - 5e0) }",
1837 "{ [i] : i >= 0 }" },
1851 for (i = 0; i <
n; ++i) {
1866 "operation not expected to succeed",
1878 "{ [1, b, 2 - b] : -1 <= b <= 2 }",
1880 {
"{ [a, b, c] : a <= 15 and a >= 1 }",
1881 "{ [a, b, c] : exists (e0 = floor((-1 + a)/16): a >= 1 and "
1882 "c <= 30 and 32e0 >= -62 + 2a + 2b - c and b >= 0) }",
1883 "{ [a, b, c] : a <= 15 }" },
1884 {
"{ : }",
"{ : 1 = 0 }",
"{ : }" },
1885 {
"{ : 1 = 0 }",
"{ : 1 = 0 }",
"{ : }" },
1886 {
"[M] -> { [x] : exists (e0 = floor((-2 + x)/3): 3e0 = -2 + x) }",
1887 "[M] -> { [3M] }" ,
"[M] -> { [x] : 1 = 0 }" },
1888 {
"{ [m, n, a, b] : a <= 2147 + n }",
1889 "{ [m, n, a, b] : (m >= 1 and n >= 1 and a <= 2148 - m and "
1890 "b <= 2148 - n and b >= 0 and b >= 2149 - n - a) or "
1891 "(n >= 1 and a >= 0 and b <= 2148 - n - a and "
1893 "{ [m, n, ku, kl] }" },
1894 {
"{ [a, a, b] : a >= 10 }",
1895 "{ [a, b, c] : c >= a and c <= b and c >= 2 }",
1896 "{ [a, a, b] : a >= 10 }" },
1897 {
"{ [i, j] : i >= 0 and i + j >= 0 }",
"{ [i, j] : i <= 0 }",
1898 "{ [0, j] : j >= 0 }" },
1900 {
"[t1] -> { [i4, i6] : exists (e0 = floor((1530 - 4t1 - 5i4)/20): "
1901 "20e0 <= 1530 - 4t1 - 5i4 and 20e0 >= 1511 - 4t1 - 5i4 and "
1902 "5e0 <= 381 - t1 and i4 <= 1) }",
1903 "[t1] -> { [i4, i6] : exists (e0 = floor((-t1 + i6)/5): "
1904 "5e0 = -t1 + i6 and i6 <= 6 and i6 >= 3) }",
1905 "[t1] -> { [i4, i6] : exists (e0 = floor((1530 - 4t1 - 5i4)/20): "
1906 "i4 <= 1 and 5e0 <= 381 - t1 and 20e0 <= 1530 - 4t1 - 5i4 and "
1907 "20e0 >= 1511 - 4t1 - 5i4) }" },
1909 {
"[t1, t2] -> { [i4, i5, i6] : exists (e0 = floor((1 + i4)/2), "
1910 "e1 = floor((1530 - 4t1 - 5i4)/20), "
1911 "e2 = floor((-4t1 - 5i4 + 10*floor((1 + i4)/2))/20), "
1912 "e3 = floor((-1 + i4)/2): t2 = 0 and 2e3 = -1 + i4 and "
1913 "20e2 >= -19 - 4t1 - 5i4 + 10e0 and 5e2 <= 1 - t1 and "
1914 "2e0 <= 1 + i4 and 2e0 >= i4 and "
1915 "20e1 <= 1530 - 4t1 - 5i4 and "
1916 "20e1 >= 1511 - 4t1 - 5i4 and i4 <= 1 and "
1917 "5e1 <= 381 - t1 and 20e2 <= -4t1 - 5i4 + 10e0) }",
1918 "[t1, t2] -> { [i4, i5, i6] : exists (e0 = floor((-17 + i4)/2), "
1919 "e1 = floor((-t1 + i6)/5): 5e1 = -t1 + i6 and "
1920 "2e0 <= -17 + i4 and 2e0 >= -18 + i4 and "
1921 "10e0 <= -91 + 5i4 + 4i6 and "
1922 "10e0 >= -105 + 5i4 + 4i6) }",
1923 "[t1, t2] -> { [i4, i5, i6] : exists (e0 = floor((381 - t1)/5), "
1924 "e1 = floor((-1 + i4)/2): t2 = 0 and 2e1 = -1 + i4 and "
1925 "i4 <= 1 and 5e0 <= 381 - t1 and 20e0 >= 1511 - 4t1 - 5i4) }" },
1926 {
"{ [0, 0, q, p] : -5 <= q <= 5 and p >= 0 }",
1927 "{ [a, b, q, p] : b >= 1 + a }",
1928 "{ [a, b, q, p] : false }" },
1929 {
"[n] -> { [x] : x = n && x mod 32 = 0 }",
1930 "[n] -> { [x] : x mod 32 = 0 }",
1931 "[n] -> { [x = n] }" },
1932 {
"{ [x] : x mod 6 = 0 }",
"{ [x] : x mod 3 = 0 }",
1933 "{ [x] : x mod 2 = 0 }" },
1934 {
"{ [x] : x mod 3200 = 0 }",
"{ [x] : x mod 10000 = 0 }",
1935 "{ [x] : x mod 128 = 0 }" },
1936 {
"{ [x] : x mod 3200 = 0 }",
"{ [x] : x mod 10 = 0 }",
1937 "{ [x] : x mod 3200 = 0 }" },
1938 {
"{ [a, b, c] : a mod 2 = 0 and a = c }",
1939 "{ [a, b, c] : b mod 2 = 0 and b = c }",
1940 "{ [a, b, c = a] }" },
1941 {
"{ [a, b, c] : a mod 6 = 0 and a = c }",
1942 "{ [a, b, c] : b mod 2 = 0 and b = c }",
1943 "{ [a, b, c = a] : a mod 3 = 0 }" },
1944 {
"{ [x] : 0 <= x <= 4 or 6 <= x <= 9 }",
1945 "{ [x] : 1 <= x <= 3 or 7 <= x <= 8 }",
1947 {
"{ [x,y] : x < 0 and 0 <= y <= 4 or x >= -2 and -x <= y <= 10 + x }",
1948 "{ [x,y] : 1 <= y <= 3 }",
1970 isl_bool equal_input, equal_intersection;
1988 if (
equal < 0 || equal_input < 0 || equal_intersection < 0)
1992 "incorrect gist result",
return -1);
1995 "gist modified input",
return -1);
1998 "inconsistent gist test case",
return -1);
2004 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : "
2005 "exists (e0 = [(15 + p0 + 15p6 + 15p10)/16], e1 = [(p5)/8], "
2006 "e2 = [(p6)/128], e3 = [(8p2 - p5)/128], "
2007 "e4 = [(128p3 - p6)/4096]: 8e1 = p5 and 128e2 = p6 and "
2008 "128e3 = 8p2 - p5 and 4096e4 = 128p3 - p6 and p2 >= 0 and "
2009 "16e0 >= 16 + 16p6 + 15p10 and p2 <= 15 and p3 >= 0 and "
2010 "p3 <= 31 and p6 >= 128p3 and p5 >= 8p2 and p10 >= 0 and "
2011 "16e0 <= 15 + p0 + 15p6 + 15p10 and 16e0 >= p0 + 15p6 + 15p10 and "
2012 "p10 <= 15 and p10 <= -1 + p0 - p6) }";
2014 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : exists (e0 = [(p5)/8], "
2015 "e1 = [(p6)/128], e2 = [(8p2 - p5)/128], "
2016 "e3 = [(128p3 - p6)/4096]: 8e0 = p5 and 128e1 = p6 and "
2017 "128e2 = 8p2 - p5 and 4096e3 = 128p3 - p6 and p5 >= -7 and "
2018 "p2 >= 0 and 8p2 <= -1 + p0 and p2 <= 15 and p3 >= 0 and "
2019 "p3 <= 31 and 128p3 <= -1 + p0 and p6 >= -127 and "
2020 "p5 <= -1 + p0 and p6 <= -1 + p0 and p6 >= 128p3 and "
2021 "p0 >= 1 and p5 >= 8p2 and p10 >= 0 and p10 <= 15 ) }";
2024 assert(bset1 && bset1->n_div == 0);
2030 str =
"[t1] -> { S_0[] -> A[o0] : (exists (e0 = [(-t1 + o0)/16]: "
2031 "16e0 = -t1 + o0 and o0 >= 0 and o0 <= 15 and t1 >= 0)) or "
2032 "(exists (e0 = [(-1 + t1)/16], "
2033 "e1 = [(-16 + t1 - 16e0)/4294967296]: "
2034 "4294967296e1 = -16 + t1 - o0 - 16e0 and "
2035 "16e0 <= -1 + t1 and 16e0 >= -16 + t1 and o0 >= 0 and "
2036 "o0 <= 4294967295 and t1 <= -1)) }";
2038 str =
"[t1] -> { S_0[] -> A[o0] : t1 >= 0 and t1 <= 4294967295 }";
2072 one =
set &&
set->n == 1;
2080 "coalesced set not equal to input",
return -1);
2081 if (check_one && !one)
2083 "coalesced set should not be a union",
return -1);
2097 { 1,
"{ [x,y,z] : y + 2 >= 0 and x - y + 1 >= 0 and "
2098 "-x - y + 1 >= 0 and -3 <= z <= 3;"
2099 "[x,y,z] : -x+z + 20 >= 0 and -x-z + 20 >= 0 and "
2100 "x-z + 20 >= 0 and x+z + 20 >= 0 and "
2102 { 1,
"{ [x,y] : 0 <= x,y <= 10; [5,y]: 4 <= y <= 11 }" },
2103 { 1,
"{ [x,0,0] : -5 <= x <= 5; [0,y,1] : -5 <= y <= 5 }" },
2104 { 1,
"{ [x,y] : 0 <= x <= 10 and 0 >= y >= -1 and x+y >= 0; [0,1] }" },
2105 { 1,
"{ [x,y] : (0 <= x,y <= 4) or (2 <= x,y <= 5 and x + y <= 9) }" },
2106 { 0,
"{ [x, y, z] : 0 <= x,y,z <= 100 and 0 < z <= 2 + 2x + 2y; "
2107 "[x, y, 0] : x,y <= 100 and y <= 9 + 11x and x <= 9 + 11y }" },
2108 { 1,
"{ [0:1, 0:1]; [0, 2:3] }" },
2109 { 1,
"{ [0:1, 0:1]; [0, 2:3]; [1, -2:-1] }" },
2110 { 1,
"{ [0:3, 0:1]; [1:2, 2:5] }" },
2111 { 1,
"{ [0:3, 0:1]; [0:2, 2:5] }" },
2112 { 1,
"{ [0:3, 0:1]; [1:3, 2:5] }" },
2113 { 0,
"{ [0:3, 0:1]; [1:4, 2:5] }" },
2114 { 0,
"{ [0:3, 0:1]; [1:5, 2:5] }" },
2152 { 1,
"{[x,y]: x >= 0 & x <= 10 & y >= 0 & y <= 10 or "
2153 "y >= x & x >= 2 & 5 >= y }" },
2154 { 1,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
2155 "x + y >= 10 & y <= x & x + y <= 20 & y >= 0}" },
2156 { 0,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
2157 "x + y >= 10 & y <= x & x + y <= 19 & y >= 0}" },
2158 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2159 "y >= 0 & x >= 6 & x <= 10 & y <= x}" },
2160 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2161 "y >= 0 & x >= 7 & x <= 10 & y <= x}" },
2162 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2163 "y >= 0 & x >= 6 & x <= 10 & y + 1 <= x}" },
2164 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 6}" },
2165 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 7 & y <= 6}" },
2166 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 5}" },
2167 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 7}" },
2168 { 1,
"[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }" },
2169 { 0,
"{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}" },
2170 { 1,
"[n] -> { [i] : 1 <= i and i <= n - 1 or 2 <= i and i <= n }" },
2171 { 0,
"[n] -> { [[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
2172 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
2173 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
2174 "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and "
2175 "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and "
2176 "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and "
2177 "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and "
2178 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);"
2179 "[[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
2180 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
2181 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
2182 "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and "
2183 "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and "
2184 "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and "
2185 "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and "
2186 "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and "
2187 "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and "
2188 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }" },
2189 { 0,
"[n, m] -> { [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and "
2190 "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or "
2191 "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and "
2192 "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }" },
2193 { 0,
"[M, N] -> { [[i0, i1, i2, i3, i4, i5, i6] -> "
2194 "[o0, o1, o2, o3, o4, o5, o6]] : "
2195 "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and "
2196 "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and "
2197 "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and "
2198 "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 "
2199 "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and "
2200 "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 "
2201 "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and "
2202 "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 "
2203 "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or "
2204 "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and "
2205 "o6 >= i3 + i6 - o3 and M >= 0 and "
2206 "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and "
2207 "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }" },
2208 { 0,
"[M, N] -> { [o0] : (o0 = 0 and M >= 1 and N >= 2) or "
2209 "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or "
2210 "(o0 = 0 and M >= 2 and N >= 3) or "
2211 "(M = 0 and o0 = 0 and N >= 3) }" },
2212 { 0,
"{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and "
2213 "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or "
2214 "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and "
2215 "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }" },
2216 { 0,
"[M] -> { [i1] : (i1 >= 2 and i1 <= M) or (i1 = M and M >= 1) }" },
2217 { 0,
"{[x,y] : x,y >= 0; [x,y] : 10 <= x <= 20 and y >= -1 }" },
2218 { 1,
"{ [x, y] : (x >= 1 and y >= 1 and x <= 2 and y <= 2) or "
2219 "(y = 3 and x = 1) }" },
2220 { 1,
"[M] -> { [i0, i1, i2, i3, i4] : (i1 >= 3 and i4 >= 2 + i2 and "
2221 "i2 >= 2 and i0 >= 2 and i3 >= 1 + i2 and i0 <= M and "
2222 "i1 <= M and i3 <= M and i4 <= M) or "
2223 "(i1 >= 2 and i4 >= 1 + i2 and i2 >= 2 and i0 >= 2 and "
2224 "i3 >= 1 + i2 and i0 <= M and i1 <= -1 + M and i3 <= M and "
2225 "i4 <= -1 + M) }" },
2226 { 1,
"{ [x, y] : (x >= 0 and y >= 0 and x <= 10 and y <= 10) or "
2227 "(x >= 1 and y >= 1 and x <= 11 and y <= 11) }" },
2228 { 0,
"{[x,0] : x >= 0; [x,1] : x <= 20}" },
2229 { 1,
"{ [x, 1 - x] : 0 <= x <= 1; [0,0] }" },
2230 { 1,
"{ [0,0]; [i,i] : 1 <= i <= 10 }" },
2231 { 0,
"{ [0,0]; [i,j] : 1 <= i,j <= 10 }" },
2232 { 1,
"{ [0,0]; [i,2i] : 1 <= i <= 10 }" },
2233 { 0,
"{ [0,0]; [i,2i] : 2 <= i <= 10 }" },
2234 { 0,
"{ [1,0]; [i,2i] : 1 <= i <= 10 }" },
2235 { 0,
"{ [0,1]; [i,2i] : 1 <= i <= 10 }" },
2236 { 0,
"{ [a, b] : exists e : 2e = a and "
2237 "a >= 0 and (a <= 3 or (b <= 0 and b >= -4 + a)) }" },
2238 { 0,
"{ [i, j, i', j'] : i <= 2 and j <= 2 and "
2239 "j' >= -1 + 2i + j - 2i' and i' <= -1 + i and "
2240 "j >= 1 and j' <= i + j - i' and i >= 1; "
2242 { 1,
"{ [i,j] : exists a,b : i = 2a and j = 3b; "
2243 "[i,j] : exists a : j = 3a }" },
2244 { 1,
"{ [a, b, c] : (c <= 7 - b and b <= 1 and b >= 0 and "
2245 "c >= 3 + b and b <= 3 + 8a and b >= -26 + 8a and "
2247 "(b <= 1 and c <= 7 and b >= 0 and c >= 4 + b and "
2248 "b <= 3 + 8a and b >= -26 + 8a and a >= 3) }" },
2249 { 1,
"{ [a, 0, c] : c >= 1 and c <= 29 and c >= -1 + 8a and "
2250 "c <= 6 + 8a and a >= 3; "
2251 "[a, -1, c] : c >= 1 and c <= 30 and c >= 8a and "
2252 "c <= 7 + 8a and a >= 3 and a <= 4 }" },
2253 { 1,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2254 "[x,0] : 3 <= x <= 4 }" },
2255 { 1,
"{ [x,y] : 0 <= x <= 3 and y >= 0 and x + 3y <= 6; "
2256 "[x,0] : 4 <= x <= 5 }" },
2257 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2258 "[x,0] : 3 <= x <= 5 }" },
2259 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + y <= 4; "
2260 "[x,0] : 3 <= x <= 4 }" },
2261 { 1,
"{ [i0, i1] : i0 <= 122 and i0 >= 1 and 128i1 >= -249 + i0 and "
2263 "[i0, 0] : i0 >= 123 and i0 <= 124 }" },
2264 { 1,
"{ [0,0]; [1,1] }" },
2265 { 1,
"[n] -> { [k] : 16k <= -1 + n and k >= 1; [0] : n >= 2 }" },
2266 { 1,
"{ [k, ii, k - ii] : ii >= -6 + k and ii <= 6 and ii >= 1 and "
2268 "[k, 0, k] : k <= 6 and k >= 1 }" },
2269 { 1,
"{ [i,j] : i = 4 j and 0 <= i <= 100;"
2270 "[i,j] : 1 <= i <= 100 and i >= 4j + 1 and i <= 4j + 2 }" },
2271 { 1,
"{ [x,y] : x % 2 = 0 and y % 2 = 0; [x,x] : x % 2 = 0 }" },
2272 { 1,
"[n] -> { [1] : n >= 0;"
2273 "[x] : exists (e0 = floor((x)/2): x >= 2 and "
2274 "2e0 >= -1 + x and 2e0 <= x and 2e0 <= n) }" },
2275 { 1,
"[n] -> { [x, y] : exists (e0 = floor((x)/2), e1 = floor((y)/3): "
2276 "3e1 = y and x >= 2 and 2e0 >= -1 + x and "
2277 "2e0 <= x and 2e0 <= n);"
2278 "[1, y] : exists (e0 = floor((y)/3): 3e0 = y and "
2280 { 1,
"[t1] -> { [i0] : (exists (e0 = floor((63t1)/64): "
2281 "128e0 >= -134 + 127t1 and t1 >= 2 and "
2282 "64e0 <= 63t1 and 64e0 >= -63 + 63t1)) or "
2284 { 1,
"{ [i, i] : exists (e0 = floor((1 + 2i)/3): 3e0 <= 2i and "
2285 "3e0 >= -1 + 2i and i <= 9 and i >= 1);"
2287 { 1,
"{ [t1] : exists (e0 = floor((-11 + t1)/2): 2e0 = -11 + t1 and "
2288 "t1 >= 13 and t1 <= 16);"
2289 "[t1] : t1 <= 15 and t1 >= 12 }" },
2290 { 1,
"{ [x,y] : x = 3y and 0 <= y <= 2; [-3,-1] }" },
2291 { 1,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-2] }" },
2292 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-2,-2] }" },
2293 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-1] }" },
2294 { 1,
"{ [i] : exists j : i = 4 j and 0 <= i <= 100;"
2295 "[i] : exists j : 1 <= i <= 100 and i >= 4j + 1 and "
2297 { 1,
"{ [c0] : (exists (e0 : c0 - 1 <= 3e0 <= c0)) or "
2298 "(exists (e0 : 3e0 = -2 + c0)) }" },
2299 { 0,
"[n, b0, t0] -> "
2300 "{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
2301 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2302 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2303 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2304 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 >= 8 + n and "
2305 "3i4 <= -96 + 3t0 + i0 and 3i4 >= -95 - n + 3t0 + i0 and "
2306 "i8 >= -157 + i0 - 4i4 and i8 >= 0 and "
2307 "i8 <= -33 + i0 - 4i4 and 3i8 <= -91 + 4n - i0)) or "
2308 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2309 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2310 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2311 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 <= 7 + n and "
2312 "4i4 <= -3 + i0 and 3i4 <= -96 + 3t0 + i0 and "
2313 "3i4 >= -95 - n + 3t0 + i0 and i8 >= -157 + i0 - 4i4 and "
2314 "i8 >= 0 and i8 <= -4 + i0 - 3i4 and i8 <= -41 + i0));"
2315 "[i0, i1, i2, i3, 0, i5, i6, i7, i8, i9, i10, i11, i12] : "
2316 "(exists (e0 = floor((i8)/32): b0 = 0 and 32e0 = i8 and "
2317 "n <= 2147483647 and t0 <= 31 and t0 >= 0 and i0 >= 11 and "
2318 "i0 >= 96 - 3t0 and i0 <= 95 + n - 3t0 and i0 <= 7 + n and "
2319 "i8 >= -40 + i0 and i8 <= -10 + i0)) }" },
2320 { 0,
"{ [i0, i1, i2] : "
2321 "(exists (e0, e1 = floor((i0)/32), e2 = floor((i1)/32): "
2322 "32e1 = i0 and 32e2 = i1 and i1 >= -31 + i0 and "
2323 "i1 <= 31 + i0 and i2 >= -30 + i0 and i2 >= -30 + i1 and "
2324 "32e0 >= -30 + i0 and 32e0 >= -30 + i1 and "
2325 "32e0 >= -31 + i2 and 32e0 <= 30 + i2 and 32e0 <= 31 + i1 and "
2326 "32e0 <= 31 + i0)) or "
2328 { 1,
"{ [a, b, c] : 2b = 1 + a and 2c = 2 + a; [0, 0, 0] }" },
2329 { 1,
"{ [a, a, b, c] : 32*floor((a)/32) = a and 2*floor((b)/2) = b and "
2330 "2*floor((c)/2) = c and 0 <= a <= 192;"
2331 "[224, 224, b, c] : 2*floor((b)/2) = b and 2*floor((c)/2) = c }"
2333 { 1,
"[n] -> { [a,b] : (exists e : 1 <= a <= 7e and 9e <= b <= n) or "
2334 "(0 <= a <= b <= n) }" },
2335 { 1,
"{ [a, b] : 0 <= a <= 2 and b >= 0 and "
2336 "((0 < b <= 13) or (2*floor((a + b)/2) >= -5 + a + 2b)) }" },
2337 { 1,
"{ [a] : (2 <= a <= 5) or (a mod 2 = 1 and 1 <= a <= 5) }" },
2338 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2339 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2340 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2341 "b = 3 and 9e0 <= -19 + 2c)) }" },
2342 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2343 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2344 "(a = 4 and b = 3 and "
2345 "9*floor((-16 + 2c)/9) <= -19 + 2c) }" },
2346 { 0,
"{ [a, b, c] : (b <= 2 and b <= -2 + a) or "
2347 "(b = -1 + a and 0 < a <= 3 and "
2348 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2349 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2350 "b = 3 and 9e0 <= -19 + 2c)) }" },
2351 { 1,
"{ [y, x] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2353 { 1,
"{ [x, y] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2355 { 1,
"{ [1, y] : -1 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2356 { 1,
"{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2357 { 1,
"{ [x, y] : 0 <= x <= 10 and x - 4*floor(x/4) <= 1 and y <= 0; "
2358 "[x, y] : 0 <= x <= 10 and x - 4*floor(x/4) > 1 and y <= 0; "
2359 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) <= 1 and 0 < y; "
2360 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) > 1 and 0 < y }" },
2361 { 1,
"{ [x, 0] : 0 <= x <= 10 and x mod 2 = 0; "
2362 "[x, 0] : 0 <= x <= 10 and x mod 2 = 1; "
2363 "[x, y] : 0 <= x <= 10 and 1 <= y <= 10 }" },
2364 { 1,
"{ [a] : a <= 8 and "
2365 "(a mod 10 = 7 or a mod 10 = 8 or a mod 10 = 9) }" },
2366 { 1,
"{ [x, y] : 2y = -x and x <= 0 or "
2367 "x <= -1 and 2y <= -x - 1 and 2y >= x - 1 }" },
2368 { 0,
"{ [x, y] : 2y = -x and x <= 0 or "
2369 "x <= -2 and 2y <= -x - 1 and 2y >= x - 1 }" },
2370 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2371 "(a < 0 and 3*floor((a)/3) < a) }" },
2372 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2373 "(a < -1 and 3*floor((a)/3) < a) }" },
2374 { 1,
"{ [a, b] : a <= 1024 and b >= 0 and "
2375 "((-31 - a + b <= 32*floor((-1 - a)/32) <= -33 + b and "
2376 "32*floor((-1 - a)/32) <= -16 + b + 16*floor((-1 - a)/16))"
2377 "or (2 <= a <= 15 and b < a)) }" },
2378 { 1,
"{ [a] : a > 0 and ((16*floor((a)/16) < a and "
2379 "32*floor((a)/32) < a) or a <= 15) }" },
2380 { 1,
"{ [a, b, c, d] : (-a + d) mod 64 = 0 and a <= 8 and b <= 1 and "
2381 "10 - a <= c <= 3 and d >= 5 and 9 - 64b <= d <= 70;"
2382 "[a, b = 1, c, d] : (-a + d) mod 64 = 0 and a <= 8 and c >= 4 and "
2383 "10 - a <= c <= 5 and 5 <= d <= 73 - c }" },
2384 { 1,
"[n, m] -> { S_0[i] : (-n + i) mod 3 = 0 and m >= 3 + n and "
2385 "i >= n and 3*floor((2 + n + 2m)/3) <= n + 3m - i; "
2386 "S_0[n] : n <= m <= 2 + n }" },
2387 { 1,
"{ [a, b] : exists (e0: 0 <= a <= 1 and b >= 0 and "
2388 "2e0 >= -5 + a + 2b and 2e0 >= -1 + a + b and "
2390 "[a, b] : exists (e0: 0 <= a <= 1 and 2e0 >= -5 + a + 2b and "
2391 "2e0 >= -1 - a + b and 2e0 <= -a + b and "
2392 "2e0 < -a + 2b) }" },
2393 { 1,
"{ [i, j, i - 8j] : 8 <= i <= 63 and -7 + i <= 8j <= i; "
2394 "[i, 0, i] : 0 <= i <= 7 }" },
2395 { 1,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [1, 1] }" },
2396 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [0, 2] }" },
2397 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [-1, 3] }" },
2398 { 1,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [1, 1] }" },
2399 { 0,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [2, 1] }" },
2400 { 0,
"{ [a, c] : (2 + a) mod 4 = 0 or "
2401 "(c = 4 + a and 4 * floor((a)/4) = a and a >= 0 and a <= 4) or "
2402 "(c = 3 + a and 4 * floor((-1 + a)/4) = -1 + a and "
2403 "a > 0 and a <= 5) }" },
2404 { 1,
"{ [1, 0, 0]; [a, b, c] : -1 <= -a < b <= 0 and 2c > b }" },
2405 { 0,
"{ [j, a, l] : a mod 2 = 0 and j <= 29 and a >= 2 and "
2406 "2a <= -5 + j and 32j + 2a + 2 <= 4l < 33j; "
2407 "[j, 0, l] : 4 <= j <= 29 and -3 + 33j <= 4l <= 33j }" },
2408 { 0,
"{ [0:1, 0:1]; [0, 2:3] }" },
2409 { 1,
"{ [a] : (a = 0 or ((1 + a) mod 2 = 0 and 0 < a <= 15) or "
2410 "((a) mod 2 = 0 and 0 < a <= 15)) }" },
2411 { 1,
"{ rat: [0:2]; rat: [1:3] }" },
2422 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2423 "[[S_L309_IN[] -> T11[]] -> ce_imag2[1, o1]] : "
2424 "(y = 201 and o1 <= 239 and o1 >= 212) or "
2425 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 198 and y >= 3 and "
2426 "o1 <= 239 and o1 >= 212)) or "
2427 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 201 and y >= 3 and "
2428 "o1 <= 241 and o1 >= 240));"
2429 "[S_L220_OUT[] -> T7[]] -> "
2430 "[[S_L309_IN[] -> T11[]] -> ce_imag2[0, o1]] : "
2431 "(y = 2 and o1 <= 241 and o1 >= 212) or "
2432 "(exists (e0 = [(-2 + y)/3]: 3e0 = -2 + y and y <= 200 and "
2433 "y >= 5 and o1 <= 241 and o1 >= 212)) }";
2437 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2438 "[[S_L309_IN[] -> T11[]] -> ce_imag2[o0, o1]] : "
2439 "exists (e0 = [(-1 - y + o0)/3]: 3e0 = -1 - y + o0 and "
2440 "y <= 201 and o0 <= 2 and o1 >= 212 and o1 <= 241 and "
2441 "o0 >= 3 - y and o0 <= -2 + y and o0 >= 0) }";
2484 "coalesced set not equal to input",
2502 str1 =
"{ [x, y] : x, y >= 0 and x + 2y <= 1 and 2x + y <= 1 }";
2503 str2 =
"{ [x,0] : -1 <= x <= 1 and x mod 2 = 1 }";
2524 str =
"{ [a, b, a + b] : a >= 0 and b >= 0 and 0 < a + b }";
2557 const char *s1,
const char *s2)
2581 const char *s1, *s2;
2583 s1 =
"{ [a, b] : b <= 0 or a <= 1 }";
2584 s2 =
"{ [a, b] : -1 <= -a < b }";
2595 const char *s1, *s2;
2597 s1 =
"{ [a, b, c] : b <= 0 }";
2598 s2 =
"{ [a, b, c] : -1 <= -a < b and (c >= 0 or c < 0) }";
2609 const char *s1, *s2;
2611 s1 =
"{ [a, b, c] : c <= 0 }";
2612 s2 =
"{ [a, b, c] : 0 <= a <= b <= c or (0 <= b <= c and a > 0) }";
2628 str1 =
"{ [a, b, c=0:17] : a <= 7 and 2b <= 11 - a and "
2629 "c <= -7 + 2a and 2c >= - 3 + 3a - 2b }";
2630 str2 =
"{ [a, b, c] : c > -15a and c >= -7 + 2a and c < 0 and "
2631 "3c <= -5 + 5a - 3b and 2b >= 11 - a }";
2647 str1 =
"{ [a, b, c] : 2c <= -a and b >= -a and b <= 5 and "
2648 "6c > -7a and 11c >= -5a - b and a <= 3 }";
2649 str2 =
"{ [a, b, c] : 6c > -7a and b >= -a and b <= 5 and "
2650 "11c >= -5a - b and a >= 4 and 2b <= a and 2c <= -a }";
2701 "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and "
2702 "2 x - 3 y + 3 >= 0 }");
2704 "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }");
2706 "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }");
2721 "{ [1] -> [[0,0] -> [0,1]]; [2] -> [[0,0] -> [1,1]]; "
2722 " [1] -> [[0,1] -> [1,1]]; [1] -> [[2,2] -> [3,2]]; "
2723 " [2] -> [[2,2] -> [3,3]]; [1] -> [[3,2] -> [3,3]] }");
2743 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2744 "1 <= i and i < n and 1 <= j and j < n or "
2745 "i2 = i + 1 and j2 = j - 1 and "
2746 "1 <= i and i < n and 2 <= j and j <= n }");
2753 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2754 "1 <= i and i < n and 1 <= j and j < n or "
2755 "i2 = i + 1 and j2 = j - 1 and "
2756 "1 <= i and i < n and 2 <= j and j <= n }");
2760 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2761 "1 <= i and i < n and 1 <= j and j <= n and "
2762 "2 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2763 "i2 = i + k1 + k2 and j2 = j + k1 - k2 and "
2764 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1 )}");
2770 "[n] -> { [x] -> [y] : y = x + 1 and 0 <= x and x <= n and "
2771 " 0 <= y and y <= n }");
2774 "[n] -> { [x] -> [y] : y > x and 0 <= x and x <= n and "
2775 " 0 <= y and y <= n }");
2782 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j + 2 and "
2783 "1 <= i and i < n - 1 and 1 <= j and j < n - 1 or "
2784 "i2 = i + 2 and j2 = j - 2 and "
2785 "1 <= i and i < n - 1 and 3 <= j and j <= n }");
2789 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2790 "1 <= i and i < n - 1 and 1 <= j and j <= n and "
2791 "3 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2792 "i2 = i + 2 k1 + 2 k2 and j2 = j + 2 k1 - 2 k2 and "
2793 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1) }");
2800 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j and "
2801 "i <= 2 j - 3 and i <= n - 2 and j <= 2 i - 1 and "
2803 "i2 = i and j2 = j + 2 and i <= 2 j - 1 and i <= n and "
2804 "j <= 2 i - 3 and j <= n - 2 or "
2805 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2806 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2813 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2814 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2816 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2817 "j <= 2 i - 4 and j <= n - 3 or "
2818 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2819 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2826 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2827 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2829 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2830 "j <= 2 i - 4 and j <= n - 3 or "
2831 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2832 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2836 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k3,k : "
2837 "i <= 2 j - 1 and i <= n and j <= 2 i - 1 and "
2838 "j <= n and 3 + i + 2 j <= 3 n and "
2839 "3 + 2 i + j <= 3n and i2 <= 2 j2 -1 and i2 <= n and "
2840 "i2 <= 3 j2 - 4 and j2 <= 2 i2 -1 and j2 <= n and "
2841 "13 + 4 j2 <= 11 i2 and i2 = i + 3 k1 + k3 and "
2842 "j2 = j + 3 k2 + k3 and k1 >= 0 and k2 >= 0 and "
2843 "k3 >= 0 and k1 + k2 + k3 = k and k > 0) }");
2871 "{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and "
2872 "i2 = 1 and j2 = j or "
2873 "i = 0 and j = 0 and i2 = 0 and j2 = 1 }");
2879 "[m,n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 2 and "
2880 "1 <= i,i2 <= n and 1 <= j,j2 <= m or "
2881 "i2 = i + 1 and 3 <= j2 - j <= 4 and "
2882 "1 <= i,i2 <= n and 1 <= j,j2 <= m }");
2889 "[n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 1 and "
2890 "1 <= i,j,j+1 <= n or "
2891 "j = n and j2 = 1 and i2 = i + 1 and "
2892 "1 <= i,i+1 <= n }");
2896 "[n] -> { [i,j] -> [i2,j2] : 1 <= j < j2 <= n and "
2897 "1 <= i <= n and i = i2 or "
2898 "1 <= i < i2 <= n and 1 <= j <= n and "
2906 "[m,n] -> { [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 and "
2907 "1 <= x,y <= 10 or "
2908 "x2 = x + 1 and y2 = y and "
2909 "1 <= x <= 20 && 5 <= y <= 15 }");
2915 "[n] -> { [x] -> [y]: 1 <= n <= y - x <= 10 }");
2919 "[n] -> { [x] -> [y] : 1 <= n <= 10 and y >= n + x }");
2924 str =
"[n, m] -> { [i0, i1, i2, i3] -> [o0, o1, o2, o3] : "
2925 "i3 = 1 and o0 = i0 and o1 = -1 + i1 and o2 = -1 + i2 and "
2926 "o3 = -2 + i2 and i1 <= -1 + i0 and i1 >= 1 - m + i0 and "
2927 "i1 >= 2 and i1 <= n and i2 >= 3 and i2 <= 1 + n and i2 <= m }";
2936 str =
"{[0] -> [1]; [2] -> [3]}";
2945 str =
"[n] -> { [[i0, i1, 1, 0, i0] -> [i5, 1]] -> "
2946 "[[i0, -1 + i1, 2, 0, i0] -> [-1 + i5, 2]] : "
2947 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 2 and "
2948 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2949 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2950 "[[i0, i1, 2, 0, i0] -> [i5, 1]] -> "
2951 "[[i0, i1, 1, 0, i0] -> [-1 + i5, 2]] : "
2952 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 1 and "
2953 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2954 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2955 "[[i0, i1, 1, 0, i0] -> [i5, 2]] -> "
2956 "[[i0, -1 + i1, 2, 0, i0] -> [i5, 1]] : "
2957 "exists (e0 = [(3 - n)/3]: i1 >= 2 and i5 >= 1 and "
2958 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2959 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2960 "[[i0, i1, 2, 0, i0] -> [i5, 2]] -> "
2961 "[[i0, i1, 1, 0, i0] -> [i5, 1]] : "
2962 "exists (e0 = [(3 - n)/3]: i5 >= 1 and i1 >= 1 and "
2963 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2964 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n) }";
3028 "expecting non-empty result",
return -1);
3040 {
"{ [x] -> [y] : x <= y <= 10; [x] -> [5] : -8 <= x <= 8 }",
3041 "{ [x] -> [5] : 6 <= x <= 8; "
3042 "[x] -> [x] : x <= 5 or (9 <= x <= 10) }" },
3043 {
"{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }",
3044 "{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }" },
3045 {
"{ [x] -> [y] : x = 4y; [x] -> [y] : x = 2y }",
3046 "{ [x] -> [y] : (4y = x and x >= 0) or "
3047 "(exists (e0 = [(x)/4], e1 = [(-2 + x)/4]: 2y = x and "
3048 "4e1 = -2 + x and 4e0 <= -1 + x and 4e0 >= -3 + x)) or "
3049 "(exists (e0 = [(x)/4]: 2y = x and 4e0 = x and x <= -4)) }" },
3050 {
"{ T[a] -> S[b, c] : a = 4b-2c and c >= b }",
3051 "{ T[a] -> S[b, c] : 2b = a and 2c = a }" },
3053 {
"[K, N] -> { [x, y] -> [a, b] : K+2<=N<=K+4 and x>=4 and "
3054 "2N-6<=x<K+N and N-1<=a<=K+N-1 and N+b-6<=a<=2N-4 and "
3055 "b<=2N-3K+a and 3b<=4N-K+1 and b>=N and a>=x+1 }",
3056 "[K, N] -> { [x, y] -> [1 + x, N] : x >= -6 + 2N and "
3057 "x <= -5 + 2N and x >= -1 + 3K - N and x <= -2 + K + N and "
3059 {
"{ [i, k, j] -> [a, b, c, d] : 8*floor((b)/8) = b and k <= 255 and "
3060 "a <= 255 and c <= 255 and d <= 255 - j and "
3061 "255 - j <= 7d <= 7 - i and 240d <= 239 + a and "
3062 "247d <= 247 + k - j and 247d <= 247 + k - b and "
3063 "247d <= 247 + i and 248 - b <= 248d <= c and "
3064 "254d >= i - a + b and 254d >= -a + b and "
3065 "255d >= -i + a - b and 1792d >= -63736 + 257b }",
3067 "[-127762 + i + 502j, -62992 + 248j, 63240 - 248j, 255 - j] : "
3068 "k <= 255 and 7j >= 1778 + i and 246j >= 62738 - k and "
3069 "247j >= 62738 - i and 509j <= 129795 + i and "
3070 "742j >= 188724 - i; "
3071 "[0, k, j] -> [1, 0, 248, 1] : k <= 255 and 248 <= j <= 254, k }" },
3072 {
"{ [a] -> [b] : 0 <= b <= 255 and -509 + a <= 512b < a and "
3073 "16*floor((8 + b)/16) <= 7 + b; "
3075 "{ [a] -> [b = 1] : a >= 510 or a <= 0; "
3076 "[a] -> [b = 0] : 0 < a <= 509 }" },
3077 {
"{ rat: [i] : 1 <= 2i <= 9 }",
"{ rat: [i] : 2i = 1 }" },
3078 {
"{ rat: [i] : 1 <= 2i <= 9 or i >= 10 }",
"{ rat: [i] : 2i = 1 }" },
3079 {
"{ rat: [i] : 21 <= 2i <= 29 or i = 5 }",
"{ rat: [5] }" },
3093 str =
"[p0, p1] -> { [] -> [] : "
3094 "exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], "
3095 "e4 = [(p1)/3], e5 = [(p1 + 3e4)/3]: "
3096 "3e0 >= -2 + 2p1 and 3e0 >= p1 and 3e3 >= 1 - p1 + 3e0 and "
3097 "3e0 <= 2p1 and 3e3 >= -2 + p1 and 3e3 <= -1 + p1 and p1 >= 3 and "
3098 "3e5 >= -2 + 2p1 and 3e5 >= p1 and 3e5 <= -1 + p1 + 3e4 and "
3099 "3e4 <= p1 and 3e4 >= -2 + p1 and e3 <= -1 + e0 and "
3100 "3e4 >= 6 - p1 + 3e1 and 3e1 >= p1 and 3e5 >= -2 + p1 + 3e4 and "
3101 "2e4 >= 3 - p1 + 2e1 and e4 <= e1 and 3e3 <= 2 - p1 + 3e0 and "
3102 "e5 >= 1 + e1 and 3e4 >= 6 - 2p1 + 3e1 and "
3103 "p0 >= 2 and p1 >= p0 and 3e2 >= p1 and 3e4 >= 6 - p1 + 3e2 and "
3104 "e2 <= e1 and e3 >= 1 and e4 <= e2) }";
3111 str =
"[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and "
3112 "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }";
3115 str =
"[C] -> { [obj,a,b,c] : C = 8 }";
3133 "unexpected result",
return -1);
3136 str =
"{ [i] -> [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
3137 " 8i' <= i and 8i' >= -7 + i }";
3146 str =
"[i] -> { [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
3147 " 8i' <= i and 8i' >= -7 + i }";
3158 "unexpected difference between set and "
3159 "piecewise affine expression",
return -1);
3172 {
"{ [-1] -> [-1]; [1] -> [1] }",
"{ [1] }" },
3173 {
"{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] : "
3174 "0 <= a, b <= 100 and b mod 2 = 0}",
"{ [30] }" },
3175 {
"[N] -> { [i,j] -> A[i, -i, i + j] : 0 <= i,j <= N <= 10 }",
3176 "{ A[10, 0, 20] }" },
3177 {
"[N] -> {A[N, -N, 2N] : 0 <= N }",
"{ A[infty, 0, infty] }" },
3193 isl_multi_val_free(mv);
3217 str =
"{ [a, b] : a >= 2 and b >= 0 and 14 - a <= b <= 9 }";
3219 str =
"{ [a, b] : 1 <= a, b and a + b <= 1 }";
3250 str =
"{ [i, j, k] : 2j = i and 2k = i + 1 and i >= 2 }";
3302 const char *s1, *s2;
3304 s1 =
"[N=0:] -> { [1, 3N:] }";
3305 s2 =
"[N=0:] -> { [10, 2N:] }";
3323 {
"{ [a, b] : 0 <= a, b <= 100 and b mod 2 = 0}",
3324 "{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] }",
3355 "unexpected optimum",
return -1);
3374 void *dep_user,
void *
user)
3388 int depth = *(
int *)first;
3416 "result not as expected",
return -1);
3497 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3501 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3505 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3516 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10); "
3517 " [1,10,0] -> [2,5,0] }";
3519 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3527 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3531 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3535 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3546 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10) }";
3548 str =
"{ [0,5,0] -> [2,5,0]; [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3556 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3560 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3564 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3575 str =
"{ [0,i,0] -> [2,i,0] : 0 <= i <= 10; "
3576 " [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3578 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3586 str =
"{ [0,i,2] -> [i] : 0 <= i <= 10 }";
3590 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3594 str =
"{ [0,i,1] -> [5] : 0 <= i <= 10 }";
3605 str =
"{ [0,i,0] -> [0,i,2] : 0 <= i <= 10; "
3606 " [0,i,1] -> [0,5,2] : 0 <= i <= 5 }";
3608 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3616 str =
"{ [0,i,1] -> [i] : 0 <= i <= 10 }";
3620 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3624 str =
"{ [0,i,2] -> [5] : 0 <= i <= 10 }";
3635 str =
"{ [0,i,0] -> [0,i,1] : 0 <= i <= 10; "
3636 " [0,i,2] -> [0,5,1] : 0 <= i <= 4 }";
3638 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3648 str =
"{ [1,i,0,0,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3652 str =
"{ [0,i,0,j,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3663 str =
"{ [0,i,0,j,0] -> [1,i,0,0,0] : 0 <= i,j <= 10 }";
3665 str =
"{ [0,0,0,0,0] -> [0,0,0,0,0] : 1 = 0 }";
3686 str =
"{ S0[j] -> i[]; S1[j,i] -> i[]; S2[] -> i[]; S3[] -> i[] }";
3688 str =
"{ S0[j] -> [0,j,0,0] : 0 <= j < 10; "
3689 "S1[j,i] -> [0,j,1,i] : 0 <= j < i < 10; "
3690 "S2[] -> [1,0,0,0]; "
3691 "S3[] -> [-1,0,0,0] }";
3695 &must_dep, &may_dep, NULL, NULL);
3706 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }", 1 },
3707 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }", 0 },
3708 {
"{ [i] -> [3*floor(i/2) + 5*floor(i/3)] }", 1 },
3709 {
"{ S1[i] -> [i] : 0 <= i <= 9; S2[i] -> [i] : 0 <= i <= 9 }", 1 },
3710 {
"{ [i] -> S1[i] : 0 <= i <= 9; [i] -> S2[i] : 0 <= i <= 9 }", 0 },
3711 {
"{ A[i] -> [i]; B[i] -> [i]; B[i] -> [i + 1] }", 0 },
3712 {
"{ A[i] -> [i]; B[i] -> [i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3713 {
"{ A[i] -> [i]; B[i] -> A[i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3714 {
"{ A[i] -> [i]; B[i] -> [j] : i - 1 <= j <= i }", 0 },
3731 "map not detected as single valued",
return -1);
3734 "map detected as single valued",
return -1);
3744 {
"[N,M]->{[i,j] -> [i]}", 0 },
3745 {
"[N,M]->{[i,j] -> [i] : j=i}", 1 },
3746 {
"[N,M]->{[i,j] -> [i] : j=0}", 1 },
3747 {
"[N,M]->{[i,j] -> [i] : j=N}", 1 },
3748 {
"[N,M]->{[i,j] -> [j,i]}", 1 },
3749 {
"[N,M]->{[i,j] -> [i+j]}", 0 },
3750 {
"[N,M]->{[i,j] -> []}", 0 },
3751 {
"[N,M]->{[i,j] -> [i,j,N]}", 1 },
3752 {
"[N,M]->{[i,j] -> [2i]}", 0 },
3753 {
"[N,M]->{[i,j] -> [i,i]}", 0 },
3754 {
"[N,M]->{[i,j] -> [2i,i]}", 0 },
3755 {
"[N,M]->{[i,j] -> [2i,j]}", 1 },
3756 {
"[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1 },
3773 "map not detected as bijective",
return -1);
3776 "map detected as bijective",
return -1);
3790 {
"{ [i] -> i }",
"{ [k] : exists a : k = 2a }",
"{ [i] -> i }" },
3791 {
"{ [i] -> i + [ (i + [i/3])/2 ] }",
"{ [10] }",
"{ [i] -> 16 }" },
3792 {
"{ [i] -> ([(i)/2]) }",
"{ [k] : exists a : k = 2a+1 }",
3793 "{ [i] -> -1/2 + 1/2 * i }" },
3794 {
"{ [i] -> i^2 : i != 0 }",
"{ [i] : i != 0 }",
"{ [i] -> i^2 }" },
3795 {
"{ [i] -> i^2 : i > 0; [i] -> i^2 : i < 0 }",
"{ [i] : i != 0 }",
3840 str =
"{ [x=2:9, y] -> floor((x + 1)/4)^3 - floor((2x)/3)^2 }";
3862 str =
"{ [i,j,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3868 str =
"[j] -> { [i,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3880 str =
"{ [i] -> ([([i/2] + [i/2])/5]) }";
3882 str =
"{ [i] -> ([(2 * [i/2])/5]) }";
3891 str =
"{ [x] -> ([x/2] + [(x+1)/2]) }";
3893 str =
"{ [x] -> x }";
3902 str =
"{ [i] -> ([i/2]) : i >= 0; [i] -> ([i/3]) : i < 0 }";
3910 str =
"{ [a,b,a] -> (([(2*[a/3]+b)/5]) * ([(2*[a/3]+b)/5])) }";
3912 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3924 str =
"{ [a,b,c] -> (([(2*[a/3]+1)/5]) * ([(2*[c/3]+1)/5])) : b = 1 }";
3926 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3949 str =
"{ [U,V] -> 1/3 * U + 2/3 * V - [(U + 2V)/3] + [U/2] : "
3950 "U + 2V + 3 >= 0 and - U -2V >= 0 and - U + 10 >= 0 and "
3951 "U >= 0; [U,V] -> U^2 : U >= 100 }";
3971 str =
"{ [i] : 0 <= i <= 1 }";
3973 str =
"{ [1] -> [0] }";
3988 str =
"{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }";
3990 str =
"{ A[i]; B[i] }";
4025 { 0,
isl_fold_max,
"{ [m, n] -> -m * n }",
"{ max(infty) }" },
4027 "{ [a, b, c, d] -> max(0) }" },
4028 { 1,
isl_fold_max,
"{ [[x] -> [x]] -> 1 : exists a : x = 2 a }",
4029 "{ [x] -> max(1) : x mod 2 = 0 }" },
4030 { 1,
isl_fold_min,
"{ [x=5:10] -> (x + 2)^2 }",
"{ min(49) }" },
4033 "{ [m] -> max(m^2) : m >= 0 }" },
4046 str =
"{ [[c] -> [c]] }";
4048 str =
"{ [[a] -> [b]] -> 1 }";
4086 "incorrect bound result",
return -1);
4089 "bound unexpectedly not tight",
return -1);
4100#define EL_BASE basic_map
4106#define EL_BASE basic_set
4107#define SET_BASE union_set
4113#define SET_BASE union_set
4118#define EL_BASE basic_map
4125#define SET_BASE union_map
4132 if (test_get_list_basic_map_from_set(ctx,
"{ [0]; [2]; [3] }"))
4134 if (test_get_list_basic_set_from_union_set(ctx,
"{ A[0]; B[2]; B[3] }"))
4136 if (test_get_list_set_from_union_set(ctx,
"{ A[0]; A[2]; B[3] }"))
4138 if (test_get_list_basic_map_from_map(ctx,
4139 "{ [0] -> [0]; [2] -> [0]; [3] -> [0] }"))
4141 if (test_get_list_map_from_union_map(ctx,
4142 "{ A[0] -> [0]; A[2] -> [0]; B[3] -> [0] }"))
4154 str =
"{ [i0] : exists e0 : i0 = 4e0 }";
4177 str =
"{ [a, b, c, d] : "
4178 "exists (e0 = floor((a + d)/4), e1 = floor((d)/4), "
4179 "e2 = floor((-a - d + 4 *floor((a + d)/4))/10), "
4180 "e3 = floor((-d + 4*floor((d)/4))/10): "
4181 "10e2 = -a - 2c - d + 4e0 and 10e3 = -2c - d + 4e1 and "
4182 "b >= 0 and a <= 0 and b <= a) }";
4196 "set is not considered to be a subset of itself",
4208 "{ [i0, i1] : exists (e0 = [(i0 - i1)/16], e1: "
4209 "16e0 <= i0 - i1 and 16e0 >= -15 + i0 - i1 and "
4210 "16e1 <= i1 and 16e0 >= -i1 and 16e1 >= -i0 + i1) }", 1 },
4212 "{ [i] : exists (e0 = [(255i)/256], e1 = [(127i + 65e0)/191], "
4213 "e2 = [(3i + 61e1)/65], e3 = [(52i + 12e2)/61], "
4214 "e4 = [(2i + e3)/3], e5 = [(4i + e3)/4], e6 = [(8i + e3)/12]: "
4215 "3e4 = 2i + e3 and 4e5 = 4i + e3 and 12e6 = 8i + e3 and "
4216 "i <= 255 and 64e3 >= -45 + 67i and i >= 0 and "
4217 "256e0 <= 255i and 256e0 >= -255 + 255i and "
4218 "191e1 <= 127i + 65e0 and 191e1 >= -190 + 127i + 65e0 and "
4219 "65e2 <= 3i + 61e1 and 65e2 >= -64 + 3i + 61e1 and "
4220 "61e3 <= 52i + 12e2 and 61e3 >= -60 + 52i + 12e2) }", 1 },
4221 {
"{ [i] : 0 <= i <= 10 }",
"{ rat: [i] : 0 <= i <= 10 }", 1 },
4222 {
"{ rat: [i] : 0 <= i <= 10 }",
"{ [i] : 0 <= i <= 10 }", 0 },
4223 {
"{ rat: [0] }",
"{ [i] : 0 <= i <= 10 }", 1 },
4224 {
"{ rat: [(1)/2] }",
"{ [i] : 0 <= i <= 10 }", 0 },
4225 {
"{ [t, i] : (exists (e0 = [(2 + t)/4]: 4e0 <= 2 + t and "
4226 "4e0 >= -1 + t and i >= 57 and i <= 62 and "
4227 "4e0 <= 62 + t - i and 4e0 >= -61 + t + i and "
4228 "t >= 0 and t <= 511 and 4e0 <= -57 + t + i and "
4229 "4e0 >= 58 + t - i and i >= 58 + t and i >= 62 - t)) }",
4230 "{ [i0, i1] : (exists (e0 = [(4 + i0)/4]: 4e0 <= 62 + i0 - i1 and "
4231 "4e0 >= 1 + i0 and i0 >= 0 and i0 <= 511 and "
4232 "4e0 <= -57 + i0 + i1)) or "
4233 "(exists (e0 = [(2 + i0)/4]: 4e0 <= i0 and "
4234 "4e0 >= 58 + i0 - i1 and i0 >= 2 and i0 <= 511 and "
4235 "4e0 >= -61 + i0 + i1)) or "
4236 "(i1 <= 66 - i0 and i0 >= 2 and i1 >= 59 + i0) }", 1 },
4237 {
"[a, b] -> { : a = 0 and b = -1 }",
"[b, a] -> { : b >= -10 }", 1 },
4259 "incorrect subset result",
return -1);
4274 str =
"{ [a] : (exists (e0, e1, e2: 1056e1 <= 32 + a - 33e0 and "
4275 "1089e1 >= a - 33e0 and 1089e1 <= 1 + a - 33e0 and "
4276 "33e2 >= -a + 33e0 + 1056e1 and "
4277 "33e2 < -2a + 66e0 + 2112e1)) or a = 0 }";
4290 {
"{ A[i] -> B[i] }",
"{ A[i] }",
"{ }" },
4291 {
"{ A[i] -> B[i] }",
"{ B[i] }",
"{ A[i] -> B[i] }" },
4292 {
"{ A[i] -> B[i] }",
"{ A[i] : i > 0 }",
"{ A[i] -> B[i] : i <= 0 }" },
4321 "incorrect subtract domain result",
return -1);
4339 "incorrect subtract domain result",
return -1);
4360 if (n1 < 0 || n2 < 0)
4364 "number of constraints of empty set changed",
4379 for (i = 0; i < 100; ++i)
4405 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7] : 3i5 <= 2 - 2i0 and "
4406 "i0 >= -2 and i6 >= 1 + i3 and i7 >= 0 and 3i5 >= -2i0 and "
4407 "2i4 <= i2 and i6 >= 1 + 2i0 + 3i1 and i4 <= -1 and "
4408 "i6 >= 1 + 2i0 + 3i5 and i6 <= 2 + 2i0 + 3i5 and "
4409 "3i5 <= 2 - 2i0 - i2 + 3i4 and i6 <= 2 + 2i0 + 3i1 and "
4410 "i0 <= -1 and i7 <= i2 + i3 - 3i4 - i6 and "
4411 "3i5 >= -2i0 - i2 + 3i4 }";
4418 "failed to construct factorizer",
return -1);
4420 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
4421 "i12 <= 2 + i0 - i11 and 2i8 >= -i4 and i11 >= i1 and "
4422 "3i5 <= -i2 and 2i11 >= -i4 - 2i7 and i11 <= 3 + i0 + 3i9 and "
4423 "i11 <= -i4 - 2i7 and i12 >= -i10 and i2 >= -2 and "
4424 "i11 >= i1 + 3i10 and i11 >= 1 + i0 + 3i9 and "
4425 "i11 <= 1 - i4 - 2i8 and 6i6 <= 6 - i2 and 3i6 >= 1 - i2 and "
4426 "i11 <= 2 + i1 and i12 <= i4 + i11 and i12 >= i0 - i11 and "
4427 "3i5 >= -2 - i2 and i12 >= -1 + i4 + i11 and 3i3 <= 3 - i2 and "
4428 "9i6 <= 11 - i2 + 6i5 and 3i3 >= 1 - i2 and "
4429 "9i6 <= 5 - i2 + 6i3 and i12 <= -1 and i2 <= 0 }";
4436 "failed to construct factorizer",
return -1);
4443 int *injective =
user;
4448 if (*injective < 0 || !*injective)
4455 const char *r,
const char *s,
int tilable,
int parallel)
4472 int is_nonneg, is_parallel, is_tilable, is_injection, is_complete;
4487 &dep_raw, NULL, NULL, NULL);
4492 &dep_waw, &dep_war, NULL, NULL);
4540 for (i = 0; i < tilable; ++i)
4546 for (i = 0; i < parallel; ++i)
4555 for (i = 0; i < dim; ++i)
4567 if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 ||
4568 is_injection < 0 || is_complete < 0)
4572 "generated schedule incomplete",
return -1);
4575 "generated schedule not injective on each statement",
4579 "negative dependences in generated schedule",
4583 "generated schedule not as tilable as expected",
4587 "generated schedule not as parallel as expected",
4598 const char *
domain,
const char *validity,
const char *proximity,
4628 const char *
domain,
const char *validity,
const char *proximity)
4638 const char *validity,
const char *proximity)
4651 const char *validity,
const char *proximity,
const char *expected_sched)
4686 str =
"[N] -> { S0[i] : 0 <= i <= N; S1[i, j] : 0 <= i, j <= N }";
4725 str =
"[n] -> { C[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4726 "A[k] : k >= 1 and k <= -1 + n; "
4727 "B[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4728 "D[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k }";
4731 str =
"[n] -> { D[k, i] -> C[1 + k, k - i] : "
4732 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4733 "D[k, i] -> C[1 + k, i] : "
4734 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4735 "D[k, 0] -> C[1 + k, k] : k >= 1 and k <= -2 + n; "
4736 "D[k, 0] -> C[1 + k, 0] : k >= 1 and k <= -2 + n }";
4739 str =
"[n] -> { C[k, i] -> D[k, i] : "
4740 "0 <= i <= -1 + k and k <= -1 + n }";
4743 str =
"[n] -> { [D[k, i] -> a[]] -> [C[1 + k, k - i] -> b[]] : "
4744 "i <= -1 + k and i >= 1 and k <= -2 + n; "
4745 "[B[k, i] -> c[]] -> [B[k, 1 + i] -> c[]] : "
4746 "k <= -1 + n and i >= 0 and i <= -2 + k }";
4748 str =
"[n] -> { [B[k, i] -> e[]] -> [D[k, i] -> a[]] : "
4749 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4750 "[C[k, i] -> b[]] -> [D[k', -1 + k - i] -> a[]] : "
4751 "i >= 0 and i <= -1 + k and k <= -1 + n and "
4752 "k' <= -1 + n and k' >= k - i and k' >= 1 + k; "
4753 "[C[k, i] -> b[]] -> [D[k, -1 + k - i] -> a[]] : "
4754 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4755 "[B[k, i] -> c[]] -> [A[k'] -> d[]] : "
4756 "k <= -1 + n and i >= 0 and i <= -1 + k and "
4757 "k' >= 1 and k' <= -1 + n and k' >= 1 + k }";
4762 str =
"{ D[2,0] -> [] }";
4765 str =
"{ C[2,1] -> [] }";
4779 "conditional validity not respected",
return -1);
4802 str =
"{ A[0, i] : 0 <= i <= 10; B[1, i] : 0 <= i <= 10 }";
4805 str =
"{ B[1, i] -> A[0, i + 1] }";
4807 str =
"{ A[0, i] -> B[1, i - 1] }";
4827 "conditional validity constraints not satisfied",
4867 {
"{ S[i] : 0 <= 1 < 100; T[i] : 0 <= 1 < 100 }",
4868 "{ S[i] -> S[i+1] : 0 <= i < 99 }",
4869 "{ [S[i] -> B[]] -> [S[i+1] -> B[]] : 0 <= i < 99 }",
4870 "{ [S[i] -> A[]] -> [T[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4871 "[T[i] -> A[]] -> [S[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4872 "[S[i] -> A[]] -> [S[i+1] -> A[]] : 0 <= i < 99 }",
4876 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4877 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4878 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4879 "[n] -> { [S1[i,j] -> t[]] -> [S2[i,j] -> t[]] : 0 <= i,j < n;"
4880 "[S2[i,j] -> x1[]] -> [S2[i,j+1] -> x1[]] : "
4881 "0 <= i < n and 0 <= j < n - 1 }",
4882 "[n] -> { [S2[i,j] -> t[]] -> [S1[i,j'] -> t[]] : "
4883 "0 <= i < n and 0 <= j < j' < n;"
4884 "[S2[i,j] -> t[]] -> [S1[i',j'] -> t[]] : "
4885 "0 <= i < i' < n and 0 <= j,j' < n;"
4886 "[S2[i,j] -> x1[]] -> [S2[i,j'] -> x1[]] : "
4887 "0 <= i,j,j' < n and j < j' }",
4891 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4892 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4893 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4894 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4895 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4896 "[n] -> { S2[i,j] -> S1[i,j'] : 0 <= i < n and 0 <= j < j' < n;"
4897 "S2[i,j] -> S1[i',j'] : 0 <= i < i' < n and 0 <= j,j' < n;"
4898 "S2[i,j] -> S2[i,j'] : 0 <= i,j,j' < n and j < j' }",
4902 {
"{ S1[i,0] : 0 <= i <= 1; S2[i,j] : 0 <= i <= 1 and 1 <= j <= 2;"
4903 "S3[i,3] : 0 <= i <= 1 }",
4904 "{ S1[i,0] -> S2[i,1] : 0 <= i <= 1;"
4905 "S2[i,1] -> S2[i,2] : 0 <= i <= 1;"
4906 "S2[i,2] -> S3[i,3] : 0 <= i <= 1 }",
4907 "{ [S1[i,0]->t[]] -> [S2[i,1]->t[]] : 0 <= i <= 1;"
4908 "[S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4909 "[S2[i,2]->t[]] -> [S3[i,3]->t[]] : 0 <= i <= 1 }",
4910 "{ [S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4911 "[S2[0,j]->t[]] -> [S2[1,j']->t[]] : 1 <= j,j' <= 2;"
4912 "[S2[0,j]->t[]] -> [S1[1,0]->t[]] : 1 <= j <= 2;"
4913 "[S3[0,3]->t[]] -> [S2[1,j]->t[]] : 1 <= j <= 2;"
4914 "[S3[0,3]->t[]] -> [S1[1,0]->t[]] }",
4968 "unexpected number of members in outer band",
4983 const char *
domain, *dep;
4988 domain =
"{ B[i0, i1] : 0 <= i0 <= 1 and 0 <= i1 <= 11; "
4989 "A[i0] : 0 <= i0 <= 1 }";
4990 dep =
"{ B[i0, i1] -> B[i0, 1 + i1] : 0 <= i0 <= 1 and 0 <= i1 <= 10; "
4991 "B[0, 11] -> A[1]; A[i0] -> B[i0, 0] : 0 <= i0 <= 1 }";
5006 "dependences not strongly satisfied",
return -1);
5020 domain =
"[n] -> { A[] : n >= 0 }";
5021 context =
"[n] -> { : n < 0 }";
5039 const char *
domain, *dep;
5044 int treat_coalescing;
5046 domain =
"{ S[a, b] : 0 <= a <= 1 and 0 <= b <= 1 }";
5047 dep =
"{ S[a, b] -> S[a + b, 1 - b] }";
5072 const char *D, *V, *P, *
S;
5074 D =
"[n] -> { S[t,i,j,k] : 0 <= t,i,j,k < n }";
5075 V =
"[n] -> { S[t,i,j,k] -> S[t+1,a,b,c] : 0 <= t,i,j,k,a,b,c < n and "
5076 "-2 <= a-i <= 2 and -1 <= a-i + b-j <= 1 and "
5077 "-1 <= a-i + b-j + c-k <= 1 }";
5079 S =
"{ S[t,i,j,k] -> [t, 2t + i, t + i + j, 2t + k] }";
5086 const char *D, *W, *R, *V, *P, *
S;
5087 int max_coincidence;
5088 int treat_coalescing;
5095 D =
"[T,N] -> { S1[t,i] : 1 <= t <= T and 2 <= i <= N - 1 }";
5096 W =
"{ S1[t,i] -> a[t,i] }";
5097 R =
"{ S1[t,i] -> a[t-1,i]; S1[t,i] -> a[t-1,i-1]; "
5098 "S1[t,i] -> a[t-1,i+1] }";
5099 S =
"{ S1[t,i] -> [t,i] }";
5104 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and j >= 2 and "
5106 W =
"[N] -> { S_0[i, j] -> a[i, j] : i >= 0 and i <= -1 + N and "
5107 "j >= 2 and j <= -1 + N }";
5108 R =
"[N] -> { S_0[i, j] -> a[j, i] : i >= 0 and i <= -1 + N and "
5109 "j >= 2 and j <= -1 + N; "
5110 "S_0[i, j] -> a[i, -1 + j] : i >= 0 and i <= -1 + N and "
5111 "j >= 2 and j <= -1 + N }";
5112 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
5116 D =
"{ S1[i] : 0 <= i <= 10; S2[i] : 0 <= i <= 9 }";
5117 W =
"{ S1[i] -> a[i] }";
5118 R =
"{ S2[i] -> a[i+1] }";
5119 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
5123 D =
"{ S1[i] : 0 <= i < 10; S2[i] : 0 <= i < 10 }";
5124 W =
"{ S1[i] -> a[i] }";
5125 R =
"{ S2[i] -> a[9-i] }";
5126 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
5130 D =
"[N] -> { S1[i] : 0 <= i < N; S2[i] : 0 <= i < N }";
5131 W =
"{ S1[i] -> a[i] }";
5132 R =
"[N] -> { S2[i] -> a[N-1-i] }";
5133 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
5137 D =
"{ S1[i] : 0 < i < 10; S2[i] : 0 <= i < 10 }";
5138 W =
"{ S1[i] -> a[i]; S2[i] -> b[i] }";
5139 R =
"{ S2[i] -> a[i]; S1[i] -> b[i-1] }";
5140 S =
"{ S1[i] -> [i,0]; S2[i] -> [i,1] }";
5144 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
5145 W =
"{ S1[i] -> a[0,i]; S2[i,j] -> a[i,j] }";
5146 R =
"{ S2[i,j] -> a[i-1,j] }";
5147 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
5151 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
5152 W =
"{ S1[i] -> a[i,0]; S2[i,j] -> a[i,j] }";
5153 R =
"{ S2[i,j] -> a[i,j-1] }";
5154 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
5158 D =
"[N] -> { S_0[]; S_1[i] : i >= 0 and i <= -1 + N; S_2[] }";
5159 W =
"[N] -> { S_0[] -> a[0]; S_2[] -> b[0]; "
5160 "S_1[i] -> a[1 + i] : i >= 0 and i <= -1 + N }";
5161 R =
"[N] -> { S_2[] -> a[N]; S_1[i] -> a[i] : i >= 0 and i <= -1 + N }";
5162 S =
"[N] -> { S_1[i] -> [1, i, 0]; S_2[] -> [2, 0, 1]; "
5163 "S_0[] -> [0, 0, 0] }";
5171 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i] : 1 <= i <= N; "
5172 "S3[i,j] : 1 <= i,j <= N; S4[i] : 1 <= i <= N }";
5173 W =
"{ S1[i] -> a[i,0]; S2[i] -> a[0,i]; S3[i,j] -> a[i,j] }";
5174 R =
"[N] -> { S3[i,j] -> a[i-1,j]; S3[i,j] -> a[i,j-1]; "
5175 "S4[i] -> a[i,N] }";
5176 S =
"{ S1[i] -> [0,i,0]; S2[i] -> [1,i,0]; S3[i,j] -> [2,i,j]; "
5177 "S4[i] -> [4,i,0] }";
5184 D =
"[N] -> { S_0[i, j] : i >= 1 and i <= N and j >= 1 and j <= N }";
5185 W =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
5187 R =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
5189 "S_0[i, j] -> a[i, j] : i >= 1 and i <= N and j >= 1 and "
5191 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
5195 D =
"[N] -> { S_0[t] : t >= 0 and t <= -1 + N; "
5196 " S_2[t] : t >= 0 and t <= -1 + N; "
5197 " S_1[t, i] : t >= 0 and t <= -1 + N and i >= 0 and "
5199 W =
"[N] -> { S_0[t] -> a[t, 0] : t >= 0 and t <= -1 + N; "
5200 " S_2[t] -> b[t] : t >= 0 and t <= -1 + N; "
5201 " S_1[t, i] -> a[t, 1 + i] : t >= 0 and t <= -1 + N and "
5202 "i >= 0 and i <= -1 + N }";
5203 R =
"[N] -> { S_1[t, i] -> a[t, i] : t >= 0 and t <= -1 + N and "
5204 "i >= 0 and i <= -1 + N; "
5205 " S_2[t] -> a[t, N] : t >= 0 and t <= -1 + N }";
5206 S =
"[N] -> { S_2[t] -> [0, t, 2]; S_1[t, i] -> [0, t, 1, i, 0]; "
5207 " S_0[t] -> [0, t, 0] }";
5216 D =
"[N] -> { S1[i,j] : 0 <= i,j < N; S2[i,j] : 0 <= i,j < N }";
5217 S =
"{ S1[i,j] -> [0,i,j]; S2[i,j] -> [1,i,j] }";
5221 D =
"[M, N] -> { S_1[i] : i >= 0 and i <= -1 + M; "
5222 "S_0[i, j] : i >= 0 and i <= -1 + M and j >= 0 and j <= -1 + N }";
5223 W =
"[M, N] -> { S_0[i, j] -> a[j] : i >= 0 and i <= -1 + M and "
5224 "j >= 0 and j <= -1 + N; "
5225 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5226 R =
"[M, N] -> { S_0[i, j] -> a[0] : i >= 0 and i <= -1 + M and "
5227 "j >= 0 and j <= -1 + N; "
5228 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5229 S =
"[M, N] -> { S_1[i] -> [1, i, 0]; S_0[i, j] -> [0, i, 0, j, 0] }";
5233 D =
"{ S_0[i] : i >= 0 }";
5234 W =
"{ S_0[i] -> a[i] : i >= 0 }";
5235 R =
"{ S_0[i] -> a[0] : i >= 0 }";
5236 S =
"{ S_0[i] -> [0, i, 0] }";
5240 D =
"{ S_0[i] : i >= 0; S_1[i] : i >= 0 }";
5241 W =
"{ S_0[i] -> a[i] : i >= 0; S_1[i] -> b[i] : i >= 0 }";
5242 R =
"{ S_0[i] -> b[0] : i >= 0; S_1[i] -> a[i] : i >= 0 }";
5243 S =
"{ S_1[i] -> [0, i, 1]; S_0[i] -> [0, i, 0] }";
5247 D =
"[n] -> { S_0[j, k] : j <= -1 + n and j >= 0 and "
5248 "k <= -1 + n and k >= 0 }";
5249 W =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " "k <= -1 + n and k >= 0 }";
5250 R =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and "
5251 "k <= -1 + n and k >= 0; "
5252 "S_0[j, k] -> B[k] : j <= -1 + n and j >= 0 and "
5253 "k <= -1 + n and k >= 0; "
5254 "S_0[j, k] -> A[k] : j <= -1 + n and j >= 0 and "
5255 "k <= -1 + n and k >= 0 }";
5256 S =
"[n] -> { S_0[j, k] -> [2, j, k] }";
5262 D =
"{Stmt_for_body24[i0, i1, i2, i3]:"
5263 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 6 and i2 >= 2 and "
5264 "i2 <= 6 - i1 and i3 >= 0 and i3 <= -1 + i2;"
5265 "Stmt_for_body24[i0, i1, 1, 0]:"
5266 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 5;"
5267 "Stmt_for_body7[i0, i1, i2]:"
5268 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 7 and i2 >= 0 and "
5271 V =
"{Stmt_for_body24[0, i1, i2, i3] -> "
5272 "Stmt_for_body24[1, i1, i2, i3]:"
5273 "i3 >= 0 and i3 <= -1 + i2 and i1 >= 0 and i2 <= 6 - i1 and "
5275 "Stmt_for_body24[0, i1, i2, i3] -> "
5276 "Stmt_for_body7[1, 1 + i1 + i3, 1 + i1 + i2]:"
5277 "i3 <= -1 + i2 and i2 <= 6 - i1 and i2 >= 1 and i1 >= 0 and "
5279 "Stmt_for_body24[0, i1, i2, i3] ->"
5280 "Stmt_for_body7[1, i1, 1 + i1 + i3]:"
5281 "i3 >= 0 and i2 <= 6 - i1 and i1 >= 0 and i3 <= -1 + i2;"
5282 "Stmt_for_body7[0, i1, i2] -> Stmt_for_body7[1, i1, i2]:"
5283 "(i2 >= 1 + i1 and i2 <= 6 and i1 >= 0 and i1 <= 4) or "
5284 "(i2 >= 3 and i2 <= 7 and i1 >= 1 and i2 >= 1 + i1) or "
5285 "(i2 >= 0 and i2 <= i1 and i2 >= -7 + i1 and i1 <= 7);"
5286 "Stmt_for_body7[0, i1, 1 + i1] -> Stmt_for_body7[1, i1, 1 + i1]:"
5287 "i1 <= 6 and i1 >= 0;"
5288 "Stmt_for_body7[0, 0, 7] -> Stmt_for_body7[1, 0, 7];"
5289 "Stmt_for_body7[i0, i1, i2] -> "
5290 "Stmt_for_body24[i0, o1, -1 + i2 - o1, -1 + i1 - o1]:"
5291 "i0 >= 0 and i0 <= 1 and o1 >= 0 and i2 >= 1 + i1 and "
5292 "o1 <= -2 + i2 and i2 <= 7 and o1 <= -1 + i1;"
5293 "Stmt_for_body7[i0, i1, i2] -> "
5294 "Stmt_for_body24[i0, i1, o2, -1 - i1 + i2]:"
5295 "i0 >= 0 and i0 <= 1 and i1 >= 0 and o2 >= -i1 + i2 and "
5296 "o2 >= 1 and o2 <= 6 - i1 and i2 >= 1 + i1 }";
5305 D =
"{ S_0[i, j] : i >= 1 and i <= 10 and j >= 1 and j <= 8 }";
5306 V =
"{ S_0[i, j] -> S_0[i, 1 + j] : i >= 1 and i <= 10 and "
5307 "j >= 1 and j <= 7;"
5308 "S_0[i, j] -> S_0[1 + i, j] : i >= 1 and i <= 9 and "
5309 "j >= 1 and j <= 8 }";
5311 S =
"{ S_0[i, j] -> [i + j, i] }";
5318 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and "
5319 "j >= 0 and j <= -1 + i }";
5320 V =
"[N] -> { S_0[i, j] -> S_0[i, 1 + j] : j <= -2 + i and "
5321 "i <= -1 + N and j >= 0;"
5322 "S_0[i, -1 + i] -> S_0[1 + i, 0] : i >= 1 and "
5325 S =
"{ S_0[i, j] -> [i, j] }";
5332 D =
"{ S[i,j] : 0 <= i <= 10 }";
5334 P =
"{ S[i,j] -> S[i+1,j] : 0 <= i,j <= 10 }";
5335 S =
"{ S[i, j] -> [j, i] }";
5343 D =
"{ A[a]; B[] }";
5345 P =
"{ A[a] -> B[] }";
5355 D =
"[N] -> { S0[i, j] : i >= 0 and i <= N and j >= 0 and j <= N }";
5356 V =
"[N] -> { S0[i0, -1 + N] -> S0[2 + i0, 0] : i0 >= 0 and "
5358 "S0[i0, i1] -> S0[i0, 1 + i1] : i0 >= 0 and "
5359 "i0 <= N and i1 >= 0 and i1 <= -1 + N }";
5369 D =
"{ S1[j] : 0 <= j <= 1; S0[]; S2[k] : 0 <= k <= 1 }";
5370 V =
"{ S0[] -> S1[j] : 0 <= j <= 1; S2[0] -> S0[];"
5371 "S1[j] -> S2[1] : 0 <= j <= 1 }";
5435 if (
test == injective)
5439 "map not detected as injective",
return -1);
5442 "map detected as injective",
return -1);
5466 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[1,0]}";
5469 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[0,0]}";
5481#define BASE pw_multi_aff
5485#define BASE union_pw_aff
5505 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5508 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5509 ok = union_pw_aff_check_plain_equal(upa,
str);
5515 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5518 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5519 ok = union_pw_aff_check_plain_equal(upa,
str);
5543 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [i] }",
5544 "{ [i] -> [2i] }" },
5545 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [i] }",
5547 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [2] }",
5548 "{ [i] -> [2i] }" },
5549 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [i] }",
5550 "{ [i] -> [2i] }" },
5551 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [2] }",
5552 "{ [i] -> [i/2] }" },
5553 {
"{ [i] -> [2i] }",
'/',
"{ [i] -> [2] }",
5555 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [NaN] }",
5556 "{ [i] -> [NaN] }" },
5557 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [NaN] }",
5558 "{ [i] -> [NaN] }" },
5559 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [NaN] }",
5560 "{ [i] -> [NaN] }" },
5561 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [NaN] }",
5562 "{ [i] -> [NaN] }" },
5563 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [NaN] }",
5564 "{ [i] -> [NaN] }" },
5565 {
"{ [i] -> [2] }",
'/',
"{ [i] -> [NaN] }",
5566 "{ [i] -> [NaN] }" },
5567 {
"{ [i] -> [NaN] }",
'+',
"{ [i] -> [i] }",
5568 "{ [i] -> [NaN] }" },
5569 {
"{ [i] -> [NaN] }",
'-',
"{ [i] -> [i] }",
5570 "{ [i] -> [NaN] }" },
5571 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [2] }",
5572 "{ [i] -> [NaN] }" },
5573 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [i] }",
5574 "{ [i] -> [NaN] }" },
5575 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [2] }",
5576 "{ [i] -> [NaN] }" },
5577 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [i] }",
5578 "{ [i] -> [NaN] }" },
5579 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [0] }",
5580 "{ [i] -> [NaN] }" },
5598 aff1 =
fn(aff1, aff2);
5609 "unexpected result",
return -1);
5633 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [i] }",
5635 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [i] }",
5637 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [0] }",
5638 "{ [i] -> [i] : i <= 0; [i] -> [0] : i > 0 }" },
5639 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [0] }",
5640 "{ [i] -> [i] : i >= 0; [i] -> [0] : i < 0 }" },
5641 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [NaN] }",
5642 "{ [i] -> [NaN] }" },
5643 {
"{ [i] -> [NaN] }",
'm',
"{ [i] -> [i] }",
5644 "{ [i] -> [NaN] }" },
5670 "unexpected result",
return -1);
5694 "{ A[] -> [0]; B[0] -> [1, NaN, 5] }",
5697 "{ A[] -> [0]; B[0] -> [1] }",
5700 "{ A[] -> [0]; B[x] -> [1] : x mod 2 = 0 }",
5703 "{ A[] -> [0]; B[x] -> [x // 2] }",
5706 "{ A[i] -> [i // 2]; B[0] -> [1] }",
5745 "{ B[x] -> [2] : x >= 0 }",
"{ B[0] -> [3] }" },
5747 "{ B[x] -> [2] : x >= 0 }",
5748 "{ A[] -> [0]; B[0] -> [3]; B[x] -> [2] : x >= 1 }" },
5750 "{ A[] -> B[0]; C[x] -> B[1] : x < 10; C[y] -> B[2] : y >= 10 }",
5751 "{ D[i] -> A[] : i < 0; D[i] -> C[i + 5] : i >= 0 }",
5752 "{ D[i] -> B[0] : i < 0; D[i] -> B[1] : 0 <= i < 5; "
5753 "D[i] -> B[2] : i >= 5 }" },
5755 "{ B[x] -> C[2] : x > 0 }",
5756 "{ B[x] -> A[1] : x <= 0; B[x] -> C[2] : x > 0 }" },
5758 "{ B[x] -> A[2] : x >= 0 }",
5759 "{ B[x] -> A[1] : x < 0; B[x] -> A[2] : x > 0; B[0] -> A[3] }" },
5762 "{ B[x] -> C[x + 2] }",
5763 "{ D[y] -> B[2y] }",
5767 "{ [A[x] -> B[x + 1]] -> C[x + 2] }",
5768 "{ D[y] -> B[2y] }",
5772 "{ [A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5773 "{ D[y] -> A[2y] }",
5774 "{ [D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5777 "{ T[A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5778 "{ D[y] -> A[2y] }",
5779 "{ T[D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5806 "unexpected result",
return -1);
5820 "{ B[x] -> C[2] : x >= 0 }" },
5835 for (i = 0; i <
n; ++i) {
5848 "operation not expected to succeed",
return -1);
5868 "{ A[i] -> B[i] }",
"{ B[0] }",
5871 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5872 "{ [A[1] -> B[1]] -> C[2] }" },
5874 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5875 "{ [A[0] -> B[0]] -> C[1] }" },
5877 "{ [A[i] -> B[i]] -> C[i + 1] }",
"[N] -> { B[N] }",
5878 "[N] -> { [A[N] -> B[N]] -> C[N + 1] }" },
5880 "[M] -> { [A[M] -> B[M]] -> C[M + 1] }",
"[N] -> { B[N] }",
5881 "[N, M] -> { [A[N] -> B[N]] -> C[N + 1] : N = M }" },
5883 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[]; [B[] -> A[]] -> E[] }",
5885 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[] }" },
5929 { &isl_multi_pw_aff_range_factor_domain,
5930 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5931 "{ A[x] -> B[(1 : x >= 5)] }" },
5932 { &isl_multi_pw_aff_range_factor_range,
5933 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5934 "{ A[y] -> C[(2 : y <= 10)] }" },
5935 { &isl_multi_pw_aff_range_factor_domain,
5936 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5937 "{ A[x] -> B[(1 : x >= 5)] }" },
5938 { &isl_multi_pw_aff_range_factor_range,
5939 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5940 "{ A[y] -> C[] }" },
5941 { &isl_multi_pw_aff_range_factor_domain,
5942 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5943 "{ A[x] -> B[] }" },
5944 { &isl_multi_pw_aff_range_factor_range,
5945 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5946 "{ A[y] -> C[(2 : y <= 10)] }" },
5947 { &isl_multi_pw_aff_range_factor_domain,
5948 "{ A[x] -> [B[] -> C[]] }",
5949 "{ A[x] -> B[] }" },
5950 { &isl_multi_pw_aff_range_factor_range,
5951 "{ A[x] -> [B[] -> C[]] }",
5952 "{ A[y] -> C[] }" },
5953 { &isl_multi_pw_aff_factor_range,
5956 { &isl_multi_pw_aff_range_factor_domain,
5957 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5958 "{ A[x] -> B[] : x >= 0 }" },
5959 { &isl_multi_pw_aff_range_factor_range,
5960 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5961 "{ A[y] -> C[] : y >= 0 }" },
5962 { &isl_multi_pw_aff_factor_range,
5963 "[N] -> { [B[] -> C[]] : N >= 0 }",
5964 "[N] -> { C[] : N >= 0 }" },
5979 ok = isl_multi_pw_aff_plain_is_equal(mpa,
res);
5980 isl_multi_pw_aff_free(mpa);
5981 isl_multi_pw_aff_free(
res);
5986 "unexpected result",
return -1);
6005 { &isl_multi_pw_aff_add,
"{ A[] -> [1] }",
"{ A[] -> [2] }",
6007 { &isl_multi_pw_aff_add,
"{ A[x] -> [(1 : x >= 5)] }",
6008 "{ A[x] -> [(x : x <= 10)] }",
6009 "{ A[x] -> [(1 + x : 5 <= x <= 10)] }" },
6010 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
6011 "{ A[x] -> [] : x <= 10 }",
6012 "{ A[x] -> [] : 5 <= x <= 10 }" },
6013 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
6014 "[N] -> { A[x] -> [] : x <= N }",
6015 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
6016 { &isl_multi_pw_aff_add,
6017 "[N] -> { A[x] -> [] : x <= N }",
6018 "{ A[x] -> [] : x >= 5 }",
6019 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
6020 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
6021 "{ A[y] -> C[(2 : y <= 10)] }",
6022 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
6023 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
6024 "{ A[y] -> C[2] : y <= 10 }",
6025 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
6026 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
6027 "[N] -> { A[y] -> C[2] : y <= N }",
6028 "[N] -> { A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= N)]] }" },
6029 { &isl_multi_pw_aff_range_product,
"[N] -> { A[x] -> B[1] : x >= N }",
6030 "{ A[y] -> C[2] : y <= 10 }",
6031 "[N] -> { A[x] -> [B[(1 : x >= N)] -> C[(2 : x <= 10)]] }" },
6032 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
6033 "{ A[] -> [B[1] -> C[2]] }" },
6034 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
6035 "{ A[] -> [B[] -> C[]] }" },
6036 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
6037 "{ A[y] -> C[] : y <= 10 }",
6038 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] : x <= 10 }" },
6039 { &isl_multi_pw_aff_range_product,
"{ A[y] -> C[] : y <= 10 }",
6040 "{ A[x] -> B[(1 : x >= 5)] }",
6041 "{ A[x] -> [C[] -> B[(1 : x >= 5)]] : x <= 10 }" },
6042 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
6043 "{ A[y] -> C[(2 : y <= 10)] }",
6044 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[(2 : y <= 10)]] }" },
6045 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
6046 "{ A[y] -> C[] : y <= 10 }",
6047 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= 10 }" },
6048 { &isl_multi_pw_aff_product,
"{ A[y] -> C[] : y <= 10 }",
6049 "{ A[x] -> B[(1 : x >= 5)] }",
6050 "{ [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= 10 }" },
6051 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
6052 "[N] -> { A[y] -> C[] : y <= N }",
6053 "[N] -> { [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= N }" },
6054 { &isl_multi_pw_aff_product,
"[N] -> { A[y] -> C[] : y <= N }",
6055 "{ A[x] -> B[(1 : x >= 5)] }",
6056 "[N] -> { [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= N }" },
6057 { &isl_multi_pw_aff_product,
"{ A[x] -> B[] : x >= 5 }",
6058 "{ A[y] -> C[] : y <= 10 }",
6059 "{ [A[x] -> A[y]] -> [B[] -> C[]] : x >= 5 and y <= 10 }" },
6060 { &isl_multi_pw_aff_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
6061 "{ [A[] -> A[]] -> [B[1] -> C[2]] }" },
6062 { &isl_multi_pw_aff_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
6063 "{ [A[] -> A[]] -> [B[] -> C[]] }" },
6065 "{ B[i,j] -> C[i + 2j] }",
"{ A[a,b] -> B[b,a] }",
6066 "{ A[a,b] -> C[b + 2a] }" },
6068 "{ B[i,j] -> C[i + 2j] }",
6069 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
6070 "{ A[a,b] -> C[(b + 2a : b > a)] }" },
6072 "{ B[i,j] -> C[(i + 2j : j > 4)] }",
6073 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
6074 "{ A[a,b] -> C[(b + 2a : b > a > 4)] }" },
6076 "{ B[i,j] -> C[] }",
6077 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
6078 "{ A[a,b] -> C[] }" },
6080 "{ B[i,j] -> C[] : i > j }",
6081 "{ A[a,b] -> B[b,a] }",
6082 "{ A[a,b] -> C[] : b > a }" },
6084 "{ B[i,j] -> C[] : j > 5 }",
6085 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
6086 "{ A[a,b] -> C[] : b > a > 5 }" },
6088 "[N] -> { B[i,j] -> C[] : j > N }",
6089 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
6090 "[N] -> { A[a,b] -> C[] : b > a > N }" },
6092 "[M,N] -> { B[] -> C[] : N > 5 }",
6093 "[M,N] -> { A[] -> B[] : M > N }",
6094 "[M,N] -> { A[] -> C[] : M > N > 5 }" },
6113 ok = isl_multi_pw_aff_plain_is_equal(mpa1,
res);
6114 isl_multi_pw_aff_free(mpa1);
6115 isl_multi_pw_aff_free(
res);
6120 "unexpected result",
return -1);
6138 { &isl_multi_union_pw_aff_factor_range,
6139 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]",
6140 "C[{ A[] -> [2] }]" },
6141 { &isl_multi_union_pw_aff_factor_range,
6142 "[B[] -> C[{ A[] -> [2] }]]",
6143 "C[{ A[] -> [2] }]" },
6144 { &isl_multi_union_pw_aff_factor_range,
6145 "[B[{ A[] -> [1] }] -> C[]]",
6147 { &isl_multi_union_pw_aff_factor_range,
6150 { &isl_multi_union_pw_aff_factor_range,
6151 "([B[] -> C[]] : { A[x] : x >= 0 })",
6152 "(C[] : { A[x] : x >= 0 })" },
6153 { &isl_multi_union_pw_aff_factor_range,
6154 "[N] -> ([B[] -> C[]] : { A[x] : x <= N })",
6155 "[N] -> (C[] : { A[x] : x <= N })" },
6156 { &isl_multi_union_pw_aff_factor_range,
6157 "[N] -> ([B[] -> C[]] : { : N >= 0 })",
6158 "[N] -> (C[] : { : N >= 0 })" },
6176 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6177 isl_multi_union_pw_aff_free(
mupa);
6178 isl_multi_union_pw_aff_free(
res);
6183 "unexpected result",
return -1);
6203 { &isl_multi_union_pw_aff_add,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
6204 "[{ A[] -> [3] }]" },
6205 { &isl_multi_union_pw_aff_sub,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
6206 "[{ A[] -> [-1] }]" },
6207 { &isl_multi_union_pw_aff_add,
6208 "[{ A[] -> [1]; B[] -> [4] }]",
6209 "[{ A[] -> [2]; C[] -> [5] }]",
6210 "[{ A[] -> [3] }]" },
6212 "[{ A[] -> [1]; B[] -> [4] }]",
6213 "[{ A[] -> [2]; C[] -> [5] }]",
6214 "[{ A[] -> [3]; B[] -> [4]; C[] -> [5] }]" },
6215 { &isl_multi_union_pw_aff_add,
"[{ A[x] -> [(1)] : x >= 5 }]",
6216 "[{ A[x] -> [(x)] : x <= 10 }]",
6217 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10 }]" },
6218 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6219 "([] : { A[x] : x <= 10 })",
6220 "([] : { A[x] : 5 <= x <= 10 })" },
6221 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6222 "[N] -> ([] : { A[x] : x <= N })",
6223 "[N] -> ([] : { A[x] : 5 <= x <= N })" },
6224 { &isl_multi_union_pw_aff_add,
"[N] -> ([] : { A[x] : x >= N })",
6225 "([] : { A[x] : x <= 10 })",
6226 "[N] -> ([] : { A[x] : N <= x <= 10 })" },
6228 "[{ A[x] -> [(x)] : x <= 10 }]",
6229 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10; "
6230 "A[x] -> [(1)] : x > 10; A[x] -> [(x)] : x < 5 }]" },
6232 "([] : { A[x] : x <= 10 })",
6233 "([] : { A[x] })" },
6235 "[N] -> ([] : { A[x] : x >= N })",
6236 "[N] -> ([] : { A[x] : x >= 0 or x >= N })" },
6238 "[N] -> ([] : { A[] : N >= 0})",
6239 "[N] -> ([] : { A[] : N <= 0})",
6240 "[N] -> ([] : { A[] })" },
6242 "[N] -> ([] : { A[] })",
6243 "[N] -> ([] : { : })",
6244 "[N] -> ([] : { : })" },
6246 "[N] -> ([] : { : })",
6247 "[N] -> ([] : { A[] })",
6248 "[N] -> ([] : { : })" },
6250 "[N] -> ([] : { : N >= 0})",
6251 "[N] -> ([] : { : N <= 0})",
6252 "[N] -> ([] : { : })" },
6253 { &isl_multi_union_pw_aff_range_product,
6254 "B[{ A[] -> [1] }]",
6255 "C[{ A[] -> [2] }]",
6256 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]" },
6257 { &isl_multi_union_pw_aff_range_product,
6258 "(B[] : { A[x] : x >= 5 })",
6259 "(C[] : { A[x] : x <= 10 })",
6260 "([B[] -> C[]] : { A[x] : 5 <= x <= 10 })" },
6261 { &isl_multi_union_pw_aff_range_product,
6262 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6263 "(C[] : { A[x] : x <= 10 })",
6264 "[B[{ A[x] -> [x + 1] : 5 <= x <= 10 }] -> C[]]" },
6265 { &isl_multi_union_pw_aff_range_product,
6266 "(C[] : { A[x] : x <= 10 })",
6267 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6268 "[C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= 10 }]]" },
6269 { &isl_multi_union_pw_aff_range_product,
6270 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6271 "[N] -> (C[] : { A[x] : x <= N })",
6272 "[N] -> [B[{ A[x] -> [x + 1] : 5 <= x <= N }] -> C[]]" },
6273 { &isl_multi_union_pw_aff_range_product,
6274 "[N] -> (C[] : { A[x] : x <= N })",
6275 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6276 "[N] -> [C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= N }]]" },
6277 { &isl_multi_union_pw_aff_range_product,
6278 "B[{ A[] -> [1]; D[] -> [3] }]",
6279 "C[{ A[] -> [2] }]",
6280 "[B[{ A[] -> [1]; D[] -> [3] }] -> C[{ A[] -> [2] }]]" },
6281 { &isl_multi_union_pw_aff_range_product,
6284 "([B[] -> C[]] : { A[x] })" },
6285 { &isl_multi_union_pw_aff_range_product,
6288 "([B[] -> C[]] : { A[x] })" },
6308 ok = isl_multi_union_pw_aff_plain_is_equal(mupa1,
res);
6309 isl_multi_union_pw_aff_free(mupa1);
6310 isl_multi_union_pw_aff_free(
res);
6315 "unexpected result",
return -1);
6336 "C[{ B[i,j] -> [i + 2j] }]",
"{ C[1] }",
6337 "C[{ B[i,j] -> [i + 2j] : i + 2j = 1 }]" },
6339 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[N] }",
6340 "[N] -> C[{ B[i,j] -> [i + 2j] : i + 2j = N }]" },
6342 "[N] -> C[{ B[i,j] -> [i + 2j + N] }]",
"{ C[1] }",
6343 "[N] -> C[{ B[i,j] -> [i + 2j + N] : i + 2j + N = 1 }]" },
6345 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[x] : N >= 0 }",
6346 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0 }]" },
6348 "C[]",
"{ C[] }",
"C[]" },
6350 "[N] -> (C[] : { : N >= 0 })",
6352 "[N] -> (C[] : { : N >= 0 })" },
6354 "(C[] : { A[a,b] })",
6356 "(C[] : { A[a,b] })" },
6358 "[N] -> (C[] : { A[a,b] : a,b <= N })",
6360 "[N] -> (C[] : { A[a,b] : a,b <= N })" },
6363 "[N] -> { C[] : N >= 0 }",
6364 "[N] -> (C[] : { : N >= 0 })" },
6366 "(C[] : { A[a,b] })",
6367 "[N] -> { C[] : N >= 0 }",
6368 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6370 "[N] -> (C[] : { : N >= 0 })",
6371 "[N] -> { C[] : N < 1024 }",
6372 "[N] -> (C[] : { : 0 <= N < 1024 })" },
6374 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { : N >= 0 }",
6375 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0}]" },
6377 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"[N] -> { : N >= 0 }",
6378 "[N] -> C[{ B[i,j] -> [i + 2j] : 0 <= N <= 256 }]" },
6380 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"{ : }",
6381 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]" },
6383 "C[]",
"[N] -> { : N >= 0 }",
6384 "[N] -> (C[] : { : N >= 0 })" },
6386 "(C[] : { A[a,b] })",
"[N] -> { : N >= 0 }",
6387 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6389 "[N] -> (C[] : { A[a,N] })",
"{ : }",
6390 "[N] -> (C[] : { A[a,N] })" },
6392 "[N] -> (C[] : { A[a,b] : N <= 256 })",
"[N] -> { : N >= 0 }",
6393 "[N] -> (C[] : { A[a,b] : 0 <= N <= 256 })" },
6413 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6414 isl_multi_union_pw_aff_free(
mupa);
6415 isl_multi_union_pw_aff_free(
res);
6420 "unexpected result",
return -1);
6441 "C[{ B[i,j] -> [i + 2j] }]",
"{ B[i,i] }",
6442 "C[{ B[i,i] -> [3i] }]" },
6444 "(C[] : { B[i,j] })",
"{ B[i,i] }",
6445 "(C[] : { B[i,i] })" },
6447 "(C[] : { B[i,j] })",
"[N] -> { B[N,N] }",
6448 "[N] -> (C[] : { B[N,N] })" },
6450 "C[]",
"{ B[i,i] }",
6451 "(C[] : { B[i,i] })" },
6453 "[N] -> (C[] : { : N >= 0 })",
"{ B[i,i] }",
6454 "[N] -> (C[] : { B[i,i] : N >= 0 })" },
6475 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6476 isl_multi_union_pw_aff_free(
mupa);
6477 isl_multi_union_pw_aff_free(
res);
6482 "unexpected result",
return -1);
6503 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6504 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6505 "{ C[a,b] -> D[b,a] }",
6506 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6507 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6509 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6510 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6511 "{ C[a,b] -> D[b,a] }",
6512 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6513 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6515 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6516 "[N] -> { C[a] -> D[a + N] }",
6517 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }] " },
6523 "[N] -> (C[] : { : N >= 0 })",
6525 "[N] -> (D[] : { : N >= 0 })" },
6528 "[N] -> { C[] -> D[N] }",
6529 "[N] -> D[{ [N] }]" },
6531 "(C[] : { A[i,j] : i >= j })",
6533 "(D[] : { A[i,j] : i >= j })" },
6535 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6537 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6539 "(C[] : { A[i,j] : i >= j })",
6540 "[N] -> { C[] -> D[N] }",
6541 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
6561 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6562 isl_multi_union_pw_aff_free(
mupa);
6563 isl_multi_union_pw_aff_free(
res);
6568 "unexpected result",
return -1);
6589 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6590 "[N] -> { C[a] -> [a + N] }",
6591 "[N] -> { A[i,j] -> [i + N]; B[i,j] -> [j + N] }" },
6593 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6594 "{ C[a] -> [a] : a >= 0; C[a] -> [-a] : a < 0 }",
6595 "{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6596 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }" },
6599 "[N] -> { C[] -> [N] }",
6603 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6604 "[N] -> { [N] : N >= 0; [-N] : N < 0 }" },
6606 "[N] -> (C[] : { : N >= 0 })",
6607 "[N] -> { C[] -> [N] }",
6608 "[N] -> { [N] : N >= 0 }" },
6610 "[N] -> (C[] : { : N >= 0 })",
6611 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6612 "[N] -> { [N] : N >= 0 }" },
6614 "[N] -> (C[] : { : N >= 0 })",
6616 "[N] -> { [0] : N >= 0 }" },
6618 "(C[] : { A[i,j] : i >= j })",
6619 "[N] -> { C[] -> [N] }",
6620 "[N] -> { A[i,j] -> [N] : i >= j }" },
6622 "(C[] : { A[i,j] : i >= j })",
6623 "[N] -> { C[] -> [N] : N >= 0 }",
6624 "[N] -> { A[i,j] -> [N] : i >= j and N >= 0 }" },
6652 "unexpected result",
return -1);
6673 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6674 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6675 "{ C[a,b] -> D[b,a] }",
6676 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6677 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6679 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6680 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6681 "{ C[a,b] -> D[b,a] }",
6682 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6683 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6685 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6686 "[N] -> { C[a] -> D[a + N] }",
6687 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }]" },
6689 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6690 "{ C[a] -> D[a] : a >= 0; C[a] -> D[-a] : a < 0 }",
6691 "D[{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6692 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }]" },
6694 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6695 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6696 "{ C[a,b] -> D[a,b] : a >= b; C[a,b] -> D[b,a] : a < b }",
6697 "D[{ A[i,j] -> [i] : i >= j; A[i,j] -> [j] : i < j; "
6698 "B[i,j] -> [j] : i <= j; B[i,j] -> [i] : i > j }, "
6699 "{ A[i,j] -> [j] : i >= j; A[i,j] -> [i] : i < j; "
6700 "B[i,j] -> [i] : i <= j; B[i,j] -> [j] : i > j }]" },
6706 "[N] -> (C[] : { : N >= 0 })",
6708 "[N] -> (D[] : { : N >= 0 })" },
6711 "[N] -> { C[] -> D[N] }",
6712 "[N] -> D[{ [N] }]" },
6714 "(C[] : { A[i,j] : i >= j })",
6716 "(D[] : { A[i,j] : i >= j })" },
6718 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6720 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6722 "(C[] : { A[i,j] : i >= j })",
6723 "[N] -> { C[] -> D[N] }",
6724 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
6727 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6728 "[N] -> D[{ [N] : N >= 0; [-N] : N < 0 }]" },
6730 "[N] -> (C[] : { : N >= 0 })",
6731 "[N] -> { C[] -> D[N] }",
6732 "[N] -> D[{ [N] : N >= 0 }]" },
6734 "[N] -> (C[] : { : N >= 0 })",
6735 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6736 "[N] -> D[{ [N] : N >= 0 }]" },
6738 "[N] -> (C[] : { : N >= 0 })",
6740 "[N] -> D[{ [0] : N >= 0 }]" },
6742 "(C[] : { A[i,j] : i >= j })",
6743 "[N] -> { C[] -> D[N] : N >= 0 }",
6744 "[N] -> D[{ A[i,j] -> [N] : i >= j and N >= 0 }]" },
6765 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6766 isl_multi_union_pw_aff_free(
mupa);
6767 isl_multi_union_pw_aff_free(
res);
6772 "unexpected result",
return -1);
6793 "C[{ B[i,j] -> [i + 2j] }]",
"{ A[a,b] -> B[b,a] }",
6794 "C[{ A[a,b] -> [b + 2a] }]" },
6796 "C[{ B[i,j] -> [i + 2j] }]",
6797 "{ A[a,b] -> B[b,a] : b > a }",
6798 "C[{ A[a,b] -> [b + 2a] : b > a }]" },
6800 "C[{ B[i,j] -> [i + 2j] : j > 4 }]",
6801 "{ A[a,b] -> B[b,a] : b > a }",
6802 "C[{ A[a,b] -> [b + 2a] : b > a > 4 }]" },
6804 "C[{ B[i,j] -> [i + 2j] }]",
6805 "{ A[a,b] -> B[b,a] : a > b; A[a,b] -> B[a,b] : a <= b }",
6806 "C[{ A[a,b] -> [b + 2a] : a > b; A[a,b] -> [a + 2b] : a <= b }]" },
6808 "(C[] : { B[a,b] })",
6809 "{ A[a,b] -> B[b,a] }",
6810 "(C[] : { A[a,b] })" },
6812 "(C[] : { B[a,b] })",
6813 "{ B[a,b] -> A[b,a] }",
6816 "(C[] : { B[a,b] })",
6817 "{ A[a,b] -> B[b,a] : a > b }",
6818 "(C[] : { A[a,b] : a > b })" },
6820 "(C[] : { B[a,b] : a > b })",
6821 "{ A[a,b] -> B[b,a] }",
6822 "(C[] : { A[a,b] : b > a })" },
6824 "[N] -> (C[] : { B[a,b] : a > N })",
6825 "{ A[a,b] -> B[b,a] : a > b }",
6826 "[N] -> (C[] : { A[a,b] : a > b > N })" },
6828 "(C[] : { B[a,b] : a > b })",
6829 "[N] -> { A[a,b] -> B[b,a] : a > N }",
6830 "[N] -> (C[] : { A[a,b] : b > a > N })" },
6833 "{ A[a,b] -> B[b,a] }",
6836 "[N] -> (C[] : { : N >= 0 })",
6837 "{ A[a,b] -> B[b,a] }",
6838 "[N] -> (C[] : { : N >= 0 })" },
6841 "[N] -> { A[a,b] -> B[b,a] : N >= 0 }",
6842 "[N] -> (C[] : { : N >= 0 })" },
6863 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6864 isl_multi_union_pw_aff_free(
mupa);
6865 isl_multi_union_pw_aff_free(
res);
6870 "unexpected result",
return -1);
6887 equal = aff_check_plain_equal(
aff,
"{ A[x] -> [x + 1] }");
6908 ok = aff_check_plain_equal(
aff,
"{ [x] -> [1] }");
6987 equal = aff_check_plain_equal(
aff,
"{ [-1] }");
7011 {
"{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
7013 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
7014 {
"{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }",
7016 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
7017 {
"[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }",
7019 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
7020 {
"[M] -> { D[x, N] : x mod 2 = 0 and N mod 8 = 3 and M >= 0 }",
7022 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 and M >= 0 }" },
7060 {
"{ A[M, N] -> [M + floor(N/2)] }",
7062 "[M, N] -> { [M + floor(N/2)] }" },
7063 {
"{ B[N, M] -> [M + floor(N/2)] }",
7065 "[N, M] -> { [M + floor(N/2)] }" },
7066 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
7068 "[M, N] -> { [M + floor(N/2)] }" },
7069 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
7071 "[M, N] -> { [M + floor(N/2)] }" },
7072 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
7074 "[M, N] -> { [M + floor(N/2)] }" },
7075 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
7077 "[A, N, M] -> { [M + floor(N/2)] }" },
7118 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
7120 "[M, N] -> { B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
7121 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
7124 {
"{ A[] -> B[]; C[] -> D[]; E[] -> B[] }",
7167 {
"{ A[M, N] -> [M + floor(N/2)] }",
7169 "[M, N] -> { [M + floor(N/2)] }" },
7170 {
"{ B[N, M] -> [M + floor(N/2)] }",
7172 "[N, M] -> { [M + floor(N/2)] }" },
7173 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
7175 "[M, N] -> { [M + floor(N/2)] }" },
7176 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
7178 "[M, N] -> { [M + floor(N/2)] }" },
7179 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
7181 "[M, N] -> { [M + floor(N/2)] }" },
7182 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
7184 "[A, N, M] -> { [M + floor(N/2)] }" },
7205 r = pw_multi_aff_check_plain_equal(
pma,
str);
7224 {
"{ [A[M, N] -> B[]] -> [M + floor(N/2)] }",
7226 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7227 {
"{ [B[N, M] -> D[]] -> [M + floor(N/2)] }",
7229 "[N, M] -> { D[] -> [M + floor(N/2)] }" },
7230 {
"[M] -> { [C[N] -> B[x]] -> [x + M + floor(N/2)] }",
7232 "[M, N] -> { B[x] -> [x + M + floor(N/2)] }" },
7233 {
"[M] -> { [C[x, N] -> B[]] -> [x + floor(N/2)] }",
7235 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7236 {
"[M] -> { [C[x, N] -> B[]] -> [M + floor(N/2)] }",
7238 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7239 {
"[A, M] -> { [C[N, x] -> B[]] -> [x + floor(N/2)] }",
7241 "[A, N, M] -> { B[] -> [M + floor(N/2)] }" },
7262 r = pw_multi_aff_check_plain_equal(
pma,
str);
7282 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7283 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7284 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7285 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7286 {
"{ [NaN] }",
"M",
"{ : false }" },
7287 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7325 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7326 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7327 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7328 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7329 {
"[M] -> { [M] : M >= 0; [-M] : M < 0 }",
"M",
"[M] -> { : M >= 0 }" },
7330 {
"{ [NaN] }",
"M",
"{ : false }" },
7331 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7369 {
"A[{ [4] }, { [5] }]",
7371 "[M = 4, N = 5] -> { : }" },
7372 {
"A[{ B[x] -> [floor(x/2)] }, { B[y] -> [y + 5] }]",
7374 "[M, N] -> { B[x] : M = floor(x/2) and N = x + 5 }" },
7375 {
"[M] -> A[{ [4] }, { [M + 1] }]",
7377 "[M = 4, N = 5] -> { : }" },
7441 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7443 "{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7444 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7446 "{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
7447 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7449 "[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }" },
7450 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7452 "[M] -> { D[x, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7490 {
"[M, N] -> { [M + floor(N/2)] }",
7492 "{ A[M, N] -> [M + floor(N/2)] }" },
7493 {
"[M, N] -> { [M + floor(N/2)] }",
7495 "{ B[N, M] -> [M + floor(N/2)] }" },
7496 {
"[M, N] -> { [M + floor(N/2)] }",
7498 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7499 {
"[M, N] -> { [M + floor(N/2)] }",
7500 "{ D[A, B, C, N, Z] }",
7501 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7539 {
"[M, N] -> { T[M + floor(N/2)] }",
7541 "{ A[M, N] -> T[M + floor(N/2)] }" },
7542 {
"[M, N] -> { [M + floor(N/2)] }",
7544 "{ B[N, M] -> [M + floor(N/2)] }" },
7545 {
"[M, N] -> { [M + floor(N/2)] }",
7547 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7548 {
"[M, N] -> { [M + floor(N/2)] }",
7549 "{ D[A, B, C, N, Z] }",
7550 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7551 {
"[M, N] -> { T[M + floor(N/2), N + floor(M/3)] }",
7553 "{ A[M, N] -> T[M + floor(N/2), N + floor(M/3)] }" },
7572 ma = isl_multi_aff_unbind_params_insert_domain(
ma,
tuple);
7574 r = multi_aff_check_plain_equal(
ma,
str);
7575 isl_multi_aff_free(
ma);
7627 str =
"[n] -> { [a, b] : n >= 0 and 4a >= -4 + n and b >= 0 and "
7628 "-4a <= b <= 3 and b < n - 4a }";
7649 str =
"[P, N] -> { [a] : a < N and a >= 0 and N > P and a <= P and "
7650 "N > 0 and P >= 0 }";
7670 str =
"[N] -> { [i] : 0 <= i <= min(N,10) }";
7674 str =
"[N] -> { [10] : N >= 10; [N] : N <= 9 and N >= 0 }";
7684 str =
"[N] -> { [i] : 0 <= i <= max(2N,N+6) }";
7688 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7698 str =
"[N] -> { [i] : 0 <= i <= 2N or 0 <= i <= N+6 }";
7702 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7712 str =
"[N,M] -> { [i,j] -> [([i/16]), i%16, ([j/16]), j%16] : "
7713 "0 <= i < N and 0 <= j < M }";
7719 str =
"[N,M] -> { [([(N-1)/16])] : M,N > 0 }";
7727 str =
"[N,M] -> { [t] : t = min(M-1,15) and M,N > 0 }";
7742 str =
"[n] -> { [a, b, c] : c >= -4a - 2b and "
7743 "c <= -1 + n - 4a - 2b and c >= -2b and "
7744 "4a >= -4 + n and c >= 0 }";
7748 str =
"[n] -> { [(0)] : n >= 1 }";
7760 str =
"[n] -> { [t,a] : 1 = 0 }";
7764 str =
"[n] -> { [t] : 1 = 0 }";
7788 str =
"{ A[i] -> B[1] : i < 0; A[i] -> B[2] : i >= 0 }";
7790 str =
"{ C[] -> D[] }";
7793 str =
"{ [A[i] -> C[]] -> [B[(1)] -> D[]] : i < 0;"
7794 "[A[i] -> C[]] -> [B[(2)] -> D[]] : i >= 0 }";
7795 equal = pw_multi_aff_check_plain_equal(pma1,
str);
7823 str =
"{ [[] -> []] }";
7848 str =
"[n] -> { [[]->[]] }";
7850 str =
"{ [[]->[]] }";
7872 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 1 }",
7873 "[N] -> { [0] : 0 <= N <= 1 }" },
7874 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7875 "[N] -> { [0] : 0 <= N <= 1; [1] : N = 2 }" },
7876 { 0,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7877 "[N] -> { [0] : 0 <= N <= 1 }" },
7878 { 0,
"{ [NaN] }",
"{ [NaN] }" },
7913 "unexpected equality result",
return -1);
7932 "map not detected as fixed",
return -1);
7935 "map detected as fixed",
return -1);
7943 str =
"{ [i] -> [i] }";
7947 str =
"{ [i] -> [1] }";
7951 str =
"{ S_1[p1] -> [o0] : o0 = -2 and p1 >= 1 and p1 <= 7 }";
7968 {
"{ A[t, i] : t = 12 and i >= 4 and i <= 12 }",
7969 2, {
"{ A[12, 4] }",
"{ A[12, 12] }" } },
7970 {
"{ A[t, i] : t = 14 and i = 1 }",
7971 1, {
"{ A[14, 1] }" } },
7972 {
"[n, m] -> { [a, b, c] : b <= a and a <= n and b > 0 and c >= b and "
7973 "c <= m and m <= n and m > 0 }",
7975 "[n, m] -> { [n, m, m] : 0 < m <= n }",
7976 "[n, m] -> { [n, 1, m] : 0 < m <= n }",
7977 "[n, m] -> { [n, 1, 1] : 0 < m <= n }",
7978 "[n, m] -> { [m, m, m] : 0 < m <= n }",
7979 "[n, m] -> { [1, 1, m] : 0 < m <= n }",
7980 "[n, m] -> { [1, 1, 1] : 0 < m <= n }"
7983 {
"[N, M] -> { [a, b] : M >= 3 and 9 + 3M <= a <= 29 + 2N + 11M and "
7984 "2b >= M + a and 5 - 2N - M + a <= 2b <= 3 + a and "
7987 "[N, M] -> { [(21), (12)] : M = 3 and N >= 0 }",
7988 "[N, M] -> { [(61 + 2N), (32 + N)] : M = 3 and N >= 0 }",
8010 for (i = 0; i < data->
n; ++i) {
8072 "{ A[] -> [B[] -> C[]]; A[] -> B[]; A[0] -> N[B[1] -> B[2]] }",
8073 "{ A[] -> [C[] -> B[]]; A[0] -> N[B[2] -> B[1]] }" },
8075 "{ A[] -> N[B[] -> C[]] }",
8076 "{ A[] -> [C[] -> B[]] }" },
8078 "{ A[] -> N[B[x] -> B[y]] }",
8079 "{ A[] -> N[B[*] -> B[*]] }" },
8124 "[n] -> { A[i] -> [] : 0 <= i <= n; B[] -> [] }",
8125 "[m] -> { A[i] -> [] : 0 <= i <= m; C[] -> [] }",
8126 "[m, n] -> { A[i] -> [] : 0 <= i <= n and i <= m }" },
8128 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
8129 "[N] -> { B[i] -> C[N] }",
8132 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
8133 "[N] -> { A[i] -> C[N] }",
8134 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
8136 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
8137 "[N] -> { A[i] -> C[N] }",
8138 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
8140 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
8141 "[N] -> { B[i] -> C[N] }",
8142 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
8144 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
8145 "[N] -> { B[i] -> C[N] }",
8146 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
8148 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
8149 "[N] -> { A[i] -> C[N] }",
8152 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
8153 "[N] -> { A[i] -> B[N] }",
8154 "[N] -> { A[N - 1] -> [B[N] -> C[N + 1]] }" },
8156 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
8157 "[N] -> { A[i] -> B[N] }",
8158 "[N] -> { A[N - 1] -> T[B[N] -> C[N + 1]] }" },
8160 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
8161 "[N] -> { A[i] -> C[N] }",
8164 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
8165 "[N] -> { A[i] -> C[N] }",
8166 "[N] -> { A[N - 2] -> [B[N - 1] -> C[N]] }" },
8168 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
8169 "[N] -> { A[i] -> C[N] }",
8170 "[N] -> { A[N - 2] -> T[B[N - 1] -> C[N]] }" },
8172 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
8173 "[N] -> { A[i] -> B[N] }",
8219 str =
"[N] -> { A[0:N]; B[*,*] }";
8251#define BASE union_pw_qpolynomial
8268 upwqp1 =
fn(upwqp1, upwqp2);
8269 r = union_pw_qpolynomial_check_plain_equal(upwqp1,
res);
8283 str =
"{ [x] -> x^2 }";
8297 a =
"{ A[x] -> x^2 : x >= 0; B[x] -> x }";
8298 b =
"{ A[x] -> x }";
8299 str =
"{ A[x] -> x^2 + x : x >= 0; A[x] -> x : x < 0; B[x] -> x }";
8302 str =
"{ A[x] -> x^2 - x : x >= 0; A[x] -> -x : x < 0; B[x] -> x }";
8306 str =
"{ A[x] -> 0 }";
8307 a =
"{ A[x] -> 1 }";
8308 b =
"{ A[x] -> -1 }";
8311 a =
"{ A[x] -> 1 }";
8312 b =
"{ A[x] -> 1 }";
8332 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8333 "{ A[0,j]; B[0,j] }" },
8335 "F[{ A[i,j] -> [i-j]; B[i,j] -> [i-j] : i >= 0 }]",
8336 "{ A[i,i]; B[i,i] : i >= 0 }" },
8338 "(F[] : { A[i,j]; B[i,i] : i >= 0 })",
8339 "{ A[i,j]; B[i,i] : i >= 0 }" },
8364 "unexpected result",
return -1);
8386 "{ A[i,j] -> B[i',j'] }",
8387 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8388 "{ A[i,j] -> B[i,j'] }" },
8390 "{ A[i,j] -> B[i',j'] }",
8391 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8392 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8393 "{ A[i,j] -> B[i,j] }" },
8395 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8396 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8397 "{ A[i,j] -> B[i,j'] }" },
8399 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8400 "F[{ A[i,j] -> [i]; B[i,j] -> [i]; C[i,j] -> [0] }]",
8401 "{ A[i,j] -> B[i,j']; A[0,j] -> C[i',j'] }" },
8403 "{ A[i,j] -> B[i',j'] }",
8404 "F[{ A[i,j] -> [i] : i > j; B[i,j] -> [i] }]",
8405 "{ A[i,j] -> B[i,j'] : i > j }" },
8407 "{ A[i,j] -> B[i',j'] }",
8408 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8409 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8410 "{ A[i,j] -> B[i',j'] : i,j <<= i',j' }" },
8412 "{ A[i,j] -> B[i',j'] }",
8413 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8414 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8415 "{ A[i,j] -> B[i',j'] : i,j << i',j' }" },
8417 "{ A[i,j] -> B[i',j'] }",
8418 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8419 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8420 "{ A[i,j] -> B[i',j'] : i,j >>= i',j' }" },
8422 "{ A[i,j] -> B[i',j'] }",
8423 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8424 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8425 "{ A[i,j] -> B[i',j'] : i,j >> i',j' }" },
8427 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8428 "(F[] : { A[i,j]; B[i,j] })",
8429 "{ A[i,j] -> B[i',j'] }" },
8431 "{ A[i,j] -> B[i',j'] }",
8432 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8433 "{ A[i,j] -> B[i',j'] : i > j and i' < j' }" },
8435 "[N] -> { A[i,j] -> B[i',j'] : i,i' <= N }",
8436 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8437 "[N] -> { A[i,j] -> B[i',j'] : i > j and i' < j' and i,i' <= N }" },
8439 "{ A[i,j] -> B[i',j'] }",
8440 "[N] -> (F[] : { A[i,j] : i < N; B[i,j] : i < N })",
8441 "[N] -> { A[i,j] -> B[i',j'] : i,i' < N }" },
8443 "{ A[i,j] -> B[i',j'] }",
8444 "[N] -> (F[] : { : N >= 0 })",
8445 "[N] -> { A[i,j] -> B[i',j'] : N >= 0 }" },
8473 "unexpected result",
return -1);
8496 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8497 "{ A[i] : i <= 0 }" },
8499 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8500 "{ A[i] : i < 0 }" },
8502 "{ A[i] -> [i, i] }",
"{ A[i] -> [0, 0] }",
8503 "{ A[i] : i <= 0 }" },
8505 "{ A[i] -> [i, 0] }",
"{ A[i] -> [0, 0] }",
8506 "{ A[i] : i <= 0 }" },
8508 "{ A[i] -> [i, 1] }",
"{ A[i] -> [0, 0] }",
8509 "{ A[i] : i < 0 }" },
8570 str =
"{ A[x] -> x^2; B[x] -> -x^2 }";
8598 str =
"{ A[x] -> [x] }";
8600 str =
"{ A[x] : false }";
8646 {
"{ [i] -> [2 * i] }",
"{ [4] }",
"8" },
8647 {
"{ [i] -> [2 * i] }",
"{ [x] : false }",
"NaN" },
8648 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [0] }",
"0" },
8649 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [1] }",
"1" },
8650 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [2] }",
"3" },
8651 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [3] }",
"5" },
8652 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [4] }",
"7" },
8653 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [0] }",
"0" },
8654 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [1] }",
"0" },
8655 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [2] }",
"0" },
8656 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [3] }",
"0" },
8657 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [4] }",
"1" },
8658 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [6] }",
"1" },
8659 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [8] }",
"2" },
8660 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [4] }",
"4" },
8661 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [-2] }",
"2" },
8662 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [0] }",
"NaN" },
8663 {
"[N] -> { [2 * N] }",
"[N] -> { : N = 4 }",
"8" },
8664 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 1] }",
"1" },
8665 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 2] }",
"3/2" },
8666 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [4] }",
"4" },
8667 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [3] }",
"NaN" },
8668 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [x] : false }",
"NaN" },
8669 {
"[m, n] -> { [2m + 3n] }",
"[n=1, m=10] -> { : }",
"23" },
8715 "{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }",
8718 "{ [x] : x mod 2 = 0 }",
8719 "{ [x] : x mod 2 = 1 }",
8720 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) < x }",
8721 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) < x }",
8722 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8723 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8724 "[n] -> { [y, x] : 2*((x + 2y) mod 3) = n }",
8725 "{ [x, y] : (2*floor(x/3) + 3*floor(y/4)) mod 5 = x }",
8750 "parsed output not the same",
return -1);
8767 ma = isl_multi_aff_set_aff(
ma, 0,
aff);
8771 equal = isl_multi_aff_plain_is_equal(
ma, ma2);
8772 isl_multi_aff_free(ma2);
8773 isl_multi_aff_free(
ma);
8795 mpa = isl_multi_pw_aff_set_pw_aff(mpa, 0, pa);
8799 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
8800 isl_multi_pw_aff_free(mpa2);
8801 isl_multi_pw_aff_free(mpa);
8827 str =
"[x] -> { [1] : x % 4 <= 2; [2] : x = 3 }";
8839 equal = !strcmp(s,
"4 * floord(x, 4) + 2 >= x ? 1 : 2");
8855 str =
"{ [a, b, c, d, e, f, g, h, i, j, k] : "
8856 "3i >= 1073741823b - c - 1073741823e + f and c >= 0 and "
8857 "3i >= -1 + 3221225466b + c + d - 3221225466e - f and "
8858 "2e >= a - b and 3e <= 2a and 3k <= -a and f <= -1 + a and "
8859 "3i <= 4 - a + 4b + 2c - e - 2f and 3k <= -a + c - f and "
8860 "3h >= -2 + a and 3g >= -3 - a and 3k >= -2 - a and "
8861 "3i >= -2 - a - 2c + 3e + 2f and 3h <= a + c - f and "
8862 "3h >= a + 2147483646b + 2c - 2147483646e - 2f and "
8863 "3g <= -1 - a and 3i <= 1 + c + d - f and a <= 1073741823 and "
8864 "f >= 1 - a + 1073741822b + c + d - 1073741822e and "
8865 "3i >= 1 + 2b - 2c + e + 2f + 3g and "
8866 "1073741822f <= 1073741822 - a + 1073741821b + 1073741822c +"
8867 "d - 1073741821e and "
8868 "3j <= 3 - a + 3b and 3g <= -2 - 2b + c + d - e - f and "
8869 "3j >= 1 - a + b + 2e and "
8870 "3f >= -3 + a + 3221225462b + 3c + d - 3221225465e and "
8871 "3i <= 4 - a + 4b - e and "
8872 "f <= 1073741822 + 1073741822b - 1073741822e and 3h <= a and "
8873 "f >= 0 and 2e <= 4 - a + 5b - d and 2e <= a - b + d and "
8874 "c <= -1 + a and 3i >= -2 - a + 3e and "
8875 "1073741822e <= 1073741823 - a + 1073741822b + c and "
8876 "3g >= -4 + 3221225464b + 3c + d - 3221225467e - 3f and "
8877 "3i >= -1 + 3221225466b + 3c + d - 3221225466e - 3f and "
8878 "1073741823e >= 1 + 1073741823b - d and "
8879 "3i >= 1073741823b + c - 1073741823e - f and "
8880 "3i >= 1 + 2b + e + 3g }";
8887 if (empty < 0 ||
subset < 0)
8908 str =
"{ [a, b, c, d, e, f, g, h] : 5f = 1 + 4a - b + 5c - d - 2e and "
8909 "3h = 2 + b + c and 14c >= 9 - 3a + 25b and "
8910 "4c <= 50 - 3a + 23b and 6b <= -39 + a and "
8911 "9g >= -6 + 3a + b + c and e < a + b - 2d and "
8912 "7d >= -5 + 2a + 2b and 5g >= -14 + a - 4b + d + 2e and "
8913 "9g <= -28 - 5b - 2c + 3d + 6e }";
8931 str =
"{ [i] -> [j] }";
8939 str =
"{ [i] -> [j] }";
8947 str =
"{ [i] -> [j] }";
8955 str =
"{ [i] -> [j] }";
8963 str =
"{ [i] -> [j] }";
8971 str =
"{ [i] -> [j] }";
8988 str =
"{ [i] -> [j] : i = 2j }";
9007 str =
"{ A[i] -> A[i + 1] }";
9029 str =
"{ [i,j] : j = 4 i + 1 and 0 <= i <= 100; "
9030 "[i,j] : j = 4 i + 3 and 500 <= i <= 600 }";
9053 str =
"{ A[B[] -> C[]] -> D[E[] -> F[]] }";
9058 ma1 = isl_multi_aff_align_params(
ma1, space);
9060 str =
"[N] -> { A[B[] -> C[]] -> D[E[] -> F[]] }";
9063 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
9065 isl_multi_aff_free(
ma1);
9066 isl_multi_aff_free(ma2);
9072 "result not as expected",
return -1);
9094 ma = isl_multi_aff_from_aff_list(space, isl_aff_list_from_aff(
aff));
9095 isl_multi_aff_free(
ma);
9121 const char *str_with, *str_without;
9127 str_with =
"[n, m, o] -> { [m] }";
9128 str_without =
"[m] -> { [m] }";
9141 "result not as expected",
return -1);
9154 "result not as expected",
return -1);
9167 "result not as expected",
return -1);
9184 list = isl_id_list_alloc(ctx, 4);
9185 list = isl_id_list_add(list,
b);
9186 list = isl_id_list_insert(list, 0,
a);
9187 list = isl_id_list_add(list, c);
9188 list = isl_id_list_add(list, d);
9189 list = isl_id_list_drop(list, 1, 1);
9191 n = isl_id_list_n_id(list);
9195 isl_id_list_free(list);
9197 "unexpected number of elements in list",
return -1);
9200 id = isl_id_list_get_id(list, 0);
9203 id = isl_id_list_get_id(list, 1);
9206 id = isl_id_list_get_id(list, 2);
9210 isl_id_list_free(list);
9214 "unexpected elements in list",
return -1);
9228 str =
"[N] -> { A[0, N + 1] }";
9244 "[N] -> { [i] : N - 1 <= 2 i <= N }",
9245 "[N] -> { [i] : exists a : i = 4 a and N - 1 <= i <= N }",
9246 "[N] -> { [i,j] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9247 "[N] -> { [[i]->[j]] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9248 "[N] -> { [3*floor(N/2) + 5*floor(N/3)] }",
9249 "[a, b] -> { [c, d] : (4*floor((-a + c)/4) = -a + c and "
9250 "32*floor((-b + d)/32) = -b + d and 5 <= c <= 8 and "
9251 "-3 + c <= d <= 28 + c) }",
9285 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9286 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9287 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9288 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9290 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9291 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9292 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9328 "{ [x] -> A[x] : x >= 0 }",
9329 "{ [x] -> A[x] : x >= 0; [x] -> A[-x] : x < 0 }",
9330 "{ [x] -> A[x, x + 1] }",
9332 "{ [x] -> A[] : x >= 0 }",
9370 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9371 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9372 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9373 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9375 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9376 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9377 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9378 "{ A[] -> B[0]; C[] -> B[1] }",
9379 "{ A[] -> B[]; C[] -> B[] }",
9436 str =
"{ [A[] -> B[]] -> C[] }";
9447 "curried map should not be equal to original",
9458 {
"{ B[i,j] -> C[i + 2j] }" ,
"{ A[a,b] -> B[b,a] }",
9459 "{ A[a,b] -> C[b + 2a] }" },
9460 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/2] }",
"{ A[a] -> C[a] }" },
9461 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[2a] }",
"{ A[a] -> C[a] }" },
9462 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[(a)/3] }",
9463 "{ A[a] -> C[(a)/6] }" },
9464 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[5a] }",
"{ A[a] -> C[10a] }" },
9465 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/3] }",
9466 "{ A[a] -> C[(2a)/3] }" },
9467 {
"{ B[i,j] -> C[i + j] }",
"{ A[a] -> B[a,a] }",
"{ A[a] -> C[2a] }"},
9468 {
"{ B[a] -> C[a,a] }",
"{ A[i,j] -> B[i + j] }",
9469 "{ A[i,j] -> C[i + j, i + j] }"},
9470 {
"{ B[i] -> C[([i/2])] }",
"{ B[5] }",
"{ C[2] }" },
9471 {
"[n] -> { B[i,j] -> C[([i/2]) + 2j] }",
9472 "[n] -> { B[n,[n/3]] }",
"[n] -> { C[([n/2]) + 2*[n/3]] }", },
9473 {
"{ [i, j] -> [floor((i)/4) + floor((2*i+j)/5)] }",
9474 "{ [i, j] -> [floor((i)/3), j] }",
9475 "{ [i, j] -> [(floor((i)/12) + floor((j + 2*floor((i)/3))/5))] }" },
9490 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
9491 isl_multi_aff_free(
ma1);
9492 isl_multi_aff_free(ma2);
9520 ok =
str ? !strcmp(
str,
"-(A + B)") : -1;
9525 if (ok < 0 ||
equal < 0)
9529 "equal expressions not considered equal",
return -1);
9532 "isl_ast_expr printed incorrectly",
return -1);
9540 ok =
str ? !strcmp(
str,
"C - (A + B)") : -1;
9548 "isl_ast_expr printed incorrectly",
return -1);
9617 "unexpected number of for nodes",
return NULL);
9620 "unexpected depth",
return NULL);
9634 "expecting single range space",
return NULL);
9647 "spaces don't match",
return NULL);
9672 "mismatch in number of for nodes",
9712 isl_ast_node_list *children;
9719 child = isl_ast_node_list_get_at(children, 0);
9720 isl_ast_node_list_free(children);
9742 int modified_count = 0;
9750 str =
"[N] -> { : N >= 10 }";
9752 str =
"[N] -> { A[i,j] -> S[8,i,3,j] : 0 <= i,j <= N; "
9753 "B[i,j] -> S[8,j,9,i] : 0 <= i,j <= N }";
9774 &modified_count) < 0)
9784 "unexpected number of for nodes",
9787 if (modified_count != 2)
9789 "unexpected number of for nodes after changes",
9807 str =
"{ A[i,j] -> [i,j] : 0 <= i,j <= 1 }";
9812 str =
"{ [i,j] -> atomic[1] : i + j = 1; [i,j] -> unroll[1] : i = j }";
9850 str =
"[n] -> { A[i] -> [i] : 0 <= i <= 100 and n <= i <= n + 2 }";
9854 str =
"{ [i] -> unroll[0] }";
9870 "unexpected number of for nodes",
return -1);
9890 str =
"[N,M] -> { A[i,j] -> [i,j] : 0 <= i <= N and 0 <= j <= M }";
9907 "not expecting if node",
return -1);
9924 "expecting if node",
return -1);
9957 "code should not contain any for loop",
9981 str =
"{ A[] -> [1, 1, 2]; B[i] -> [1, i, 0] : i >= 1 and i <= 2 }";
9984 str =
"{ [a, b, c] -> unroll[1] : exists (e0 = [(a)/4]: "
9985 "4e0 >= -1 + a - b and 4e0 <= -2 + a + b) }";
10024 str =
"[n] -> { [n/2] : n <= 0 and n % 2 = 0; [0] : n > 0 }";
10039 "expressions should not be combined",
return -1);
10070 str =
"{ [i,j] -> [i+j, 4i-j] }";
10072 str =
"{ [i,j] -> [4i-j] }";
10085 "expressions not equal",
return -1);
10106 mpa2 = isl_multi_pw_aff_flat_range_product(mpa1, mpa2);
10107 str =
"{ [i] -> [(i : i > 0), 2i] }";
10110 equal = isl_multi_pw_aff_plain_is_equal(mpa1, mpa2);
10112 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 0);
10114 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 1);
10120 isl_multi_pw_aff_free(mpa1);
10121 isl_multi_pw_aff_free(mpa2);
10127 "expressions not equal",
return -1);
10129 if (equal_domain < 0)
10133 "domains unexpectedly equal",
return -1);
10148 str =
"{ A[x,y] -> B[] : x >= y }";
10150 involves1 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 2);
10151 mpa1 = isl_multi_pw_aff_copy(mpa);
10153 mpa = isl_multi_pw_aff_insert_dims(mpa,
isl_dim_in, 0, 1);
10154 involves2 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 1);
10155 involves3 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 1, 2);
10156 str =
"{ [a,x,y] -> B[] : x >= y }";
10158 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
10159 isl_multi_pw_aff_free(mpa2);
10161 mpa = isl_multi_pw_aff_drop_dims(mpa,
isl_dim_in, 0, 1);
10162 mpa = isl_multi_pw_aff_set_tuple_name(mpa,
isl_dim_in,
"A");
10164 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa1);
10165 isl_multi_pw_aff_free(mpa1);
10166 isl_multi_pw_aff_free(mpa);
10168 if (involves1 < 0 || involves2 < 0 || involves3 < 0 ||
equal < 0)
10172 "incorrect result of dimension insertion/removal",
10174 if (!involves1 || involves2 || !involves3)
10176 "incorrect characterization of involved dimensions",
10210 "{ A[x, y] -> [] : x + y >= 0 }",
10211 "[N] -> { A[x, y] -> [x] : x + y <= N }",
10212 "[N] -> { A[x, y] -> [x : y] : x + y <= N }",
10278 str =
"{ [i0, i1, i2, i3] : i0 >= -2 and 6i2 <= 4 + i0 + 5i1 and "
10279 "i2 <= 22 and 75i2 <= 111 + 13i0 + 60i1 and "
10280 "25i2 >= 38 + 6i0 + 20i1 and i0 <= -1 and i2 >= 20 and "
10290 "basic set should be empty",
return -1);
10304 str =
"{ [a] : exists e0, e1: 32e1 = 31 + 31a + 31e0 }";
10313 "equality not simplified away",
return -1);
10340 str =
"{ [1, b, c, 1 - c] -> [e] : 2e <= -c and 2e >= -3 + c }";
10342 str =
"{ [a, b, c, d] : c <= 1 and 2d >= 6 - 4b - c }";
10363 str =
"[a, b, c, d, e] -> { [] : exists (e0: 2d = b and a <= 124 and "
10364 "b <= 2046 and b >= 0 and b <= 60 + 64a and 2e >= b + 2c and "
10365 "2e >= b and 2e <= 1 + b and 2e <= 1 + b + 2c and "
10366 "32768e0 >= -124 + a and 2097152e0 <= 60 + 64a - b) }";
10393 str =
"[n] -> { A[i] : 0 <= i < n; B[] }";
10417 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10422 str =
"{ S1[i,j] : i > j }";
10424 filters = isl_union_set_list_from_union_set(uset);
10425 str =
"{ S1[i,j] : i <= j; S2[i,j] }";
10427 filters = isl_union_set_list_add(filters, uset);
10432 str =
"([] : { S1[i,j] : i > j })";
10434 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10435 isl_multi_union_pw_aff_free(mupa2);
10436 isl_multi_union_pw_aff_free(
mupa);
10463 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10467 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [9 - i] }]";
10471 str =
"[{ S1[i,j] -> [j]; S2[i,j] -> [j] }]";
10502 "expressions not equal",
return -1);
10518 int equal, equal_expansion;
10529 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10; "
10530 "S3[i,j] : 0 <= i,j < 10 }";
10534 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [i]; S3[i,j] -> [i] }]";
10538 str =
"{ S1[i,j] }";
10540 filters = isl_union_set_list_from_union_set(uset);
10541 str =
"{ S2[i,j]; S3[i,j] }";
10543 filters = isl_union_set_list_add(filters, uset);
10546 str =
"{ S2[i,j] }";
10548 filters = isl_union_set_list_from_union_set(uset);
10549 str =
"{ S3[i,j] }";
10551 filters = isl_union_set_list_add(filters, uset);
10576 str =
"{ group1[i] -> S1[i,j] : 0 <= i,j < 10; "
10577 "group1[i] -> S2[i,j] : 0 <= i,j < 10; "
10578 "group1[i] -> S3[i,j] : 0 <= i,j < 10 }";
10590 if (
equal < 0 || equal_expansion < 0)
10594 "expressions not equal",
return -1);
10595 if (!equal_expansion)
10597 "unexpected expansion",
return -1);
10617 {
"{ rat: [i] : 0 <= i <= 10 }",
10618 "{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }" },
10619 {
"{ rat: [i] : FALSE }",
10620 "{ rat: coefficients[[cst] -> [a]] }" },
10621 {
"{ rat: [i] : }",
10622 "{ rat: coefficients[[cst] -> [0]] : cst >= 0 }" },
10623 {
"{ [0:,1,2:3] }",
10624 "{ rat: coefficients[[c_cst] -> [a, b, c]] : "
10625 "a >= 0 and 2c >= -c_cst - b and 3c >= -c_cst - b }" },
10626 {
"[M, N] -> { [x = (1 - N):-1, -4x:(M - 4x)] }",
10627 "{ rat: coefficients[[c_cst, c_M = 0:, c_N = 0:] -> [a, b = -c_M:]] :"
10628 "4b >= -c_N + a and 4b >= -c_cst - 2c_N + a }" },
10629 {
"{ rat : [x, y] : 1 <= 2x <= 9 and 2 <= 3y <= 16 }",
10630 "{ rat: coefficients[[c_cst] -> [c_x, c_y]] : "
10631 "4c_y >= -6c_cst - 3c_x and 4c_y >= -6c_cst - 27c_x and "
10632 "32c_y >= -6c_cst - 3c_x and 32c_y >= -6c_cst - 27c_x }" },
10633 {
"{ [x, y, z] : 3y <= 2x - 2 and y >= -2 + 2x and 2y >= 2 - x }",
10634 "{ rat: coefficients[[cst] -> [a, b, c]] }" },
10641 {
"{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }",
10642 "{ rat: [i] : 0 <= i <= 10 }" },
10643 {
"{ rat: coefficients[[cst] -> [a]] : FALSE }",
10645 {
"{ rat: coefficients[[cst] -> [a]] }",
10646 "{ rat: [i] : FALSE }" },
10670 "incorrect dual",
return -1);
10687 "incorrect dual",
return -1);
10702 { 0, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10703 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10705 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10706 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10708 { 1, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10709 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10711 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10712 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10714 { 0, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10715 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10717 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10718 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10720 { 1, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10721 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10723 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10724 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10769 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10770 isl_multi_union_pw_aff_free(
mupa);
10771 isl_multi_union_pw_aff_free(mupa2);
10779 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa,
10781 isl_multi_union_pw_aff_free(
mupa);
10782 isl_multi_union_pw_aff_free(mupa2);
10790 "unexpected result",
return -1);
10806 uint32_t hash1, hash2;
10818 if (hash1 != hash2)
10820 "domain hash not equal to hash of domain",
return -1);
10834 s =
"{ [] : exists x, y : 3y <= 2x and y >= -3 + 2x and 2y >= 2 - x }";
10843 "not recognized as universe set",
return -1);
10851 "[A, B, C] -> { [x, y, z] : x >= 0 and y >= 0 and y <= A - x and "
10852 "z >= 0 and z <= C - y and z <= B - x - y }",
10864 *cells = isl_basic_set_list_add(*cells, dom);
10876 n = isl_basic_set_list_n_basic_set(list);
10880 for (i = 0; i <
n; ++i) {
10883 bset_i = isl_basic_set_list_get_basic_set(list, i);
10884 for (j = i + 1; j <
n; ++j) {
10888 bset_j = isl_basic_set_list_get_basic_set(list, j);
10892 isl_die(isl_basic_set_list_get_ctx(list),
10895 if (disjoint < 0 || !disjoint)
10921 cells = isl_basic_set_list_alloc(ctx, 0);
10924 cells = isl_basic_set_list_free(cells);
10926 isl_basic_set_list_free(cells);
10988 {
"single-valued", &
test_sv },
11002 {
"piecewise quasi-polynomials", &
test_pwqp },
11010 {
"lexicographic order", &
test_lex },
11012 {
"dataflow analysis", &
test_dep },
11016 {
"dimension manipulation", &
test_dim },
11029 options = isl_options_new_with_defaults();
polly Polly Forward operand tree
__isl_give isl_aff * isl_aff_add_constant_si(__isl_take isl_aff *aff, int v)
__isl_overload __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *upma1, __isl_take isl_union_pw_multi_aff *upma2)
__isl_give isl_union_set * isl_multi_union_pw_aff_zero_union_set(__isl_take isl_multi_union_pw_aff *mupa)
__isl_export __isl_give isl_pw_multi_aff * isl_pw_multi_aff_bind_domain(__isl_take isl_pw_multi_aff *pma, __isl_take isl_multi_id *tuple)
__isl_give isl_set * isl_multi_aff_lex_le_set(__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2)
__isl_give isl_set * isl_set_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma)
__isl_null isl_aff * isl_aff_free(__isl_take isl_aff *aff)
__isl_null isl_union_pw_multi_aff * isl_union_pw_multi_aff_free(__isl_take isl_union_pw_multi_aff *upma)
__isl_constructor __isl_give isl_pw_multi_aff * isl_pw_multi_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_multi_pw_aff * isl_multi_pw_aff_intersect_domain(__isl_take isl_multi_pw_aff *mpa, __isl_take isl_set *domain)
__isl_export __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_intersect_domain_wrapped_domain(__isl_take isl_union_pw_multi_aff *upma, __isl_take isl_union_set *uset)
__isl_null isl_union_pw_aff * isl_union_pw_aff_free(__isl_take isl_union_pw_aff *upa)
__isl_constructor __isl_give isl_multi_pw_aff * isl_multi_pw_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_union_set * isl_multi_union_pw_aff_bind(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_multi_id *tuple)
__isl_overload __isl_give isl_multi_pw_aff * isl_multi_pw_aff_pullback_multi_pw_aff(__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2)
isl_bool isl_union_pw_aff_plain_is_equal(__isl_keep isl_union_pw_aff *upa1, __isl_keep isl_union_pw_aff *upa2)
__isl_export __isl_give isl_val * isl_pw_aff_eval(__isl_take isl_pw_aff *pa, __isl_take isl_point *pnt)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_intersect_range(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_set *set)
__isl_give isl_set * isl_set_from_pw_aff(__isl_take isl_pw_aff *pwaff)
__isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_subtract_domain(__isl_take isl_union_pw_multi_aff *upma, __isl_take isl_union_set *uset)
__isl_constructor __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_read_from_str(isl_ctx *ctx, const char *str)
isl_bool isl_pw_multi_aff_is_equal(__isl_keep isl_pw_multi_aff *pma1, __isl_keep isl_pw_multi_aff *pma2)
isl_bool isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2)
isl_bool isl_pw_multi_aff_plain_is_equal(__isl_keep isl_pw_multi_aff *pma1, __isl_keep isl_pw_multi_aff *pma2)
__isl_overload __isl_give isl_set * isl_pw_aff_bind_id(__isl_take isl_pw_aff *pa, __isl_take isl_id *id)
__isl_export __isl_give isl_aff * isl_aff_unbind_params_insert_domain(__isl_take isl_aff *aff, __isl_take isl_multi_id *domain)
__isl_constructor __isl_give isl_pw_aff * isl_pw_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_intersect_domain_wrapped_range(__isl_take isl_union_pw_multi_aff *upma, __isl_take isl_union_set *uset)
__isl_export isl_size isl_pw_multi_aff_n_piece(__isl_keep isl_pw_multi_aff *pma)
__isl_give isl_union_pw_aff * isl_multi_union_pw_aff_apply_pw_aff(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_pw_aff *pa)
isl_bool isl_aff_plain_is_zero(__isl_keep isl_aff *aff)
__isl_constructor __isl_give isl_union_pw_aff * isl_union_pw_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_add(__isl_take isl_union_pw_multi_aff *upma1, __isl_take isl_union_pw_multi_aff *upma2)
__isl_constructor __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_give char * isl_multi_aff_to_str(__isl_keep isl_multi_aff *ma)
__isl_overload __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_pullback_union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *upma1, __isl_take isl_union_pw_multi_aff *upma2)
isl_bool isl_union_pw_multi_aff_involves_nan(__isl_keep isl_union_pw_multi_aff *upma)
__isl_export __isl_give isl_pw_aff * isl_pw_aff_min(__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2)
__isl_constructor __isl_give isl_multi_aff * isl_multi_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_give isl_union_pw_aff * isl_union_pw_aff_param_on_domain_id(__isl_take isl_union_set *domain, __isl_take isl_id *id)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_from_union_map(__isl_take isl_union_map *umap)
__isl_overload __isl_give isl_multi_aff * isl_multi_aff_pullback_multi_aff(__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2)
__isl_export __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_union_add(__isl_take isl_union_pw_multi_aff *upma1, __isl_take isl_union_pw_multi_aff *upma2)
__isl_overload __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_pullback_union_pw_multi_aff(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_union_pw_multi_aff *upma)
__isl_null isl_pw_aff * isl_pw_aff_free(__isl_take isl_pw_aff *pwaff)
__isl_overload __isl_give isl_union_map * isl_union_map_from_multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *mupa)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_multi_val_on_domain(__isl_take isl_union_set *domain, __isl_take isl_multi_val *mv)
__isl_give isl_aff * isl_aff_set_tuple_id(__isl_take isl_aff *aff, enum isl_dim_type type, __isl_take isl_id *id)
__isl_give isl_aff * isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f)
__isl_export __isl_give isl_aff * isl_aff_div(__isl_take isl_aff *aff1, __isl_take isl_aff *aff2)
__isl_export __isl_give isl_aff * isl_aff_floor(__isl_take isl_aff *aff)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_multi_pw_aff(__isl_take isl_multi_pw_aff *mpa)
__isl_give isl_aff * isl_aff_add_coefficient_si(__isl_take isl_aff *aff, enum isl_dim_type type, int pos, int v)
__isl_export __isl_give isl_pw_multi_aff * isl_pw_multi_aff_bind_domain_wrapped_domain(__isl_take isl_pw_multi_aff *pma, __isl_take isl_multi_id *tuple)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_apply_pw_multi_aff(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_pw_multi_aff *pma)
__isl_give isl_union_pw_aff * isl_union_pw_aff_aff_on_domain(__isl_take isl_union_set *domain, __isl_take isl_aff *aff)
__isl_give isl_aff * isl_aff_zero_on_domain(__isl_take isl_local_space *ls)
__isl_export __isl_give isl_pw_multi_aff * isl_pw_multi_aff_product(__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2)
isl_bool isl_pw_aff_involves_nan(__isl_keep isl_pw_aff *pa)
__isl_export __isl_give isl_aff * isl_aff_sub(__isl_take isl_aff *aff1, __isl_take isl_aff *aff2)
__isl_constructor __isl_give isl_multi_pw_aff * isl_multi_pw_aff_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma)
__isl_export __isl_give isl_aff * isl_aff_gist(__isl_take isl_aff *aff, __isl_take isl_set *context)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_map(__isl_take isl_map *map)
__isl_give isl_pw_aff * isl_pw_aff_drop_unused_params(__isl_take isl_pw_aff *pa)
__isl_constructor __isl_give isl_aff * isl_aff_read_from_str(isl_ctx *ctx, const char *str)
__isl_export isl_bool isl_union_pw_multi_aff_involves_locals(__isl_keep isl_union_pw_multi_aff *upma)
__isl_export __isl_give isl_aff * isl_aff_add(__isl_take isl_aff *aff1, __isl_take isl_aff *aff2)
__isl_null isl_pw_multi_aff * isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma)
__isl_give isl_set * isl_multi_aff_lex_lt_set(__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2)
__isl_give isl_printer * isl_printer_print_pw_aff(__isl_take isl_printer *p, __isl_keep isl_pw_aff *pwaff)
isl_bool isl_pw_aff_plain_is_equal(__isl_keep isl_pw_aff *pwaff1, __isl_keep isl_pw_aff *pwaff2)
__isl_give char * isl_multi_pw_aff_to_str(__isl_keep isl_multi_pw_aff *mpa)
__isl_export __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_intersect_params(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_set *params)
isl_bool isl_union_pw_multi_aff_plain_is_equal(__isl_keep isl_union_pw_multi_aff *upma1, __isl_keep isl_union_pw_multi_aff *upma2)
__isl_export __isl_give isl_pw_aff * isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2)
__isl_export __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_intersect_domain(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_union_set *uset)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_copy(__isl_keep isl_pw_multi_aff *pma)
__isl_export __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_union_add(__isl_take isl_multi_union_pw_aff *mupa1, __isl_take isl_multi_union_pw_aff *mupa2)
isl_size isl_pw_aff_n_piece(__isl_keep isl_pw_aff *pwaff)
__isl_export __isl_give isl_set * isl_pw_aff_domain(__isl_take isl_pw_aff *pwaff)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_drop_dims(__isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned first, unsigned n)
__isl_export __isl_give isl_aff * isl_aff_mul(__isl_take isl_aff *aff1, __isl_take isl_aff *aff2)
__isl_give isl_map * isl_map_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma)
__isl_overload __isl_give isl_basic_set * isl_aff_bind_id(__isl_take isl_aff *aff, __isl_take isl_id *id)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_set(__isl_take isl_set *set)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_apply_multi_aff(__isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_multi_aff *ma)
isl_bool isl_aff_is_nan(__isl_keep isl_aff *aff)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_alloc(__isl_take isl_set *set, __isl_take isl_multi_aff *maff)
struct isl_union_pw_multi_aff isl_union_pw_multi_aff
struct isl_union_pw_aff isl_union_pw_aff
struct isl_multi_aff isl_multi_aff
struct isl_multi_pw_aff isl_multi_pw_aff
struct isl_multi_union_pw_aff isl_multi_union_pw_aff
__isl_export __isl_give isl_ast_node_list * isl_ast_node_block_get_children(__isl_keep isl_ast_node *node)
__isl_null isl_ast_expr * isl_ast_expr_free(__isl_take isl_ast_expr *expr)
isl_stat isl_ast_node_foreach_descendant_top_down(__isl_keep isl_ast_node *node, isl_bool(*fn)(__isl_keep isl_ast_node *node, void *user), void *user)
enum isl_ast_expr_op_type isl_ast_expr_get_op_type(__isl_keep isl_ast_expr *expr)
__isl_give isl_ast_expr * isl_ast_expr_neg(__isl_take isl_ast_expr *expr)
isl_bool isl_ast_expr_is_equal(__isl_keep isl_ast_expr *expr1, __isl_keep isl_ast_expr *expr2)
__isl_give isl_ast_expr * isl_ast_expr_add(__isl_take isl_ast_expr *expr1, __isl_take isl_ast_expr *expr2)
__isl_give isl_ast_expr * isl_ast_expr_from_id(__isl_take isl_id *id)
__isl_give isl_ast_expr * isl_ast_expr_sub(__isl_take isl_ast_expr *expr1, __isl_take isl_ast_expr *expr2)
__isl_give isl_id * isl_ast_node_get_annotation(__isl_keep isl_ast_node *node)
__isl_null isl_ast_node * isl_ast_node_free(__isl_take isl_ast_node *node)
isl_ctx * isl_ast_node_get_ctx(__isl_keep isl_ast_node *node)
__isl_export __isl_give isl_ast_node * isl_ast_node_map_descendant_bottom_up(__isl_take isl_ast_node *node, __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node, void *user), void *user)
__isl_give isl_ast_expr * isl_ast_expr_copy(__isl_keep isl_ast_expr *expr)
__isl_export __isl_give char * isl_ast_expr_to_C_str(__isl_keep isl_ast_expr *expr)
isl_stat isl_options_set_ast_build_detect_min_max(isl_ctx *ctx, int val)
__isl_give isl_ast_build * isl_ast_build_set_before_each_for(__isl_take isl_ast_build *build, __isl_give isl_id *(*fn)(__isl_keep isl_ast_build *build, void *user), void *user)
__isl_export __isl_give isl_ast_build * isl_ast_build_from_context(__isl_take isl_set *set)
__isl_export __isl_give isl_ast_node * isl_ast_build_node_from_schedule_map(__isl_keep isl_ast_build *build, __isl_take isl_union_map *schedule)
__isl_overload __isl_give isl_ast_expr * isl_ast_build_expr_from_set(__isl_keep isl_ast_build *build, __isl_take isl_set *set)
__isl_give isl_ast_build * isl_ast_build_set_options(__isl_take isl_ast_build *build, __isl_take isl_union_map *options)
__isl_overload __isl_give isl_ast_expr * isl_ast_build_expr_from_pw_aff(__isl_keep isl_ast_build *build, __isl_take isl_pw_aff *pa)
__isl_null isl_ast_build * isl_ast_build_free(__isl_take isl_ast_build *build)
__isl_give isl_space * isl_ast_build_get_schedule_space(__isl_keep isl_ast_build *build)
__isl_constructor __isl_give isl_ast_build * isl_ast_build_alloc(isl_ctx *ctx)
__isl_export __isl_give isl_ast_build * isl_ast_build_set_at_each_domain(__isl_take isl_ast_build *build, __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user), void *user)
__isl_export __isl_give isl_union_map * isl_ast_build_get_schedule(__isl_keep isl_ast_build *build)
isl_ctx * isl_ast_build_get_ctx(__isl_keep isl_ast_build *build)
int isl_options_get_ast_build_exploit_nested_bounds(isl_ctx *ctx)
__isl_give isl_ast_build * isl_ast_build_set_after_each_for(__isl_take isl_ast_build *build, __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user), void *user)
__isl_give isl_ast_build * isl_ast_build_set_create_leaf(__isl_take isl_ast_build *build, __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_build *build, void *user), void *user)
int isl_options_get_ast_build_detect_min_max(isl_ctx *ctx)
isl_stat isl_options_set_ast_build_exploit_nested_bounds(isl_ctx *ctx, int val)
__isl_give isl_constraint * isl_constraint_alloc_equality(__isl_take isl_local_space *ls)
__isl_give isl_constraint * isl_constraint_alloc_inequality(__isl_take isl_local_space *ls)
__isl_give isl_basic_set * isl_basic_set_add_constraint(__isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint)
isl_size isl_basic_set_n_constraint(__isl_keep isl_basic_set *bset)
__isl_give isl_constraint * isl_constraint_set_constant_si(__isl_take isl_constraint *constraint, int v)
__isl_give isl_constraint * isl_constraint_set_coefficient_si(__isl_take isl_constraint *constraint, enum isl_dim_type type, int pos, int v)
isl_ctx * isl_ctx_alloc_with_options(struct isl_args *args, __isl_take void *opt)
isl_stat isl_stat_non_null(void *obj)
#define isl_die(ctx, errno, msg, code)
isl_bool isl_bool_ok(int b)
#define isl_alloc_array(ctx, type, n)
isl_bool isl_bool_not(isl_bool b)
void isl_ctx_free(isl_ctx *ctx)
__isl_export __isl_give isl_multi_val * isl_fixed_box_get_size(__isl_keep isl_fixed_box *box)
__isl_export __isl_give isl_multi_aff * isl_fixed_box_get_offset(__isl_keep isl_fixed_box *box)
__isl_null isl_fixed_box * isl_fixed_box_free(__isl_take isl_fixed_box *box)
__isl_export __isl_give isl_union_access_info * isl_union_access_info_set_schedule(__isl_take isl_union_access_info *access, __isl_take isl_schedule *schedule)
isl_stat isl_flow_foreach(__isl_keep isl_flow *deps, isl_stat(*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), void *user)
__isl_null isl_union_flow * isl_union_flow_free(__isl_take isl_union_flow *flow)
__isl_give isl_flow * isl_access_info_compute_flow(__isl_take isl_access_info *acc)
__isl_export __isl_give isl_union_access_info * isl_union_access_info_set_must_source(__isl_take isl_union_access_info *access, __isl_take isl_union_map *must_source)
__isl_constructor __isl_give isl_union_access_info * isl_union_access_info_from_sink(__isl_take isl_union_map *sink)
__isl_export __isl_give isl_union_flow * isl_union_access_info_compute_flow(__isl_take isl_union_access_info *access)
int isl_union_map_compute_flow(__isl_take isl_union_map *sink, __isl_take isl_union_map *must_source, __isl_take isl_union_map *may_source, __isl_take isl_union_map *schedule, __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, __isl_give isl_union_map **must_no_source, __isl_give isl_union_map **may_no_source)
__isl_export __isl_give isl_union_map * isl_union_flow_get_must_dependence(__isl_keep isl_union_flow *flow)
__isl_give isl_access_info * isl_access_info_add_source(__isl_take isl_access_info *acc, __isl_take isl_map *source, int must, void *source_user)
__isl_give isl_access_info * isl_access_info_alloc(__isl_take isl_map *sink, void *sink_user, isl_access_level_before fn, int max_source)
__isl_null isl_flow * isl_flow_free(__isl_take isl_flow *deps)
__isl_export __isl_give ISL_HMAP __isl_take ISL_KEY __isl_take ISL_VAL * val
isl_stat isl_stat(*) void user)
isl_bool isl_bool(* test)(__isl_keep ISL_KEY *key, __isl_keep ISL_VAL *val, void *user)
__isl_export __isl_keep const char * isl_id_get_name(__isl_keep isl_id *id)
__isl_null isl_id * isl_id_free(__isl_take isl_id *id)
__isl_constructor __isl_give isl_multi_id * isl_multi_id_read_from_str(isl_ctx *ctx, const char *str)
__isl_give isl_id * isl_id_alloc(isl_ctx *ctx, __isl_keep const char *name, void *user)
__isl_constructor __isl_give isl_id * isl_id_read_from_str(isl_ctx *ctx, const char *str)
struct isl_multi_id isl_multi_id
__isl_export __isl_give isl_val * isl_set_min_val(__isl_keep isl_set *set, __isl_keep isl_aff *obj)
__isl_export __isl_give isl_val * isl_set_max_val(__isl_keep isl_set *set, __isl_keep isl_aff *obj)
__isl_give isl_val * isl_basic_set_max_val(__isl_keep isl_basic_set *bset, __isl_keep isl_aff *obj)
__isl_export __isl_give isl_multi_val * isl_pw_multi_aff_max_multi_val(__isl_take isl_pw_multi_aff *pma)
int GMPQAPI() cmp(mp_rat op1, mp_rat op2)
__isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_zero(__isl_take isl_space *space)
__isl_give isl_basic_set * isl_basic_set_recession_cone(__isl_take isl_basic_set *bset)
enum isl_ast_expr_type isl_ast_expr_get_type(__isl_keep isl_ast_expr *expr)
enum isl_ast_node_type isl_ast_node_get_type(__isl_keep isl_ast_node *node)
static __isl_give isl_ast_expr * scale(__isl_take isl_ast_expr *expr, __isl_take isl_val *v)
static int count(int *con, unsigned len, int status)
isl_stat isl_set_dim_residue_class(__isl_keep isl_set *set, int pos, isl_int *modulo, isl_int *residue)
__isl_give isl_factorizer * isl_basic_set_factorizer(__isl_keep isl_basic_set *bset)
__isl_null isl_factorizer * isl_factorizer_free(__isl_take isl_factorizer *f)
#define isl_int_cmp_si(i, si)
__isl_give isl_map * isl_map_align_divs_internal(__isl_take isl_map *map)
__isl_give isl_set * isl_set_normalize(__isl_take isl_set *set)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
isl_bool isl_map_plain_is_fixed(__isl_keep isl_map *map, enum isl_dim_type type, unsigned pos, isl_int *val)
#define isl_basic_set_list
__isl_give isl_map * isl_map_plain_gist_basic_map(__isl_take isl_map *map, __isl_take isl_basic_map *context)
static struct isl_arg_choice convex[]
static struct isl_arg_choice on_error[]
#define ISL_CONVEX_HULL_FM
#define ISL_CONVEX_HULL_WRAP
enum isl_schedule_node_type isl_schedule_node_get_type(__isl_keep isl_schedule_node *node)
uint32_t isl_space_get_tuple_domain_hash(__isl_keep isl_space *space)
uint32_t isl_space_get_tuple_hash(__isl_keep isl_space *space)
struct @51 pw_aff_bin_tests[]
void test_parse_map(isl_ctx *ctx, const char *str)
static int test_union_map_mupa_conversion(isl_ctx *ctx)
static int test_min_special2(isl_ctx *ctx)
static int test_conflicting_context_schedule(isl_ctx *ctx)
static int test_eval(isl_ctx *ctx)
static int test_closure(isl_ctx *ctx)
struct @37 coalesce_tests[]
struct @77 pma_equal_tests[]
static int test_un_locus(isl_ctx *ctx)
static int test_union_map(isl_ctx *ctx)
static int test_read(isl_ctx *ctx)
static int common_space(void *first, void *second)
static int test_ast_gen5(isl_ctx *ctx)
__isl_give isl_val *(* fn)(__isl_take isl_val *v1, __isl_take isl_val *v2)
struct @42 bijective_tests[]
struct @33 plain_gist_tests[]
static int test_mupa_pa(isl_ctx *ctx)
static isl_stat uset_check_equal(__isl_keep isl_union_set *uset, const char *str)
static int test_convex_hull(isl_ctx *ctx)
static int test_list(isl_ctx *ctx)
static int test_bound(isl_ctx *ctx)
struct @61 mupa_uset_tests[]
static int test_bin_upma(isl_ctx *ctx)
static int test_pwqp(struct isl_ctx *ctx)
int test_equal(isl_ctx *ctx)
static isl_stat check_pairwise_disjoint(__isl_keep isl_basic_set_list *list)
static int test_val(isl_ctx *ctx)
static isl_stat test_gist_fail(struct isl_ctx *ctx)
int test_factorize(isl_ctx *ctx)
static const char * parse_union_pw_multi_aff_fail_tests[]
static struct @78 umap_un_tests[]
static __isl_give isl_id * before_for(__isl_keep isl_ast_build *build, void *user)
static int test_deltas_map(isl_ctx *ctx)
struct @70 bind_pma_domain_wrapped_tests[]
struct @62 mupa_ma_tests[]
static int test_empty_projection(isl_ctx *ctx)
static int test_dual(isl_ctx *ctx)
static isl_stat test_bind_map_domain(isl_ctx *ctx)
static int test_parse_mupa(isl_ctx *ctx)
static isl_stat test_unbind_multi_aff(isl_ctx *ctx)
static isl_stat set_check_equal(__isl_keep isl_set *set, const char *str)
static int test_coalescing_schedule(isl_ctx *ctx)
static isl_stat test_aff_set_tuple_id(isl_ctx *ctx)
static isl_stat test_bind_set(isl_ctx *ctx)
struct @65 mupa_upma_tests[]
int test_coalesce_set(isl_ctx *ctx, const char *str, int check_one)
static int test_un_val(isl_ctx *ctx)
static int test_min_special(isl_ctx *ctx)
static isl_stat add_cell(__isl_take isl_cell *cell, void *user)
static isl_stat val_check_equal(__isl_keep isl_val *val, const char *str)
static struct @76 unbind_multi_aff_tests[]
static isl_stat test_union_pw_op(isl_ctx *ctx, const char *a, const char *b, __isl_give isl_union_pw_qpolynomial *(*fn)(__isl_take isl_union_pw_qpolynomial *upwqp1, __isl_take isl_union_pw_qpolynomial *upwqp2), const char *res)
static isl_stat test_coalesce_special6(isl_ctx *ctx)
static int test_application(isl_ctx *ctx)
static int test_min(struct isl_ctx *ctx)
static int test_ast_gen2(isl_ctx *ctx)
static int test_lift(isl_ctx *ctx)
static int test_div(isl_ctx *ctx)
static int check_single_piece(isl_ctx *ctx, __isl_take isl_pw_aff *pa)
static isl_stat test_ast_gen1(isl_ctx *ctx)
struct @59 mupa_bin_tests[]
static int test_mupa_ma(isl_ctx *ctx)
static int test_split_periods(isl_ctx *ctx)
struct @55 upma_uset_tests[]
static isl_stat test_bind_pa(isl_ctx *ctx)
static int test_ast_gen(isl_ctx *ctx)
struct @30 simple_hull_tests[]
struct @29 recession_cone_tests[]
static isl_stat test_bound_space(isl_ctx *ctx)
static int test_lex(struct isl_ctx *ctx)
struct @64 mupa_pma_tests[]
static isl_stat test_coalesce_special8(isl_ctx *ctx)
static int test_ast_build(isl_ctx *ctx)
const char * umap_mupa_conversion_tests[]
struct @80 un_locus_tests[]
struct @69 bind_pma_domain_tests[]
struct @58 mupa_un_tests[]
int test_eliminate(isl_ctx *ctx)
static int test_skewing_schedule(isl_ctx *ctx)
static int test_lexmin(struct isl_ctx *ctx)
struct @47 live_range_tests[]
static __isl_give isl_union_map * compute_schedule(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity)
static int test_strongly_satisfying_schedule(isl_ctx *ctx)
static isl_stat test_upma_uset(isl_ctx *ctx)
int test_fixed(isl_ctx *ctx)
static struct @44 bound_tests[]
static int test_disjoint(isl_ctx *ctx)
static isl_stat test_upma_test(isl_ctx *ctx)
static const char * reparse_pw_multi_aff_tests[]
static isl_stat check_injective(__isl_take isl_map *map, void *user)
static int test_eval_2(isl_ctx *ctx)
static int test_bin_upma_fail(isl_ctx *ctx)
static int test_special_conditional_schedule_constraints_2(isl_ctx *ctx)
static int test_locus(isl_ctx *ctx)
static isl_stat test_subset_duplicate_integer_divisions(isl_ctx *ctx)
static int test_recession_cone(struct isl_ctx *ctx)
static int test_product_pma(isl_ctx *ctx)
static isl_stat test_un_union_map(isl_ctx *ctx)
static isl_stat test_unbind_set(isl_ctx *ctx)
static int test_plain_fixed(isl_ctx *ctx, __isl_take isl_map *map, enum isl_dim_type type, unsigned pos, int fixed)
int test_product(isl_ctx *ctx)
static int test_isl_bool(isl_ctx *ctx)
static const char * reparse_multi_union_pw_aff_tests[]
static struct @79 umap_bin_tests[]
static isl_stat test_pwqp_max(isl_ctx *ctx)
static int test_eval_1(isl_ctx *ctx)
const char * output_tests[]
static int test_coalesce_special3(isl_ctx *ctx)
static int test_gist(struct isl_ctx *ctx)
static struct @82 bin_locus_ma_tests[]
static void test_parse_pwaff(isl_ctx *ctx, const char *str)
static int test_construction_2(isl_ctx *ctx)
int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, const char *r, const char *s, int tilable, int parallel)
int test_slice(isl_ctx *ctx)
static int test_min_mpa(isl_ctx *ctx)
static int test_universe(isl_ctx *ctx)
static int test_conditional_schedule_constraints(isl_ctx *ctx)
static isl_stat test_gist_empty(isl_ctx *ctx)
struct @74 unbind_set_tests[]
int test_parse_map_equal(isl_ctx *ctx, const char *str, const char *str2)
static int test_tile(isl_ctx *ctx)
static isl_stat test_ma_conversion(isl_ctx *ctx)
int test_vertices(isl_ctx *ctx)
static int test_ast_expr(isl_ctx *ctx)
static int test_ast(isl_ctx *ctx)
int test_union_pw(isl_ctx *ctx)
static isl_stat test_bind_aff(isl_ctx *ctx)
static int test_un_mpa(isl_ctx *ctx)
static isl_stat test_parse_upma(isl_ctx *ctx)
static int test_subtract(isl_ctx *ctx)
static isl_stat test_bind_mupa(isl_ctx *ctx)
static int test_mupa_set(isl_ctx *ctx)
struct @83 aff_eval_tests[]
static isl_stat test_coalesce_union(isl_ctx *ctx, const char *str1, const char *str2)
static int test_ast_gen3(isl_ctx *ctx)
const char * conditional_validity
int test_output(isl_ctx *ctx)
static int test_bin_aff(isl_ctx *ctx)
static int test_multi_pw_aff(isl_ctx *ctx)
static int test_bind(isl_ctx *ctx)
static int test_simplify_1(isl_ctx *ctx)
struct @38 lexmin_tests[]
struct @25 parse_map_equal_tests[]
#define ARRAY_SIZE(array)
static int test_get_list(isl_ctx *ctx)
struct @81 bin_locus_tests[]
static int test_schedule_tree_group(isl_ctx *ctx)
static int test_map_conversion(isl_ctx *ctx)
static isl_stat test_bind_pma_domain(isl_ctx *ctx)
static int test_domain_hash(isl_ctx *ctx)
static int test_schedule_incremental(isl_ctx *ctx)
static struct @66 bind_set_tests[]
static int test_bijective(struct isl_ctx *ctx)
static int test_parse_multi(isl_ctx *ctx)
static int test_simple_hull(struct isl_ctx *ctx)
static int test_mpa_conversion(isl_ctx *ctx)
static int test_bin_pw_aff(isl_ctx *ctx)
static int test_dim_max_2(isl_ctx *ctx)
const char * set_conversion_tests[]
static isl_stat test_intersect_2(isl_ctx *ctx)
static int test_plain_gist(isl_ctx *ctx)
int test_drop_unused_parameters(isl_ctx *ctx)
struct @32 convex_hull_tests[]
struct @57 mpa_bin_tests[]
static isl_stat test_subtract_empty(isl_ctx *ctx)
static isl_stat test_union_set_contains(isl_ctx *ctx)
static isl_stat test_multi_pw_aff_box(isl_ctx *ctx)
static int test_schedule_whole(isl_ctx *ctx)
static int test_construction(isl_ctx *ctx)
static isl_bool uset_is_equal(__isl_keep isl_union_set *uset, const char *str)
static struct @73 bind_mupa_tests[]
int test_sv(isl_ctx *ctx)
static isl_stat check_bool(isl_ctx *ctx, isl_bool actual, isl_bool expected)
static isl_stat test_plain_unshifted_simple_hull_special(isl_ctx *ctx)
static int test_coalesce_special(struct isl_ctx *ctx)
static int test_subset(isl_ctx *ctx)
struct @75 unbind_aff_tests[]
static isl_stat test_gist_empty_pair(isl_ctx *ctx, const char *map, const char *context)
static int test_box_hull(struct isl_ctx *ctx)
static int test_compute_divs(isl_ctx *ctx)
struct @60 mupa_set_tests[]
static isl_stat test_eval_3(isl_ctx *ctx)
void test_affine_hull_case(struct isl_ctx *ctx, const char *name)
static int test_construction_1(isl_ctx *ctx)
static isl_stat test_coalesce_special5(isl_ctx *ctx)
static isl_stat collect_must_may(__isl_take isl_map *dep, int must, void *dep_user, void *user)
struct @53 upma_bin_tests[]
static int test_unbind(isl_ctx *ctx)
static int test_mupa_pma(isl_ctx *ctx)
int test_special_schedule(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity, const char *expected_sched)
static __isl_give isl_map * cocoa_fig_1_right_tc(isl_ctx *ctx)
struct @34 gist_fail_tests[]
static int test_output_set(isl_ctx *ctx)
static __isl_give isl_ast_node * select_first(__isl_take isl_ast_node *node, void *user)
int test_affine_hull(struct isl_ctx *ctx)
static int test_intersect_1(isl_ctx *ctx)
static isl_stat test_coalesce_intersection(isl_ctx *ctx, const char *s1, const char *s2)
struct @28 val_bin_tests[]
int test_plain_injective(isl_ctx *ctx, const char *str, int injective)
static int test_chambers(isl_ctx *ctx)
__isl_give isl_val *(* op)(__isl_take isl_val *v)
static const char * elimination_tests[]
static isl_bool count_for(__isl_keep isl_ast_node *node, void *user)
int test_dim_max(isl_ctx *ctx)
struct @43 pwqp_gist_tests[]
static int test_bounded(isl_ctx *ctx)
static char * get_filename(isl_ctx *ctx, const char *name, const char *suffix)
struct @36 coalesce_unbounded_tests[]
static __isl_give isl_map * cocoa_fig_1_right_power(isl_ctx *ctx)
struct @56 mpa_un_tests[]
static int test_union(isl_ctx *ctx)
static isl_stat test_aff_normalize(isl_ctx *ctx)
static int map_check_equal(__isl_keep isl_map *map, const char *str)
int test_injective(isl_ctx *ctx)
static int test_bin_locus(isl_ctx *ctx)
static int test_ast_gen4(isl_ctx *ctx)
static isl_stat test_pw_max(struct isl_ctx *ctx)
static int test_curry(isl_ctx *ctx)
static int test_partial_lexmin(isl_ctx *ctx)
static int test_bin_val(isl_ctx *ctx)
static int test_special_conditional_schedule_constraints(isl_ctx *ctx)
static struct @39 opt_pw_tests[]
void test_convex_hull_case(struct isl_ctx *ctx, const char *name)
static int test_padded_schedule(isl_ctx *ctx)
int test_parse(struct isl_ctx *ctx)
struct @54 upma_bin_fail_tests[]
static int test_mupa_uset(isl_ctx *ctx)
static isl_stat test_unbind_aff(isl_ctx *ctx)
static int test_dep(struct isl_ctx *ctx)
void test_application_case(struct isl_ctx *ctx, const char *name)
static isl_stat test_bind_umap_range(isl_ctx *ctx)
static int test_mupa_upma(isl_ctx *ctx)
static int test_bin_mpa(isl_ctx *ctx)
static isl_stat test_output_mpa(isl_ctx *ctx)
static int test_simplify_2(isl_ctx *ctx)
static isl_stat test_pwqp_gist(isl_ctx *ctx)
static int test_flow(isl_ctx *ctx)
static isl_stat test_coalesce_special4(isl_ctx *ctx)
struct @45 subset_tests[]
static int test_conversion(isl_ctx *ctx)
static isl_stat check_single_expr_min(isl_ctx *ctx, const char *s1, const char *s2)
static isl_bool set_is_equal(__isl_keep isl_set *set, const char *str)
static isl_stat test_bind_pma_domain_wrapped(isl_ctx *ctx)
static int test_schedule_tree(isl_ctx *ctx)
static int test_schedule_tree_group_2(isl_ctx *ctx)
static int test_convex_hull_algo(isl_ctx *ctx, int convex)
struct @26 val_un_tests[]
static int test_parse_multi_val(isl_ctx *ctx, const char *str)
static struct @71 bind_aff_tests[]
static struct @52 upma_test_tests[]
static int test_un_mupa(isl_ctx *ctx)
int test_schedule(isl_ctx *ctx)
static int test_bin_mupa(isl_ctx *ctx)
static int test_various_simple_hull(isl_ctx *ctx)
static int test_eval_aff(isl_ctx *ctx)
static int test_multi_pw_aff_1(isl_ctx *ctx)
static isl_stat find_vertex(__isl_take isl_vertex *vertex, void *user)
int test_aff(isl_ctx *ctx)
static int test_dim_max_1(isl_ctx *ctx)
static int test_multi_pw_aff_2(isl_ctx *ctx)
struct @46 subtract_domain_tests[]
static int test_coalesce(struct isl_ctx *ctx)
static int test_align_parameters(isl_ctx *ctx)
static int test_simplify(isl_ctx *ctx)
struct @68 bind_umap_range_tests[]
struct @50 pw_aff_bin_op[]
struct @63 mupa_pa_tests[]
static __isl_give isl_ast_node * after_for(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user)
struct @67 bind_map_domain_tests[]
static isl_stat test_coalesce_special7(isl_ctx *ctx)
void test_parse_pwqp(isl_ctx *ctx, const char *str)
static int test_schedule_tree_group_1(isl_ctx *ctx)
struct @49 aff_bin_tests[]
const char * chambers_tests[]
static int test_has_schedule(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity)
static __isl_give isl_map * cocoa_fig_1_right_graph(isl_ctx *ctx)
struct isl_vertices_test_data vertices_tests[]
static struct @72 bind_pa_tests[]
int test_sample(isl_ctx *ctx)
static isl_stat test_bin_locus_ma(isl_ctx *ctx)
const char * mpa_conversion_tests[]
static int test_set_conversion(isl_ctx *ctx)
static int test_upa(isl_ctx *ctx)
static isl_stat test_output_ma(isl_ctx *ctx)
static isl_stat test_parse_pma(isl_ctx *ctx)
static const char * parse_multi_pw_aff_fail_tests[]
static __isl_give isl_ast_node * count_domains(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user)
static const char * reparse_multi_pw_aff_tests[]
int test_coalesce_unbounded_wrapping(isl_ctx *ctx)
static const char * multi_pw_aff_box_tests[]
static int test_residue_class(isl_ctx *ctx)
static __isl_give isl_union_map * compute_schedule_with_context(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity, const char *context)
static int test_parse_mpa(isl_ctx *ctx)
const char * conversion_tests[]
static int test_intersect(isl_ctx *ctx)
static isl_stat test_coalesce_special2(struct isl_ctx *ctx)
static int map_is_equal(__isl_keep isl_map *map, const char *str)
static struct @31 box_hull_tests[]
static int test_schedule_tree_prefix(isl_ctx *ctx)
static __isl_give isl_ast_node * create_leaf(__isl_take isl_ast_build *build, void *user)
struct @84 pullback_tests[]
static isl_stat test_bin_union_map(isl_ctx *ctx)
static int test_dim(isl_ctx *ctx)
static isl_stat test_multi_pw_aff_3(isl_ctx *ctx)
static int test_pullback(isl_ctx *ctx)
static int test_pw_multi_aff(isl_ctx *ctx)
static int test_align_parameters_1(isl_ctx *ctx)
static isl_stat test_align_parameters_2(isl_ctx *ctx)
static int test_elimination(isl_ctx *ctx)
static __isl_give isl_map * universe(__isl_take isl_map *map)
#define isl_union_set_list
isl_stat isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices, isl_stat(*fn)(__isl_take isl_cell *cell, void *user), void *user)
__isl_give isl_local_space * isl_local_space_from_space(__isl_take isl_space *space)
__isl_null isl_local_space * isl_local_space_free(__isl_take isl_local_space *ls)
__isl_give isl_local_space * isl_local_space_copy(__isl_keep isl_local_space *ls)
__isl_give isl_basic_set * isl_basic_map_domain(__isl_take isl_basic_map *bmap)
__isl_export __isl_give isl_map * isl_map_intersect_range(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_export __isl_give isl_map * isl_map_union(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export __isl_give isl_multi_pw_aff * isl_map_max_multi_pw_aff(__isl_take isl_map *map)
__isl_give isl_pw_multi_aff * isl_basic_map_lexmin_pw_multi_aff(__isl_take isl_basic_map *bmap)
__isl_give isl_map * isl_map_eliminate(__isl_take isl_map *map, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_map * isl_map_power(__isl_take isl_map *map, isl_bool *exact)
__isl_export __isl_give isl_map * isl_map_intersect(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export isl_bool isl_map_is_empty(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_map * isl_map_gist(__isl_take isl_map *map, __isl_take isl_map *context)
__isl_give isl_map * isl_basic_map_partial_lexmin(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty)
__isl_export isl_bool isl_basic_map_is_equal(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
__isl_give isl_basic_map * isl_basic_map_from_range(__isl_take isl_basic_set *bset)
__isl_export __isl_give isl_set * isl_map_bind_domain(__isl_take isl_map *map, __isl_take isl_multi_id *tuple)
__isl_give isl_map * isl_map_copy(__isl_keep isl_map *map)
__isl_give isl_map * isl_map_move_dims(__isl_take isl_map *map, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
__isl_null isl_basic_map * isl_basic_map_free(__isl_take isl_basic_map *bmap)
__isl_constructor __isl_give isl_basic_map * isl_basic_map_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_space * isl_map_get_space(__isl_keep isl_map *map)
__isl_give isl_map * isl_map_order_gt(__isl_take isl_map *map, enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2)
isl_size isl_basic_map_dim(__isl_keep isl_basic_map *bmap, enum isl_dim_type type)
isl_ctx * isl_map_get_ctx(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_intersect_domain(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_give isl_map * isl_map_oppose(__isl_take isl_map *map, enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2)
__isl_overload __isl_give isl_map * isl_map_lower_bound_multi_pw_aff(__isl_take isl_map *map, __isl_take isl_multi_pw_aff *lower)
__isl_export isl_bool isl_set_is_wrapping(__isl_keep isl_set *set)
__isl_give isl_map * isl_map_transitive_closure(__isl_take isl_map *map, isl_bool *exact)
__isl_export __isl_give isl_map * isl_map_lexmin(__isl_take isl_map *map)
__isl_export isl_bool isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_basic_map * isl_basic_map_read_from_file(isl_ctx *ctx, FILE *input)
__isl_export __isl_give isl_map * isl_map_empty(__isl_take isl_space *space)
__isl_export __isl_give isl_map * isl_set_unwrap(__isl_take isl_set *set)
__isl_constructor __isl_give isl_map * isl_map_read_from_str(isl_ctx *ctx, const char *str)
__isl_export isl_bool isl_map_is_injective(__isl_keep isl_map *map)
__isl_give isl_map * isl_map_lex_le(__isl_take isl_space *set_space)
__isl_give isl_map * isl_map_deltas_map(__isl_take isl_map *map)
__isl_overload __isl_give isl_map * isl_map_upper_bound_multi_pw_aff(__isl_take isl_map *map, __isl_take isl_multi_pw_aff *upper)
__isl_give isl_basic_map * isl_basic_map_curry(__isl_take isl_basic_map *bmap)
__isl_give isl_map * isl_map_equate(__isl_take isl_map *map, enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2)
__isl_give isl_map * isl_map_lex_ge(__isl_take isl_space *set_space)
__isl_export __isl_give isl_map * isl_map_coalesce(__isl_take isl_map *map)
__isl_give isl_map * isl_map_add_dims(__isl_take isl_map *map, enum isl_dim_type type, unsigned n)
__isl_null isl_map * isl_map_free(__isl_take isl_map *map)
__isl_give isl_map * isl_map_neg(__isl_take isl_map *map)
__isl_constructor __isl_give isl_map * isl_map_from_basic_map(__isl_take isl_basic_map *bmap)
__isl_give isl_map * isl_map_project_out(__isl_take isl_map *map, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_basic_map * isl_basic_map_copy(__isl_keep isl_basic_map *bmap)
__isl_export isl_bool isl_map_is_bijective(__isl_keep isl_map *map)
__isl_export __isl_give isl_multi_pw_aff * isl_map_min_multi_pw_aff(__isl_take isl_map *map)
__isl_export __isl_give isl_set * isl_map_range(__isl_take isl_map *map)
struct isl_basic_set isl_basic_set
#define ISL_SCHEDULE_ALGORITHM_ISL
#define ISL_SCHEDULE_ALGORITHM_FEAUTRIER
int isl_options_get_coalesce_bounded_wrapping(isl_ctx *ctx)
isl_stat isl_options_set_coalesce_bounded_wrapping(isl_ctx *ctx, int val)
isl_stat isl_options_set_on_error(isl_ctx *ctx, int val)
int isl_options_get_on_error(isl_ctx *ctx)
#define ISL_ON_ERROR_CONTINUE
__isl_give isl_point * isl_point_zero(__isl_take isl_space *space)
__isl_give isl_point * isl_point_set_coordinate_val(__isl_take isl_point *pnt, enum isl_dim_type type, int pos, __isl_take isl_val *v)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_copy(__isl_keep isl_union_pw_qpolynomial *upwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_split_periods(__isl_take isl_pw_qpolynomial *pwqp, int max_periods)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_read_from_str(isl_ctx *ctx, const char *str)
__isl_give isl_val * isl_pw_qpolynomial_max(__isl_take isl_pw_qpolynomial *pwqp)
__isl_give isl_space * isl_pw_qpolynomial_get_domain_space(__isl_keep isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_intersect_domain(__isl_take isl_pw_qpolynomial *pwpq, __isl_take isl_set *set)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_gist(__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context)
isl_bool isl_pw_qpolynomial_is_zero(__isl_keep isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_coalesce(__isl_take isl_pw_qpolynomial *pwqp)
__isl_constructor __isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_read_from_str(isl_ctx *ctx, const char *str)
__isl_null isl_pw_qpolynomial * isl_pw_qpolynomial_free(__isl_take isl_pw_qpolynomial *pwqp)
__isl_give isl_qpolynomial * isl_qpolynomial_from_aff(__isl_take isl_aff *aff)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_move_dims(__isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
__isl_constructor __isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_read_from_str(isl_ctx *ctx, const char *str)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_sub(__isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_intersect_domain(__isl_take isl_union_pw_qpolynomial *upwpq, __isl_take isl_union_set *uset)
__isl_export __isl_give isl_val * isl_pw_qpolynomial_eval(__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_point *pnt)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_add(__isl_take isl_union_pw_qpolynomial *upwqp1, __isl_take isl_union_pw_qpolynomial *upwqp2)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_fix_val(__isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type type, unsigned n, __isl_take isl_val *v)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_sub(__isl_take isl_union_pw_qpolynomial *upwqp1, __isl_take isl_union_pw_qpolynomial *upwqp2)
isl_bool isl_pw_qpolynomial_fold_plain_is_equal(__isl_keep isl_pw_qpolynomial_fold *pwf1, __isl_keep isl_pw_qpolynomial_fold *pwf2)
__isl_export __isl_give isl_val * isl_union_pw_qpolynomial_eval(__isl_take isl_union_pw_qpolynomial *upwqp, __isl_take isl_point *pnt)
__isl_null isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_free(__isl_take isl_union_pw_qpolynomial *upwqp)
__isl_null isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_free(__isl_take isl_pw_qpolynomial_fold *pwf)
isl_bool isl_union_pw_qpolynomial_plain_is_equal(__isl_keep isl_union_pw_qpolynomial *upwqp1, __isl_keep isl_union_pw_qpolynomial *upwqp2)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_bound(__isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, isl_bool *tight)
__isl_export __isl_give isl_union_set * isl_union_pw_qpolynomial_domain(__isl_take isl_union_pw_qpolynomial *upwqp)
isl_bool isl_pw_qpolynomial_plain_is_equal(__isl_keep isl_pw_qpolynomial *pwqp1, __isl_keep isl_pw_qpolynomial *pwqp2)
__isl_give isl_val * isl_qpolynomial_eval(__isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt)
struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial
__isl_null isl_printer * isl_printer_free(__isl_take isl_printer *printer)
__isl_give char * isl_printer_get_str(__isl_keep isl_printer *printer)
__isl_give isl_printer * isl_printer_to_str(isl_ctx *ctx)
__isl_give isl_printer * isl_printer_set_output_format(__isl_take isl_printer *p, int output_format)
__isl_export __isl_give isl_schedule_node * isl_schedule_get_root(__isl_keep isl_schedule *schedule)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_proximity(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *proximity)
isl_stat isl_options_set_schedule_whole_component(isl_ctx *ctx, int val)
__isl_null isl_schedule * isl_schedule_free(__isl_take isl_schedule *sched)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_conditional_validity(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *condition, __isl_take isl_union_map *validity)
__isl_export __isl_give isl_union_map * isl_schedule_get_map(__isl_keep isl_schedule *sched)
isl_stat isl_options_set_schedule_maximize_coincidence(isl_ctx *ctx, int val)
__isl_export __isl_give isl_schedule * isl_schedule_from_domain(__isl_take isl_union_set *domain)
isl_stat isl_options_set_schedule_treat_coalescing(isl_ctx *ctx, int val)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_context(__isl_take isl_schedule_constraints *sc, __isl_take isl_set *context)
__isl_give isl_schedule * isl_schedule_intersect_domain(__isl_take isl_schedule *schedule, __isl_take isl_union_set *domain)
int isl_options_get_schedule_treat_coalescing(isl_ctx *ctx)
__isl_give isl_schedule * isl_schedule_sequence(__isl_take isl_schedule *schedule1, __isl_take isl_schedule *schedule2)
int isl_options_get_schedule_maximize_coincidence(isl_ctx *ctx)
int isl_options_get_schedule_whole_component(isl_ctx *ctx)
__isl_export __isl_give isl_union_set * isl_schedule_get_domain(__isl_keep isl_schedule *schedule)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_on_domain(__isl_take isl_union_set *domain)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_coincidence(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *coincidence)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_validity(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *validity)
__isl_export __isl_give isl_schedule * isl_schedule_constraints_compute_schedule(__isl_take isl_schedule_constraints *sc)
__isl_export isl_size isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_multi_union_pw_aff * isl_schedule_node_band_get_partial_schedule(__isl_keep isl_schedule_node *node)
__isl_give isl_schedule_node * isl_schedule_node_group(__isl_take isl_schedule_node *node, __isl_take isl_id *group_id)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_first_child(__isl_take isl_schedule_node *node)
__isl_export __isl_give isl_multi_union_pw_aff * isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(__isl_keep isl_schedule_node *node)
__isl_give isl_union_map * isl_schedule_node_get_subtree_expansion(__isl_keep isl_schedule_node *node)
int isl_options_get_tile_scale_tile_loops(isl_ctx *ctx)
__isl_give isl_schedule_node * isl_schedule_node_grandchild(__isl_take isl_schedule_node *node, int pos1, int pos2)
__isl_export __isl_give isl_schedule * isl_schedule_node_get_schedule(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_band_tile(__isl_take isl_schedule_node *node, __isl_take isl_multi_val *sizes)
__isl_export __isl_give isl_union_pw_multi_aff * isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_insert_partial_schedule(__isl_take isl_schedule_node *node, __isl_take isl_multi_union_pw_aff *schedule)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_root(__isl_take isl_schedule_node *node)
int isl_options_get_tile_shift_point_loops(isl_ctx *ctx)
isl_stat isl_options_set_tile_scale_tile_loops(isl_ctx *ctx, int val)
__isl_give isl_union_set * isl_schedule_node_get_domain(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_from_domain(__isl_take isl_union_set *domain)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_parent(__isl_take isl_schedule_node *node)
__isl_give isl_schedule_node * isl_schedule_node_grandparent(__isl_take isl_schedule_node *node)
__isl_export __isl_give isl_union_map * isl_schedule_node_get_prefix_schedule_union_map(__isl_keep isl_schedule_node *node)
__isl_null isl_schedule_node * isl_schedule_node_free(__isl_take isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_insert_sequence(__isl_take isl_schedule_node *node, __isl_take isl_union_set_list *filters)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_child(__isl_take isl_schedule_node *node, int pos)
isl_stat isl_options_set_tile_shift_point_loops(isl_ctx *ctx, int val)
__isl_export __isl_give isl_set * isl_set_universe(__isl_take isl_space *space)
__isl_constructor __isl_give isl_basic_set * isl_basic_set_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_point * isl_set_sample_point(__isl_take isl_set *set)
__isl_give isl_basic_set * isl_basic_set_solutions(__isl_take isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_set_unshifted_simple_hull(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_coalesce(__isl_take isl_set *set)
isl_size isl_basic_set_dim(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
__isl_give isl_basic_set * isl_basic_set_read_from_file(isl_ctx *ctx, FILE *input)
isl_bool isl_basic_set_plain_is_universe(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_set_convex_hull(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_product(__isl_take isl_set *set1, __isl_take isl_set *set2)
__isl_export __isl_give isl_set * isl_basic_set_union(__isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2)
__isl_export __isl_give isl_set * isl_set_subtract(__isl_take isl_set *set1, __isl_take isl_set *set2)
isl_ctx * isl_set_get_ctx(__isl_keep isl_set *set)
__isl_export __isl_give isl_space * isl_set_get_space(__isl_keep isl_set *set)
__isl_give isl_set * isl_set_lower_bound_si(__isl_take isl_set *set, enum isl_dim_type type, unsigned pos, int value)
__isl_give isl_set * isl_basic_set_compute_divs(__isl_take isl_basic_set *bset)
__isl_export isl_bool isl_set_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_export __isl_give isl_set * isl_set_union(__isl_take isl_set *set1, __isl_take isl_set *set2)
__isl_give isl_basic_set * isl_basic_set_project_out(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_basic_set * isl_basic_set_fix_si(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned pos, int value)
__isl_export __isl_give isl_basic_set * isl_basic_set_params(__isl_take isl_basic_set *bset)
__isl_export isl_bool isl_set_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_null isl_basic_set * isl_basic_set_free(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_set_simple_hull(__isl_take isl_set *set)
isl_bool isl_basic_set_is_disjoint(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
__isl_give isl_pw_aff * isl_set_dim_min(__isl_take isl_set *set, int pos)
__isl_give isl_set * isl_set_drop_unused_params(__isl_take isl_set *set)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_export isl_bool isl_set_is_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_give isl_set * isl_set_remove_divs_involving_dims(__isl_take isl_set *set, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_set * isl_set_copy(__isl_keep isl_set *set)
__isl_give isl_printer * isl_printer_print_set(__isl_take isl_printer *printer, __isl_keep isl_set *map)
__isl_export __isl_give isl_set * isl_set_bind(__isl_take isl_set *set, __isl_take isl_multi_id *tuple)
__isl_export __isl_give isl_set * isl_set_gist(__isl_take isl_set *set, __isl_take isl_set *context)
__isl_give isl_set * isl_set_compute_divs(__isl_take isl_set *set)
isl_bool isl_set_plain_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_export isl_bool isl_basic_set_is_subset(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
__isl_give isl_basic_set * isl_basic_set_lower_bound_val(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
__isl_constructor __isl_give isl_set * isl_set_read_from_str(isl_ctx *ctx, const char *str)
__isl_give isl_basic_set * isl_basic_set_upper_bound_val(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
__isl_export __isl_give isl_basic_set * isl_basic_set_sample(__isl_take isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_apply(__isl_take isl_basic_set *bset, __isl_take isl_basic_map *bmap)
isl_bool isl_basic_set_plain_is_equal(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
__isl_give isl_basic_set * isl_set_plain_unshifted_simple_hull(__isl_take isl_set *set)
isl_size isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type)
__isl_give char * isl_set_to_str(__isl_keep isl_set *set)
__isl_export __isl_give isl_basic_set * isl_basic_set_gist(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context)
__isl_give isl_basic_set * isl_basic_set_from_multi_aff(__isl_take isl_multi_aff *ma)
isl_bool isl_basic_set_is_universe(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_multi_pw_aff * isl_set_min_multi_pw_aff(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_lexmin(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_lexmax(__isl_take isl_set *set)
isl_bool isl_set_is_bounded(__isl_keep isl_set *set)
__isl_give isl_basic_set * isl_basic_set_coefficients(__isl_take isl_basic_set *bset)
__isl_export isl_bool isl_basic_set_is_empty(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_affine_hull(__isl_take isl_basic_set *bset)
__isl_export __isl_give isl_fixed_box * isl_set_get_simple_fixed_box_hull(__isl_keep isl_set *set)
__isl_export __isl_give isl_pw_multi_aff * isl_set_lexmin_pw_multi_aff(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_intersect(__isl_take isl_set *set1, __isl_take isl_set *set2)
__isl_export isl_bool isl_basic_set_is_equal(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
__isl_export __isl_give isl_set * isl_set_empty(__isl_take isl_space *space)
__isl_constructor __isl_give isl_set * isl_set_from_basic_set(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_intersect(__isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2)
__isl_give isl_basic_set * isl_basic_set_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_basic_set * isl_set_affine_hull(__isl_take isl_set *set)
__isl_give isl_set * isl_set_fix_si(__isl_take isl_set *set, enum isl_dim_type type, unsigned pos, int value)
__isl_give isl_basic_set * isl_basic_set_lift(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_drop_unused_params(__isl_take isl_basic_set *bset)
__isl_export isl_bool isl_set_is_empty(__isl_keep isl_set *set)
__isl_export __isl_give isl_set * isl_set_unbind_params(__isl_take isl_set *set, __isl_take isl_multi_id *tuple)
__isl_give isl_pw_aff * isl_set_dim_max(__isl_take isl_set *set, int pos)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_params(__isl_take isl_space *space)
__isl_give isl_space * isl_space_set_from_params(__isl_take isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__isl_export __isl_give isl_space * isl_space_unit(isl_ctx *ctx)
__isl_give isl_space * isl_space_set_tuple_name(__isl_take isl_space *space, enum isl_dim_type type, const char *s)
__isl_overload __isl_give isl_space * isl_space_add_named_tuple_id_ui(__isl_take isl_space *space, __isl_take isl_id *tuple_id, unsigned dim)
__isl_give isl_space * isl_space_set_alloc(isl_ctx *ctx, unsigned nparam, unsigned dim)
__isl_give isl_space * isl_space_set_dim_name(__isl_take isl_space *space, enum isl_dim_type type, unsigned pos, __isl_keep const char *name)
__isl_give isl_space * isl_space_alloc(isl_ctx *ctx, unsigned nparam, unsigned n_in, unsigned n_out)
__isl_give isl_space * isl_space_params_alloc(isl_ctx *ctx, unsigned nparam)
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
int schedule_outer_coincidence
unsigned schedule_algorithm
static std::vector< Signature > min_max
__isl_null isl_union_map * isl_union_map_free(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_space * isl_union_map_get_space(__isl_keep isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_lex_ge_at_multi_union_pw_aff(__isl_take isl_union_map *umap, __isl_take isl_multi_union_pw_aff *mupa)
__isl_export __isl_give isl_union_map * isl_union_map_reverse(__isl_take isl_union_map *umap)
__isl_give isl_map * isl_map_from_union_map(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_deltas(__isl_take isl_union_map *umap)
__isl_export isl_bool isl_union_map_is_single_valued(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_intersect_range_factor_range(__isl_take isl_union_map *umap, __isl_take isl_union_map *factor)
__isl_export __isl_give isl_union_map * isl_union_map_intersect_range_factor_domain(__isl_take isl_union_map *umap, __isl_take isl_union_map *factor)
__isl_export isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap, isl_stat(*fn)(__isl_take isl_map *map, void *user), void *user)
isl_bool isl_union_map_plain_is_injective(__isl_keep isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_lex_le_at_multi_union_pw_aff(__isl_take isl_union_map *umap, __isl_take isl_multi_union_pw_aff *mupa)
__isl_give isl_union_map * isl_union_map_lex_lt_at_multi_union_pw_aff(__isl_take isl_union_map *umap, __isl_take isl_multi_union_pw_aff *mupa)
__isl_export __isl_give isl_union_map * isl_union_map_subtract_domain(__isl_take isl_union_map *umap, __isl_take isl_union_set *dom)
__isl_export __isl_give isl_union_map * isl_union_map_apply_range(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_give isl_union_map * isl_union_map_copy(__isl_keep isl_union_map *umap)
__isl_constructor __isl_give isl_union_map * isl_union_map_read_from_str(isl_ctx *ctx, const char *str)
__isl_export isl_bool isl_union_map_is_empty(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_range(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_from_domain(__isl_take isl_union_set *uset)
__isl_export __isl_give isl_union_map * isl_union_map_apply_domain(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_export __isl_give isl_union_map * isl_union_map_range_product(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_export __isl_give isl_union_map * isl_union_map_intersect_domain_factor_domain(__isl_take isl_union_map *umap, __isl_take isl_union_map *factor)
__isl_give isl_union_map * isl_union_map_empty(__isl_take isl_space *space)
__isl_export isl_bool isl_union_map_is_equal(__isl_keep isl_union_map *umap1, __isl_keep isl_union_map *umap2)
__isl_export __isl_give isl_union_map * isl_union_map_union(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_give isl_union_map * isl_union_map_intersect_domain(__isl_take isl_union_map *umap, __isl_take isl_union_set *uset)
__isl_export __isl_give isl_union_set * isl_union_map_bind_range(__isl_take isl_union_map *umap, __isl_take isl_multi_id *tuple)
__isl_export __isl_give isl_union_map * isl_union_map_range_reverse(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_intersect_domain_factor_range(__isl_take isl_union_map *umap, __isl_take isl_union_map *factor)
__isl_overload __isl_give isl_union_map * isl_union_map_eq_at_multi_union_pw_aff(__isl_take isl_union_map *umap, __isl_take isl_multi_union_pw_aff *mupa)
__isl_export __isl_give isl_union_set * isl_union_map_domain(__isl_take isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_lex_gt_at_multi_union_pw_aff(__isl_take isl_union_map *umap, __isl_take isl_multi_union_pw_aff *mupa)
__isl_export __isl_give isl_union_map * isl_union_map_intersect(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
struct isl_union_set isl_union_set
__isl_give isl_set * isl_set_from_union_set(__isl_take isl_union_set *uset)
__isl_give isl_union_map * isl_union_set_lex_gt_union_set(__isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
__isl_give isl_union_set * isl_union_set_product(__isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
__isl_constructor __isl_give isl_union_set * isl_union_set_read_from_str(isl_ctx *ctx, const char *str)
__isl_export isl_bool isl_union_set_is_equal(__isl_keep isl_union_set *uset1, __isl_keep isl_union_set *uset2)
__isl_export __isl_give isl_space * isl_union_set_get_space(__isl_keep isl_union_set *uset)
__isl_constructor __isl_give isl_union_set * isl_union_set_from_set(__isl_take isl_set *set)
isl_size isl_union_set_n_set(__isl_keep isl_union_set *uset)
__isl_export __isl_give isl_set * isl_union_set_extract_set(__isl_keep isl_union_set *uset, __isl_take isl_space *space)
isl_ctx * isl_union_set_get_ctx(__isl_keep isl_union_set *uset)
__isl_give isl_union_set * isl_union_set_copy(__isl_keep isl_union_set *uset)
__isl_null isl_union_set * isl_union_set_free(__isl_take isl_union_set *uset)
__isl_export isl_bool isl_union_set_is_subset(__isl_keep isl_union_set *uset1, __isl_keep isl_union_set *uset2)
isl_bool isl_union_set_contains(__isl_keep isl_union_set *uset, __isl_keep isl_space *space)
__isl_export __isl_give isl_val * isl_val_abs(__isl_take isl_val *v)
__isl_export isl_bool isl_val_is_nan(__isl_keep isl_val *v)
__isl_give isl_val * isl_val_copy(__isl_keep isl_val *v)
__isl_export int isl_val_cmp_si(__isl_keep isl_val *v, long i)
__isl_export __isl_give isl_val * isl_val_floor(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_inv(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_max(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_ceil(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_div(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_add(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_one(isl_ctx *ctx)
__isl_constructor __isl_give isl_val * isl_val_int_from_si(isl_ctx *ctx, long i)
isl_ctx * isl_val_get_ctx(__isl_keep isl_val *val)
__isl_export __isl_give isl_val * isl_val_gcd(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_constructor __isl_give isl_multi_val * isl_multi_val_read_from_str(isl_ctx *ctx, const char *str)
__isl_null isl_val * isl_val_free(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_sub(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_pow2(__isl_take isl_val *v)
__isl_export isl_bool isl_val_eq(__isl_keep isl_val *v1, __isl_keep isl_val *v2)
__isl_export __isl_give isl_val * isl_val_neg(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_min(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_constructor __isl_give isl_val * isl_val_read_from_str(isl_ctx *ctx, const char *str)
__isl_export __isl_give isl_val * isl_val_mul(__isl_take isl_val *v1, __isl_take isl_val *v2)
struct isl_multi_val isl_multi_val
__isl_null isl_vertices * isl_vertices_free(__isl_take isl_vertices *vertices)
isl_size isl_vertices_get_n_vertices(__isl_keep isl_vertices *vertices)
__isl_null isl_vertex * isl_vertex_free(__isl_take isl_vertex *vertex)
isl_ctx * isl_vertex_get_ctx(__isl_keep isl_vertex *vertex)
__isl_give isl_basic_set * isl_cell_get_domain(__isl_keep isl_cell *cell)
isl_stat isl_vertices_foreach_vertex(__isl_keep isl_vertices *vertices, isl_stat(*fn)(__isl_take isl_vertex *vertex, void *user), void *user)
__isl_give isl_basic_set * isl_vertex_get_domain(__isl_keep isl_vertex *vertex)
__isl_give isl_vertices * isl_basic_set_compute_vertices(__isl_keep isl_basic_set *bset)
__isl_give isl_multi_aff * isl_vertex_get_expr(__isl_keep isl_vertex *vertex)
__isl_null isl_cell * isl_cell_free(__isl_take isl_cell *cell)