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) }",
171 "{ [a, b] -> [(2*floor((a)/8) + floor((b)/6))] }",
173 "{ A[*,*] -> B[0,0] : false }",
177#define BASE pw_multi_aff
196 if (check_reparse_pw_multi_aff(ctx,
pma) < 0)
199 if (check_reparse_pw_multi_aff_tests(ctx) < 0)
209 "{ [a] -> [b] : b = a }",
210 "{ [a] -> [b = a] : b >= 0 }",
214#define BASE union_pw_multi_aff
224 if (check_parse_union_pw_multi_aff_fail_tests(ctx) < 0)
251 mpa = isl_multi_pw_aff_zero(space);
252 r = check_reparse_multi_pw_aff(ctx, mpa);
261 mpa = isl_multi_pw_aff_zero(space);
263 r = check_reparse_multi_pw_aff(ctx, mpa);
270 if (check_reparse_multi_pw_aff(ctx, mpa) < 0)
273 if (check_reparse_multi_pw_aff_tests(ctx) < 0)
275 if (check_parse_multi_pw_aff_fail_tests(ctx) < 0)
288 "(A[] : { S[x] : x > 0; T[y] : y >= 0 })",
290 "[N] -> (A[] : { })",
291 "[N] -> (A[] : { : N >= 0 })",
292 "[N] -> (A[] : { S[x] : x > N; T[y] : y >= 0 })",
293 "(A[] : [N] -> { S[x] : x > N; T[y] : y >= 0 })",
294 "A[{ S[x] -> [x + 1]; T[x] -> [x] }]",
295 "(A[{ S[x] -> [x + 1]; T[x] -> [x] }] : "
296 "{ S[x] : x > 0; T[y] : y >= 0 })",
298 "A[{ }, { S[x] -> [x + 1]; T[x] -> [x] }]",
302#define BASE multi_union_pw_aff
324 r = check_reparse_multi_union_pw_aff(ctx,
mupa);
339 r = check_reparse_multi_union_pw_aff(ctx,
mupa);
343 if (check_reparse_multi_union_pw_aff_tests(ctx) < 0)
368 {
"{ [x,y] : [([x/2]+y)/3] >= 1 }",
369 "{ [x, y] : 2y >= 6 - x }" },
370 {
"{ [x,y] : x <= min(y, 2*y+3) }",
371 "{ [x,y] : x <= y, 2*y + 3 }" },
372 {
"{ [x,y] : x >= min(y, 2*y+3) }",
373 "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }" },
374 {
"[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }",
375 "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }" },
376 {
"{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }",
377 "{ [i,j] -> [min(i,j)] }" },
378 {
"{ [i,j] : i != j }",
379 "{ [i,j] : i < j or i > j }" },
380 {
"{ [i,j] : (i+1)*2 >= j }",
381 "{ [i, j] : j <= 2 + 2i }" },
382 {
"{ [i] -> [i > 0 ? 4 : 5] }",
383 "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }" },
384 {
"[N=2,M] -> { [i=[(M+N)/4]] }",
385 "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }" },
386 {
"{ [x] : x >= 0 }",
387 "{ [x] : x-0 >= 0 }" },
388 {
"{ [i] : ((i > 10)) }",
389 "{ [i] : i >= 11 }" },
391 "{ [i] -> [0 * i] }" },
392 {
"{ [a] -> [b] : (not false) }",
393 "{ [a] -> [b] : true }" },
394 {
"{ [i] : i/2 <= 5 }",
395 "{ [i] : i <= 10 }" },
396 {
"{Sym=[n] [i] : i <= n }",
397 "[n] -> { [i] : i <= n }" },
400 {
"{ [i] : 2*floor(i/2) = i }",
401 "{ [i] : exists a : i = 2 a }" },
402 {
"{ [a] -> [b] : a = 5 implies b = 5 }",
403 "{ [a] -> [b] : a != 5 or b = 5 }" },
404 {
"{ [a] -> [a - 1 : a > 0] }",
405 "{ [a] -> [a - 1] : a > 0 }" },
406 {
"{ [a] -> [a - 1 : a > 0; a : a <= 0] }",
407 "{ [a] -> [a - 1] : a > 0; [a] -> [a] : a <= 0 }" },
408 {
"{ [a] -> [(a) * 2 : a >= 0; 0 : a < 0] }",
409 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
410 {
"{ [a] -> [(a * 2) : a >= 0; 0 : a < 0] }",
411 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
412 {
"{ [a] -> [(a * 2 : a >= 0); 0 : a < 0] }",
413 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
414 {
"{ [a] -> [(a * 2 : a >= 0; 0 : a < 0)] }",
415 "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
416 {
"{ [a,b] -> [i,j] : a,b << i,j }",
417 "{ [a,b] -> [i,j] : a < i or (a = i and b < j) }" },
418 {
"{ [a,b] -> [i,j] : a,b <<= i,j }",
419 "{ [a,b] -> [i,j] : a < i or (a = i and b <= j) }" },
420 {
"{ [a,b] -> [i,j] : a,b >> i,j }",
421 "{ [a,b] -> [i,j] : a > i or (a = i and b > j) }" },
422 {
"{ [a,b] -> [i,j] : a,b >>= i,j }",
423 "{ [a,b] -> [i,j] : a > i or (a = i and b >= j) }" },
424 {
"{ [n] -> [i] : exists (a, b, c: 8b <= i - 32a and "
425 "8b >= -7 + i - 32 a and b >= 0 and b <= 3 and "
426 "8c < n - 32a and i < n and c >= 0 and "
427 "c <= 3 and c >= -4a) }",
428 "{ [n] -> [i] : 0 <= i < n }" },
429 {
"{ [x] -> [] : exists (a, b: 0 <= a <= 1 and 0 <= b <= 3 and "
430 "2b <= x - 8a and 2b >= -1 + x - 8a) }",
431 "{ [x] -> [] : 0 <= x <= 15 }" },
432 {
"{ [x] -> [x] : }",
434 {
"{ [x=4:5] -> [x + 1] }",
435 "{ [x] -> [x + 1] : 4 <= x <= 5 }" },
436 {
"{ [x=4:5] -> [x + 1 : x + 1] }",
437 "{ [x=4:5] -> [x + 1] }" },
438 {
"{ [x] -> [x - 1 : x + 1] }",
439 "{ [x] -> [y] : x - 1 <= y <= x + 1 }" },
440 {
"{ [x=4:] -> [x + 1] }",
441 "{ [x] -> [x + 1] : 4 <= x }" },
442 {
"{ [x=:5] -> [x + 1] }",
443 "{ [x] -> [x + 1] : x <= 5 }" },
444 {
"{ [x=:] -> [x + 1] }",
445 "{ [x] -> [x + 1] }" },
449 "{ [x, floor(x/4)] }" },
464 {
"{ [-2^2:2^2-1] }",
470 {
"{ [a = 0:3, b = 0:15, c = 0:15, d] : "
471 "256*floor((-1 - (256a + 16b + c))/256) >= d }",
472 "{ [a = 0:3, b = 0:15, c = 0:15, d] : 256a <= -256 - d }" },
473 {
"[a, b, c, d] -> { [max(a,b,c,d)] }",
474 "[a, b, c, d] -> { [a] : b < a and c < a and d < a; "
475 "[b] : b >= a and c < b and d < b; "
476 "[c] : c >= a and c >= b and d < c; "
477 "[d] : d >= a and d >= b and d >= c }" },
478 {
"[a, b, c, d] -> { [min(a,b,c,d)] }",
479 "[a, b, c, d] -> { [a] : b >= a and c >= a and d >= a; "
480 "[b] : b < a and c >= b and d >= b; "
481 "[c] : c < b and c < a and d >= c; "
482 "[d] : d < c and d < b and d < a }" },
489 const char *
str, *str2;
504 str =
"{ [i] -> [-i] }";
509 str =
"{ A[i] -> L[([i/3])] }";
516 "p1 = 1 && (y1 <= y2 || y2 = 0) }");
525 str =
"{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}";
527 str =
"{ [new, old] -> [o0, o1] : "
528 "exists (e0 = [(-1 - new + o0)/2], e1 = [(-1 - old + o1)/2]: "
529 "2e0 = -1 - new + o0 and 2e1 = -1 - old + o1 and o0 >= 0 and "
530 "o0 <= 1 and o1 >= 0 and o1 <= 1) }";
536 str =
"{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}";
538 str =
"{[new,old] -> [(new+1)%2,(old+1)%2]}";
545 test_parse_map(ctx,
"{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }");
558 const char *
str =
"{[y]: Exists ( alpha : 2alpha = y)}";
563 input = fopen(filename,
"r");
581 "read sets not equal",
return -1);
599 "set not considered bounded",
return -1);
610 "set considered bounded",
return -1);
620 "set considered bounded",
return -1);
680 "failed construction",
return -1);
703 "[n] -> { [i] -> [j] : exists (a = [i/10] : i - 10a <= n ) }");
706 "[n] -> { [i,k] -> [j] : exists (a = [i/10] : i - 10a <= n ) }");
722 "unexpected result",
return -1);
724 str =
"[n] -> { [i] -> [] : exists a : 0 <= i <= n and i = 2 a }";
726 str =
"{ [i] -> [j] : exists a : 0 <= i <= j and i = 2 a }";
737 "unexpected result",
return -1);
743#define BASE multi_val
747#define BASE multi_aff
876 {
"0",
'+',
"0",
"0" },
877 {
"1",
'+',
"0",
"1" },
878 {
"1",
'+',
"1",
"2" },
879 {
"1",
'-',
"1",
"0" },
880 {
"1",
'*',
"1",
"1" },
881 {
"1",
'/',
"1",
"1" },
882 {
"2",
'*',
"3",
"6" },
883 {
"2",
'*',
"1/2",
"1" },
884 {
"2",
'*',
"1/3",
"2/3" },
885 {
"2/3",
'*',
"3/5",
"2/5" },
886 {
"2/3",
'*',
"7/5",
"14/15" },
887 {
"2",
'/',
"1/2",
"4" },
888 {
"-2",
'/',
"-1/2",
"4" },
889 {
"-2",
'/',
"1/2",
"-4" },
890 {
"2",
'/',
"-1/2",
"-4" },
891 {
"2",
'/',
"2",
"1" },
892 {
"2",
'/',
"3",
"2/3" },
893 {
"2/3",
'/',
"5/3",
"2/5" },
894 {
"2/3",
'/',
"5/7",
"14/15" },
895 {
"0",
'/',
"0",
"NaN" },
896 {
"42",
'/',
"0",
"NaN" },
897 {
"-42",
'/',
"0",
"NaN" },
898 {
"infty",
'/',
"0",
"NaN" },
899 {
"-infty",
'/',
"0",
"NaN" },
900 {
"NaN",
'/',
"0",
"NaN" },
901 {
"0",
'/',
"NaN",
"NaN" },
902 {
"42",
'/',
"NaN",
"NaN" },
903 {
"-42",
'/',
"NaN",
"NaN" },
904 {
"infty",
'/',
"NaN",
"NaN" },
905 {
"-infty",
'/',
"NaN",
"NaN" },
906 {
"NaN",
'/',
"NaN",
"NaN" },
907 {
"0",
'/',
"infty",
"0" },
908 {
"42",
'/',
"infty",
"0" },
909 {
"-42",
'/',
"infty",
"0" },
910 {
"infty",
'/',
"infty",
"NaN" },
911 {
"-infty",
'/',
"infty",
"NaN" },
912 {
"NaN",
'/',
"infty",
"NaN" },
913 {
"0",
'/',
"-infty",
"0" },
914 {
"42",
'/',
"-infty",
"0" },
915 {
"-42",
'/',
"-infty",
"0" },
916 {
"infty",
'/',
"-infty",
"NaN" },
917 {
"-infty",
'/',
"-infty",
"NaN" },
918 {
"NaN",
'/',
"-infty",
"NaN" },
919 {
"1",
'-',
"1/3",
"2/3" },
920 {
"1/3",
'+',
"1/2",
"5/6" },
921 {
"1/2",
'+',
"1/2",
"1" },
922 {
"3/4",
'-',
"1/4",
"1/2" },
923 {
"1/2",
'-',
"1/3",
"1/6" },
924 {
"infty",
'+',
"42",
"infty" },
925 {
"infty",
'+',
"infty",
"infty" },
926 {
"42",
'+',
"infty",
"infty" },
927 {
"infty",
'-',
"infty",
"NaN" },
928 {
"infty",
'*',
"infty",
"infty" },
929 {
"infty",
'*',
"-infty",
"-infty" },
930 {
"-infty",
'*',
"infty",
"-infty" },
931 {
"-infty",
'*',
"-infty",
"infty" },
932 {
"0",
'*',
"infty",
"NaN" },
933 {
"1",
'*',
"infty",
"infty" },
934 {
"infty",
'*',
"0",
"NaN" },
935 {
"infty",
'*',
"42",
"infty" },
936 {
"42",
'-',
"infty",
"-infty" },
937 {
"infty",
'+',
"-infty",
"NaN" },
938 {
"4",
'g',
"6",
"2" },
939 {
"5",
'g',
"6",
"1" },
940 {
"42",
'm',
"3",
"3" },
941 {
"42",
'M',
"3",
"42" },
942 {
"3",
'm',
"42",
"3" },
943 {
"3",
'M',
"42",
"42" },
944 {
"42",
'm',
"infty",
"42" },
945 {
"42",
'M',
"infty",
"infty" },
946 {
"42",
'm',
"-infty",
"-infty" },
947 {
"42",
'M',
"-infty",
"42" },
948 {
"42",
'm',
"NaN",
"NaN" },
949 {
"42",
'M',
"NaN",
"NaN" },
950 {
"infty",
'm',
"-infty",
"-infty" },
951 {
"infty",
'M',
"-infty",
"infty" },
980 "unexpected result",
return -1);
1001 "{ [i,j] : 2 * [i/2] + 3 * [j/4] <= 10 and 2 i = j }",
1002 "{ [m, w] : exists a : w - 2m - 5 <= 3a <= m - 2w }",
1003 "{ [m, w] : exists a : w >= 0 and a < m and -1 + w <= a <= 2m - w }",
1023 "expecting no existentials",
return -1);
1058 assert(bset && bset->n_div == 1);
1081 assert(bset && bset->n_div == 1);
1104 assert(bset && bset->n_div == 1);
1148 assert(bset && bset->n_div == 0);
1169 assert(bset && bset->n_div == 1);
1273 str =
"{ [i] : exists (e0, e1: 3e1 >= 1 + 2e0 and "
1274 "8e1 <= -1 + 5i - 5e0 and 2e1 >= 1 + 2i - 5e0) }";
1284 str =
"{ [i,j,k] : 3 + i + 2j >= 0 and 2 * [(i+2j)/4] <= k }";
1294 "result not as accurate as expected",
return -1);
1308 input = fopen(filename,
"r");
1343 input = fopen(filename,
"r");
1367 {
"{ [i] : 0 <= i <= 10 }",
"{ [0] }" },
1368 {
"{ [i] : 0 <= i }",
"{ [i] : 0 <= i }" },
1369 {
"{ [i] : i <= 10 }",
"{ [i] : i <= 0 }" },
1370 {
"{ [i] : false }",
"{ [i] : false }" },
1415 str =
"[m] -> { [i0] : exists (e0, e1: e1 <= 1 + i0 and "
1416 "m >= 3 and 4i0 <= 2 + m and e1 >= i0 and "
1417 "e1 >= 0 and e1 <= 2 and e1 >= 1 + 2e0 and "
1418 "2e1 <= 1 + m + 4e0 and 2e1 >= 2 - m + 4i0 - 4e0) }";
1432 str =
"{ [a, b, c, 0] : exists (e0 = [(b)/32], e1 = [(c)/32]: "
1433 "32e0 = b and 32e1 = c); "
1434 "[a, 0, c, 0] : exists (e0 = [(c)/32]: 32e0 = c) }";
1441 str =
"{ [a] : exists e0, e1, e2: 32e1 = 31 + 31a + 31e0 and "
1442 "32e2 = 31 + 31e0 }";
1445 str =
"{ [a] : exists e : a = 32 e }";
1471 str =
"{[x, y] : x = 0 or 2*((x+y)//2) <= y + 2 }";
1477 if (is_universe < 0)
1481 "hull should not have any constraints",
1496 "{ [i,j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
1497 "{ [i,j] : i >= 1 }" },
1499 "{ [n,i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
1500 "(j mod 4 = 2 and k mod 6 = n) }",
1501 "{ [n,i,j,k] : j mod 4 = 2 }" },
1503 "{ [0,x,y] : x <= -1; [1,x,y] : x <= y <= -x; [2,x,y] : x <= 1 }",
1504 "{ [t,x,y] : 0 <= t <= 2 and x <= 1 }" },
1506 "{ [a, b] : b <= 0 and "
1507 "2*floor((-2*floor((b)/2))/5) >= a - floor((b)/2); "
1508 "[a, b] : a mod 2 = 0 }",
1548 str =
"{ [x, y] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x;"
1549 "[y, x] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x }";
1580 {
"{ S[x, y] : 0 <= x, y < 10 }",
"{ S[0, 0] }",
"{ S[10, 10] }" },
1581 {
"[N] -> { S[x, y] : N <= x, y < N + 10 }",
1582 "[N] -> { S[N, N] }",
"{ S[10, 10] }" },
1583 {
"{ S[x, y] : 0 <= x + y, x - y < 10 }",
1584 "{ S[0, -4] }",
"{ S[10, 9] }" },
1585 {
"{ [i=0:10] : exists (e0, e1: 3e1 >= 1 + 2e0 and "
1586 "8e1 <= -1 + 5i - 5e0 and 2e1 >= 1 + 2i - 5e0) }",
1587 "{ [3] }",
"{ [8] }" },
1588 {
"[N] -> { [w = 0:17] : exists (e0: w < 2N and "
1589 "-1 + w <= e0 <= w and 2e0 >= N + w and w <= 2e0 <= 15 + w) }",
1590 "[N] -> { [N] }",
"{ [9] }" },
1612 r = multi_aff_check_plain_equal(
offset,
str);
1615 r = multi_val_check_plain_equal(
size,
str);
1616 isl_multi_aff_free(
offset);
1617 isl_multi_val_free(
size);
1636 input = fopen(filename,
"r");
1660 {
"{ [i0, i1, i2] : (i2 = 1 and i0 = 0 and i1 >= 0) or "
1661 "(i0 = 1 and i1 = 0 and i2 = 1) or "
1662 "(i0 = 0 and i1 = 0 and i2 = 0) }",
1663 "{ [i0, i1, i2] : i0 >= 0 and i2 >= i0 and i2 <= 1 and i1 >= 0 }" },
1664 {
"[n] -> { [i0, i1, i0] : i0 <= -4 + n; "
1665 "[i0, i0, i2] : n = 6 and i0 >= 0 and i2 <= 7 - i0 and "
1666 "i2 <= 5 and i2 >= 4; "
1667 "[3, i1, 3] : n = 5 and i1 <= 2 and i1 >= 0 }",
1668 "[n] -> { [i0, i1, i2] : i2 <= -1 + n and 2i2 <= -6 + 3n - i0 and "
1669 "i2 <= 5 + i0 and i2 >= i0 }" },
1670 {
"{ [x, y] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x }",
1671 "{ [x, y] : 1 = 0 }" },
1672 {
"{ [x, y, z] : 0 <= x, y, z <= 10; [x, y, 0] : x >= 0 and y > 0; "
1673 "[x, y, 0] : x >= 0 and y < 0 }",
1674 "{ [x, y, z] : x >= 0 and 0 <= z <= 10 }" },
1675 {
"{ [a, b, c] : a <= 1 and -a < b <= 1 and 0 <= c <= 2 - a - b and "
1677 "[0, 2, 0]; [3, 1, 0] }",
1678 "{ [a, b, c] : b > -a and 2b >= -1 + a and 0 <= c <= a and "
1679 "5c <= 6 - a - 3b }" },
1720 "unexpected convex hull",
return -1);
1745 isl_bool empty_before, empty_after;
1756 if (empty_before < 0 || empty_after < 0)
1776 map =
"{ [] -> [a, b, c] : 2b = 1 + a }";
1777 context =
"{ [] -> [a, b, c] : 2c = 2 + a }";
1780 map =
"{ [] -> [0, 0] }";
1781 context =
"{ [] -> [a, b] : a > b }";
1795 {
"{ [i] -> [j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
1796 "{ [i] -> [j] : i >= 1 }",
1797 "{ [i] -> [j] : j >= 1 or i >= 2 and j <= 10 }" },
1798 {
"{ [n] -> [i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
1799 "(j mod 4 = 2 and k mod 6 = n) }",
1800 "{ [n] -> [i,j,k] : j mod 4 = 2 }",
1801 "{ [n] -> [i,j,k] : (i mod 3 = 2) or (k mod 6 = n) }" },
1802 {
"{ [i] -> [j] : i > j and (exists a,b : i <= 2a + 5b <= 2) }",
1803 "{ [i] -> [j] : i > j }",
1804 "{ [i] -> [j] : exists a,b : i <= 2a + 5b <= 2 }" },
1831 "incorrect gist result",
return -1);
1846 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : "
1847 "exists (e0 = [(15 + p0 + 15p6 + 15p10)/16], e1 = [(p5)/8], "
1848 "e2 = [(p6)/128], e3 = [(8p2 - p5)/128], "
1849 "e4 = [(128p3 - p6)/4096]: 8e1 = p5 and 128e2 = p6 and "
1850 "128e3 = 8p2 - p5 and 4096e4 = 128p3 - p6 and p2 >= 0 and "
1851 "16e0 >= 16 + 16p6 + 15p10 and p2 <= 15 and p3 >= 0 and "
1852 "p3 <= 31 and p6 >= 128p3 and p5 >= 8p2 and p10 >= 0 and "
1853 "16e0 <= 15 + p0 + 15p6 + 15p10 and 16e0 >= p0 + 15p6 + 15p10 and "
1854 "p10 <= 15 and p10 <= -1 + p0 - p6) }";
1856 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : exists (e0 = [(p5)/8], "
1857 "e1 = [(p6)/128], e2 = [(8p2 - p5)/128], "
1858 "e3 = [(128p3 - p6)/4096]: 8e0 = p5 and 128e1 = p6 and "
1859 "128e2 = 8p2 - p5 and 4096e3 = 128p3 - p6 and p5 >= -7 and "
1860 "p2 >= 0 and 8p2 <= -1 + p0 and p2 <= 15 and p3 >= 0 and "
1861 "p3 <= 31 and 128p3 <= -1 + p0 and p6 >= -127 and "
1862 "p5 <= -1 + p0 and p6 <= -1 + p0 and p6 >= 128p3 and "
1863 "p0 >= 1 and p5 >= 8p2 and p10 >= 0 and p10 <= 15 ) }";
1866 assert(bset1 && bset1->n_div == 0);
1872 str =
"[t1] -> { S_0[] -> A[o0] : (exists (e0 = [(-t1 + o0)/16]: "
1873 "16e0 = -t1 + o0 and o0 >= 0 and o0 <= 15 and t1 >= 0)) or "
1874 "(exists (e0 = [(-1 + t1)/16], "
1875 "e1 = [(-16 + t1 - 16e0)/4294967296]: "
1876 "4294967296e1 = -16 + t1 - o0 - 16e0 and "
1877 "16e0 <= -1 + t1 and 16e0 >= -16 + t1 and o0 >= 0 and "
1878 "o0 <= 4294967295 and t1 <= -1)) }";
1880 str =
"[t1] -> { S_0[] -> A[o0] : t1 >= 0 and t1 <= 4294967295 }";
1914 one =
set &&
set->n == 1;
1922 "coalesced set not equal to input",
return -1);
1923 if (check_one && !one)
1925 "coalesced set should not be a union",
return -1);
1939 { 1,
"{ [x,y,z] : y + 2 >= 0 and x - y + 1 >= 0 and "
1940 "-x - y + 1 >= 0 and -3 <= z <= 3;"
1941 "[x,y,z] : -x+z + 20 >= 0 and -x-z + 20 >= 0 and "
1942 "x-z + 20 >= 0 and x+z + 20 >= 0 and "
1944 { 1,
"{ [x,y] : 0 <= x,y <= 10; [5,y]: 4 <= y <= 11 }" },
1945 { 1,
"{ [x,0,0] : -5 <= x <= 5; [0,y,1] : -5 <= y <= 5 }" },
1946 { 1,
"{ [x,y] : 0 <= x <= 10 and 0 >= y >= -1 and x+y >= 0; [0,1] }" },
1947 { 1,
"{ [x,y] : (0 <= x,y <= 4) or (2 <= x,y <= 5 and x + y <= 9) }" },
1948 { 0,
"{ [x, y, z] : 0 <= x,y,z <= 100 and 0 < z <= 2 + 2x + 2y; "
1949 "[x, y, 0] : x,y <= 100 and y <= 9 + 11x and x <= 9 + 11y }" },
1950 { 1,
"{ [0:1, 0:1]; [0, 2:3] }" },
1951 { 1,
"{ [0:1, 0:1]; [0, 2:3]; [1, -2:-1] }" },
1952 { 1,
"{ [0:3, 0:1]; [1:2, 2:5] }" },
1953 { 1,
"{ [0:3, 0:1]; [0:2, 2:5] }" },
1954 { 1,
"{ [0:3, 0:1]; [1:3, 2:5] }" },
1955 { 0,
"{ [0:3, 0:1]; [1:4, 2:5] }" },
1956 { 0,
"{ [0:3, 0:1]; [1:5, 2:5] }" },
1994 { 1,
"{[x,y]: x >= 0 & x <= 10 & y >= 0 & y <= 10 or "
1995 "y >= x & x >= 2 & 5 >= y }" },
1996 { 1,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
1997 "x + y >= 10 & y <= x & x + y <= 20 & y >= 0}" },
1998 { 0,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
1999 "x + y >= 10 & y <= x & x + y <= 19 & y >= 0}" },
2000 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2001 "y >= 0 & x >= 6 & x <= 10 & y <= x}" },
2002 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2003 "y >= 0 & x >= 7 & x <= 10 & y <= x}" },
2004 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
2005 "y >= 0 & x >= 6 & x <= 10 & y + 1 <= x}" },
2006 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 6}" },
2007 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 7 & y <= 6}" },
2008 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 5}" },
2009 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 7}" },
2010 { 1,
"[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }" },
2011 { 0,
"{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}" },
2012 { 1,
"[n] -> { [i] : 1 <= i and i <= n - 1 or 2 <= i and i <= n }" },
2013 { 0,
"[n] -> { [[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
2014 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
2015 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
2016 "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and "
2017 "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and "
2018 "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and "
2019 "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and "
2020 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);"
2021 "[[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
2022 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
2023 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
2024 "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and "
2025 "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and "
2026 "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and "
2027 "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and "
2028 "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and "
2029 "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and "
2030 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }" },
2031 { 0,
"[n, m] -> { [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and "
2032 "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or "
2033 "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and "
2034 "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }" },
2035 { 0,
"[M, N] -> { [[i0, i1, i2, i3, i4, i5, i6] -> "
2036 "[o0, o1, o2, o3, o4, o5, o6]] : "
2037 "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and "
2038 "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and "
2039 "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and "
2040 "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 "
2041 "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and "
2042 "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 "
2043 "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and "
2044 "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 "
2045 "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or "
2046 "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and "
2047 "o6 >= i3 + i6 - o3 and M >= 0 and "
2048 "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and "
2049 "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }" },
2050 { 0,
"[M, N] -> { [o0] : (o0 = 0 and M >= 1 and N >= 2) or "
2051 "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or "
2052 "(o0 = 0 and M >= 2 and N >= 3) or "
2053 "(M = 0 and o0 = 0 and N >= 3) }" },
2054 { 0,
"{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and "
2055 "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or "
2056 "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and "
2057 "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }" },
2058 { 0,
"[M] -> { [i1] : (i1 >= 2 and i1 <= M) or (i1 = M and M >= 1) }" },
2059 { 0,
"{[x,y] : x,y >= 0; [x,y] : 10 <= x <= 20 and y >= -1 }" },
2060 { 1,
"{ [x, y] : (x >= 1 and y >= 1 and x <= 2 and y <= 2) or "
2061 "(y = 3 and x = 1) }" },
2062 { 1,
"[M] -> { [i0, i1, i2, i3, i4] : (i1 >= 3 and i4 >= 2 + i2 and "
2063 "i2 >= 2 and i0 >= 2 and i3 >= 1 + i2 and i0 <= M and "
2064 "i1 <= M and i3 <= M and i4 <= M) or "
2065 "(i1 >= 2 and i4 >= 1 + i2 and i2 >= 2 and i0 >= 2 and "
2066 "i3 >= 1 + i2 and i0 <= M and i1 <= -1 + M and i3 <= M and "
2067 "i4 <= -1 + M) }" },
2068 { 1,
"{ [x, y] : (x >= 0 and y >= 0 and x <= 10 and y <= 10) or "
2069 "(x >= 1 and y >= 1 and x <= 11 and y <= 11) }" },
2070 { 0,
"{[x,0] : x >= 0; [x,1] : x <= 20}" },
2071 { 1,
"{ [x, 1 - x] : 0 <= x <= 1; [0,0] }" },
2072 { 1,
"{ [0,0]; [i,i] : 1 <= i <= 10 }" },
2073 { 0,
"{ [0,0]; [i,j] : 1 <= i,j <= 10 }" },
2074 { 1,
"{ [0,0]; [i,2i] : 1 <= i <= 10 }" },
2075 { 0,
"{ [0,0]; [i,2i] : 2 <= i <= 10 }" },
2076 { 0,
"{ [1,0]; [i,2i] : 1 <= i <= 10 }" },
2077 { 0,
"{ [0,1]; [i,2i] : 1 <= i <= 10 }" },
2078 { 0,
"{ [a, b] : exists e : 2e = a and "
2079 "a >= 0 and (a <= 3 or (b <= 0 and b >= -4 + a)) }" },
2080 { 0,
"{ [i, j, i', j'] : i <= 2 and j <= 2 and "
2081 "j' >= -1 + 2i + j - 2i' and i' <= -1 + i and "
2082 "j >= 1 and j' <= i + j - i' and i >= 1; "
2084 { 1,
"{ [i,j] : exists a,b : i = 2a and j = 3b; "
2085 "[i,j] : exists a : j = 3a }" },
2086 { 1,
"{ [a, b, c] : (c <= 7 - b and b <= 1 and b >= 0 and "
2087 "c >= 3 + b and b <= 3 + 8a and b >= -26 + 8a and "
2089 "(b <= 1 and c <= 7 and b >= 0 and c >= 4 + b and "
2090 "b <= 3 + 8a and b >= -26 + 8a and a >= 3) }" },
2091 { 1,
"{ [a, 0, c] : c >= 1 and c <= 29 and c >= -1 + 8a and "
2092 "c <= 6 + 8a and a >= 3; "
2093 "[a, -1, c] : c >= 1 and c <= 30 and c >= 8a and "
2094 "c <= 7 + 8a and a >= 3 and a <= 4 }" },
2095 { 1,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2096 "[x,0] : 3 <= x <= 4 }" },
2097 { 1,
"{ [x,y] : 0 <= x <= 3 and y >= 0 and x + 3y <= 6; "
2098 "[x,0] : 4 <= x <= 5 }" },
2099 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2100 "[x,0] : 3 <= x <= 5 }" },
2101 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + y <= 4; "
2102 "[x,0] : 3 <= x <= 4 }" },
2103 { 1,
"{ [i0, i1] : i0 <= 122 and i0 >= 1 and 128i1 >= -249 + i0 and "
2105 "[i0, 0] : i0 >= 123 and i0 <= 124 }" },
2106 { 1,
"{ [0,0]; [1,1] }" },
2107 { 1,
"[n] -> { [k] : 16k <= -1 + n and k >= 1; [0] : n >= 2 }" },
2108 { 1,
"{ [k, ii, k - ii] : ii >= -6 + k and ii <= 6 and ii >= 1 and "
2110 "[k, 0, k] : k <= 6 and k >= 1 }" },
2111 { 1,
"{ [i,j] : i = 4 j and 0 <= i <= 100;"
2112 "[i,j] : 1 <= i <= 100 and i >= 4j + 1 and i <= 4j + 2 }" },
2113 { 1,
"{ [x,y] : x % 2 = 0 and y % 2 = 0; [x,x] : x % 2 = 0 }" },
2114 { 1,
"[n] -> { [1] : n >= 0;"
2115 "[x] : exists (e0 = floor((x)/2): x >= 2 and "
2116 "2e0 >= -1 + x and 2e0 <= x and 2e0 <= n) }" },
2117 { 1,
"[n] -> { [x, y] : exists (e0 = floor((x)/2), e1 = floor((y)/3): "
2118 "3e1 = y and x >= 2 and 2e0 >= -1 + x and "
2119 "2e0 <= x and 2e0 <= n);"
2120 "[1, y] : exists (e0 = floor((y)/3): 3e0 = y and "
2122 { 1,
"[t1] -> { [i0] : (exists (e0 = floor((63t1)/64): "
2123 "128e0 >= -134 + 127t1 and t1 >= 2 and "
2124 "64e0 <= 63t1 and 64e0 >= -63 + 63t1)) or "
2126 { 1,
"{ [i, i] : exists (e0 = floor((1 + 2i)/3): 3e0 <= 2i and "
2127 "3e0 >= -1 + 2i and i <= 9 and i >= 1);"
2129 { 1,
"{ [t1] : exists (e0 = floor((-11 + t1)/2): 2e0 = -11 + t1 and "
2130 "t1 >= 13 and t1 <= 16);"
2131 "[t1] : t1 <= 15 and t1 >= 12 }" },
2132 { 1,
"{ [x,y] : x = 3y and 0 <= y <= 2; [-3,-1] }" },
2133 { 1,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-2] }" },
2134 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-2,-2] }" },
2135 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-1] }" },
2136 { 1,
"{ [i] : exists j : i = 4 j and 0 <= i <= 100;"
2137 "[i] : exists j : 1 <= i <= 100 and i >= 4j + 1 and "
2139 { 1,
"{ [c0] : (exists (e0 : c0 - 1 <= 3e0 <= c0)) or "
2140 "(exists (e0 : 3e0 = -2 + c0)) }" },
2141 { 0,
"[n, b0, t0] -> "
2142 "{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
2143 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2144 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2145 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2146 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 >= 8 + n and "
2147 "3i4 <= -96 + 3t0 + i0 and 3i4 >= -95 - n + 3t0 + i0 and "
2148 "i8 >= -157 + i0 - 4i4 and i8 >= 0 and "
2149 "i8 <= -33 + i0 - 4i4 and 3i8 <= -91 + 4n - i0)) or "
2150 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2151 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2152 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2153 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 <= 7 + n and "
2154 "4i4 <= -3 + i0 and 3i4 <= -96 + 3t0 + i0 and "
2155 "3i4 >= -95 - n + 3t0 + i0 and i8 >= -157 + i0 - 4i4 and "
2156 "i8 >= 0 and i8 <= -4 + i0 - 3i4 and i8 <= -41 + i0));"
2157 "[i0, i1, i2, i3, 0, i5, i6, i7, i8, i9, i10, i11, i12] : "
2158 "(exists (e0 = floor((i8)/32): b0 = 0 and 32e0 = i8 and "
2159 "n <= 2147483647 and t0 <= 31 and t0 >= 0 and i0 >= 11 and "
2160 "i0 >= 96 - 3t0 and i0 <= 95 + n - 3t0 and i0 <= 7 + n and "
2161 "i8 >= -40 + i0 and i8 <= -10 + i0)) }" },
2162 { 0,
"{ [i0, i1, i2] : "
2163 "(exists (e0, e1 = floor((i0)/32), e2 = floor((i1)/32): "
2164 "32e1 = i0 and 32e2 = i1 and i1 >= -31 + i0 and "
2165 "i1 <= 31 + i0 and i2 >= -30 + i0 and i2 >= -30 + i1 and "
2166 "32e0 >= -30 + i0 and 32e0 >= -30 + i1 and "
2167 "32e0 >= -31 + i2 and 32e0 <= 30 + i2 and 32e0 <= 31 + i1 and "
2168 "32e0 <= 31 + i0)) or "
2170 { 1,
"{ [a, b, c] : 2b = 1 + a and 2c = 2 + a; [0, 0, 0] }" },
2171 { 1,
"{ [a, a, b, c] : 32*floor((a)/32) = a and 2*floor((b)/2) = b and "
2172 "2*floor((c)/2) = c and 0 <= a <= 192;"
2173 "[224, 224, b, c] : 2*floor((b)/2) = b and 2*floor((c)/2) = c }"
2175 { 1,
"[n] -> { [a,b] : (exists e : 1 <= a <= 7e and 9e <= b <= n) or "
2176 "(0 <= a <= b <= n) }" },
2177 { 1,
"{ [a, b] : 0 <= a <= 2 and b >= 0 and "
2178 "((0 < b <= 13) or (2*floor((a + b)/2) >= -5 + a + 2b)) }" },
2179 { 1,
"{ [a] : (2 <= a <= 5) or (a mod 2 = 1 and 1 <= a <= 5) }" },
2180 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2181 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2182 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2183 "b = 3 and 9e0 <= -19 + 2c)) }" },
2184 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2185 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2186 "(a = 4 and b = 3 and "
2187 "9*floor((-16 + 2c)/9) <= -19 + 2c) }" },
2188 { 0,
"{ [a, b, c] : (b <= 2 and b <= -2 + a) or "
2189 "(b = -1 + a and 0 < a <= 3 and "
2190 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2191 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2192 "b = 3 and 9e0 <= -19 + 2c)) }" },
2193 { 1,
"{ [y, x] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2195 { 1,
"{ [x, y] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2197 { 1,
"{ [1, y] : -1 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2198 { 1,
"{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2199 { 1,
"{ [x, y] : 0 <= x <= 10 and x - 4*floor(x/4) <= 1 and y <= 0; "
2200 "[x, y] : 0 <= x <= 10 and x - 4*floor(x/4) > 1 and y <= 0; "
2201 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) <= 1 and 0 < y; "
2202 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) > 1 and 0 < y }" },
2203 { 1,
"{ [x, 0] : 0 <= x <= 10 and x mod 2 = 0; "
2204 "[x, 0] : 0 <= x <= 10 and x mod 2 = 1; "
2205 "[x, y] : 0 <= x <= 10 and 1 <= y <= 10 }" },
2206 { 1,
"{ [a] : a <= 8 and "
2207 "(a mod 10 = 7 or a mod 10 = 8 or a mod 10 = 9) }" },
2208 { 1,
"{ [x, y] : 2y = -x and x <= 0 or "
2209 "x <= -1 and 2y <= -x - 1 and 2y >= x - 1 }" },
2210 { 0,
"{ [x, y] : 2y = -x and x <= 0 or "
2211 "x <= -2 and 2y <= -x - 1 and 2y >= x - 1 }" },
2212 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2213 "(a < 0 and 3*floor((a)/3) < a) }" },
2214 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2215 "(a < -1 and 3*floor((a)/3) < a) }" },
2216 { 1,
"{ [a, b] : a <= 1024 and b >= 0 and "
2217 "((-31 - a + b <= 32*floor((-1 - a)/32) <= -33 + b and "
2218 "32*floor((-1 - a)/32) <= -16 + b + 16*floor((-1 - a)/16))"
2219 "or (2 <= a <= 15 and b < a)) }" },
2220 { 1,
"{ [a] : a > 0 and ((16*floor((a)/16) < a and "
2221 "32*floor((a)/32) < a) or a <= 15) }" },
2222 { 1,
"{ [a, b, c, d] : (-a + d) mod 64 = 0 and a <= 8 and b <= 1 and "
2223 "10 - a <= c <= 3 and d >= 5 and 9 - 64b <= d <= 70;"
2224 "[a, b = 1, c, d] : (-a + d) mod 64 = 0 and a <= 8 and c >= 4 and "
2225 "10 - a <= c <= 5 and 5 <= d <= 73 - c }" },
2226 { 1,
"[n, m] -> { S_0[i] : (-n + i) mod 3 = 0 and m >= 3 + n and "
2227 "i >= n and 3*floor((2 + n + 2m)/3) <= n + 3m - i; "
2228 "S_0[n] : n <= m <= 2 + n }" },
2229 { 1,
"{ [a, b] : exists (e0: 0 <= a <= 1 and b >= 0 and "
2230 "2e0 >= -5 + a + 2b and 2e0 >= -1 + a + b and "
2232 "[a, b] : exists (e0: 0 <= a <= 1 and 2e0 >= -5 + a + 2b and "
2233 "2e0 >= -1 - a + b and 2e0 <= -a + b and "
2234 "2e0 < -a + 2b) }" },
2235 { 1,
"{ [i, j, i - 8j] : 8 <= i <= 63 and -7 + i <= 8j <= i; "
2236 "[i, 0, i] : 0 <= i <= 7 }" },
2237 { 1,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [1, 1] }" },
2238 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [0, 2] }" },
2239 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [-1, 3] }" },
2240 { 1,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [1, 1] }" },
2241 { 0,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [2, 1] }" },
2242 { 0,
"{ [a, c] : (2 + a) mod 4 = 0 or "
2243 "(c = 4 + a and 4 * floor((a)/4) = a and a >= 0 and a <= 4) or "
2244 "(c = 3 + a and 4 * floor((-1 + a)/4) = -1 + a and "
2245 "a > 0 and a <= 5) }" },
2246 { 1,
"{ [1, 0, 0]; [a, b, c] : -1 <= -a < b <= 0 and 2c > b }" },
2247 { 0,
"{ [j, a, l] : a mod 2 = 0 and j <= 29 and a >= 2 and "
2248 "2a <= -5 + j and 32j + 2a + 2 <= 4l < 33j; "
2249 "[j, 0, l] : 4 <= j <= 29 and -3 + 33j <= 4l <= 33j }" },
2250 { 0,
"{ [0:1, 0:1]; [0, 2:3] }" },
2251 { 1,
"{ [a] : (a = 0 or ((1 + a) mod 2 = 0 and 0 < a <= 15) or "
2252 "((a) mod 2 = 0 and 0 < a <= 15)) }" },
2253 { 1,
"{ rat: [0:2]; rat: [1:3] }" },
2254 { 1,
"{ [a = 1:14] : a mod 4 = 0 and 4*floor((1 + a)/4) <= a; [0] }" },
2255 { 0,
"{ [a = 4:6, b = 1:7, 8] : a mod 2 = 1 and b mod 2 = 1;"
2256 "[a = 1:7, 1:7, a] }" },
2257 { 1,
"{ [a] : a mod 2 = 0 and (a <= 3 or a >= 12 or 4 <= a <= 11) }" },
2258 { 1,
"{ [a] : 0 < a <= 341 or "
2259 "(0 < a <= 700 and 360*floor(a/360) >= -340 + a) }" },
2260 { 0,
"{ [a] : 0 < a <= 341 or "
2261 "(0 < a <= 701 and 360*floor(a/360) >= -340 + a) }" },
2272 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2273 "[[S_L309_IN[] -> T11[]] -> ce_imag2[1, o1]] : "
2274 "(y = 201 and o1 <= 239 and o1 >= 212) or "
2275 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 198 and y >= 3 and "
2276 "o1 <= 239 and o1 >= 212)) or "
2277 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 201 and y >= 3 and "
2278 "o1 <= 241 and o1 >= 240));"
2279 "[S_L220_OUT[] -> T7[]] -> "
2280 "[[S_L309_IN[] -> T11[]] -> ce_imag2[0, o1]] : "
2281 "(y = 2 and o1 <= 241 and o1 >= 212) or "
2282 "(exists (e0 = [(-2 + y)/3]: 3e0 = -2 + y and y <= 200 and "
2283 "y >= 5 and o1 <= 241 and o1 >= 212)) }";
2287 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2288 "[[S_L309_IN[] -> T11[]] -> ce_imag2[o0, o1]] : "
2289 "exists (e0 = [(-1 - y + o0)/3]: 3e0 = -1 - y + o0 and "
2290 "y <= 201 and o0 <= 2 and o1 >= 212 and o1 <= 241 and "
2291 "o0 >= 3 - y and o0 <= -2 + y and o0 >= 0) }";
2334 "coalesced set not equal to input",
2352 str1 =
"{ [x, y] : x, y >= 0 and x + 2y <= 1 and 2x + y <= 1 }";
2353 str2 =
"{ [x,0] : -1 <= x <= 1 and x mod 2 = 1 }";
2374 str =
"{ [a, b, a + b] : a >= 0 and b >= 0 and 0 < a + b }";
2407 const char *s1,
const char *s2)
2431 const char *s1, *s2;
2433 s1 =
"{ [a, b] : b <= 0 or a <= 1 }";
2434 s2 =
"{ [a, b] : -1 <= -a < b }";
2445 const char *s1, *s2;
2447 s1 =
"{ [a, b, c] : b <= 0 }";
2448 s2 =
"{ [a, b, c] : -1 <= -a < b and (c >= 0 or c < 0) }";
2459 const char *s1, *s2;
2461 s1 =
"{ [a, b, c] : c <= 0 }";
2462 s2 =
"{ [a, b, c] : 0 <= a <= b <= c or (0 <= b <= c and a > 0) }";
2478 str1 =
"{ [a, b, c=0:17] : a <= 7 and 2b <= 11 - a and "
2479 "c <= -7 + 2a and 2c >= - 3 + 3a - 2b }";
2480 str2 =
"{ [a, b, c] : c > -15a and c >= -7 + 2a and c < 0 and "
2481 "3c <= -5 + 5a - 3b and 2b >= 11 - a }";
2497 str1 =
"{ [a, b, c] : 2c <= -a and b >= -a and b <= 5 and "
2498 "6c > -7a and 11c >= -5a - b and a <= 3 }";
2499 str2 =
"{ [a, b, c] : 6c > -7a and b >= -a and b <= 5 and "
2500 "11c >= -5a - b and a >= 4 and 2b <= a and 2c <= -a }";
2551 "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and "
2552 "2 x - 3 y + 3 >= 0 }");
2554 "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }");
2556 "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }");
2571 "{ [1] -> [[0,0] -> [0,1]]; [2] -> [[0,0] -> [1,1]]; "
2572 " [1] -> [[0,1] -> [1,1]]; [1] -> [[2,2] -> [3,2]]; "
2573 " [2] -> [[2,2] -> [3,3]]; [1] -> [[3,2] -> [3,3]] }");
2593 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2594 "1 <= i and i < n and 1 <= j and j < n or "
2595 "i2 = i + 1 and j2 = j - 1 and "
2596 "1 <= i and i < n and 2 <= j and j <= n }");
2603 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2604 "1 <= i and i < n and 1 <= j and j < n or "
2605 "i2 = i + 1 and j2 = j - 1 and "
2606 "1 <= i and i < n and 2 <= j and j <= n }");
2610 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2611 "1 <= i and i < n and 1 <= j and j <= n and "
2612 "2 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2613 "i2 = i + k1 + k2 and j2 = j + k1 - k2 and "
2614 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1 )}");
2620 "[n] -> { [x] -> [y] : y = x + 1 and 0 <= x and x <= n and "
2621 " 0 <= y and y <= n }");
2624 "[n] -> { [x] -> [y] : y > x and 0 <= x and x <= n and "
2625 " 0 <= y and y <= n }");
2632 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j + 2 and "
2633 "1 <= i and i < n - 1 and 1 <= j and j < n - 1 or "
2634 "i2 = i + 2 and j2 = j - 2 and "
2635 "1 <= i and i < n - 1 and 3 <= j and j <= n }");
2639 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2640 "1 <= i and i < n - 1 and 1 <= j and j <= n and "
2641 "3 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2642 "i2 = i + 2 k1 + 2 k2 and j2 = j + 2 k1 - 2 k2 and "
2643 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1) }");
2650 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j and "
2651 "i <= 2 j - 3 and i <= n - 2 and j <= 2 i - 1 and "
2653 "i2 = i and j2 = j + 2 and i <= 2 j - 1 and i <= n and "
2654 "j <= 2 i - 3 and j <= n - 2 or "
2655 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2656 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2663 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2664 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2666 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2667 "j <= 2 i - 4 and j <= n - 3 or "
2668 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2669 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2676 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2677 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2679 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2680 "j <= 2 i - 4 and j <= n - 3 or "
2681 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2682 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2686 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k3,k : "
2687 "i <= 2 j - 1 and i <= n and j <= 2 i - 1 and "
2688 "j <= n and 3 + i + 2 j <= 3 n and "
2689 "3 + 2 i + j <= 3n and i2 <= 2 j2 -1 and i2 <= n and "
2690 "i2 <= 3 j2 - 4 and j2 <= 2 i2 -1 and j2 <= n and "
2691 "13 + 4 j2 <= 11 i2 and i2 = i + 3 k1 + k3 and "
2692 "j2 = j + 3 k2 + k3 and k1 >= 0 and k2 >= 0 and "
2693 "k3 >= 0 and k1 + k2 + k3 = k and k > 0) }");
2721 "{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and "
2722 "i2 = 1 and j2 = j or "
2723 "i = 0 and j = 0 and i2 = 0 and j2 = 1 }");
2729 "[m,n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 2 and "
2730 "1 <= i,i2 <= n and 1 <= j,j2 <= m or "
2731 "i2 = i + 1 and 3 <= j2 - j <= 4 and "
2732 "1 <= i,i2 <= n and 1 <= j,j2 <= m }");
2739 "[n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 1 and "
2740 "1 <= i,j,j+1 <= n or "
2741 "j = n and j2 = 1 and i2 = i + 1 and "
2742 "1 <= i,i+1 <= n }");
2746 "[n] -> { [i,j] -> [i2,j2] : 1 <= j < j2 <= n and "
2747 "1 <= i <= n and i = i2 or "
2748 "1 <= i < i2 <= n and 1 <= j <= n and "
2756 "[m,n] -> { [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 and "
2757 "1 <= x,y <= 10 or "
2758 "x2 = x + 1 and y2 = y and "
2759 "1 <= x <= 20 && 5 <= y <= 15 }");
2765 "[n] -> { [x] -> [y]: 1 <= n <= y - x <= 10 }");
2769 "[n] -> { [x] -> [y] : 1 <= n <= 10 and y >= n + x }");
2774 str =
"[n, m] -> { [i0, i1, i2, i3] -> [o0, o1, o2, o3] : "
2775 "i3 = 1 and o0 = i0 and o1 = -1 + i1 and o2 = -1 + i2 and "
2776 "o3 = -2 + i2 and i1 <= -1 + i0 and i1 >= 1 - m + i0 and "
2777 "i1 >= 2 and i1 <= n and i2 >= 3 and i2 <= 1 + n and i2 <= m }";
2786 str =
"{[0] -> [1]; [2] -> [3]}";
2795 str =
"[n] -> { [[i0, i1, 1, 0, i0] -> [i5, 1]] -> "
2796 "[[i0, -1 + i1, 2, 0, i0] -> [-1 + i5, 2]] : "
2797 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 2 and "
2798 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2799 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2800 "[[i0, i1, 2, 0, i0] -> [i5, 1]] -> "
2801 "[[i0, i1, 1, 0, i0] -> [-1 + i5, 2]] : "
2802 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 1 and "
2803 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2804 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2805 "[[i0, i1, 1, 0, i0] -> [i5, 2]] -> "
2806 "[[i0, -1 + i1, 2, 0, i0] -> [i5, 1]] : "
2807 "exists (e0 = [(3 - n)/3]: i1 >= 2 and i5 >= 1 and "
2808 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2809 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2810 "[[i0, i1, 2, 0, i0] -> [i5, 2]] -> "
2811 "[[i0, i1, 1, 0, i0] -> [i5, 1]] : "
2812 "exists (e0 = [(3 - n)/3]: i5 >= 1 and i1 >= 1 and "
2813 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2814 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n) }";
2878 "expecting non-empty result",
return -1);
2890 {
"{ [x] -> [y] : x <= y <= 10; [x] -> [5] : -8 <= x <= 8 }",
2891 "{ [x] -> [5] : 6 <= x <= 8; "
2892 "[x] -> [x] : x <= 5 or (9 <= x <= 10) }" },
2893 {
"{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }",
2894 "{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }" },
2895 {
"{ [x] -> [y] : x = 4y; [x] -> [y] : x = 2y }",
2896 "{ [x] -> [y] : (4y = x and x >= 0) or "
2897 "(exists (e0 = [(x)/4], e1 = [(-2 + x)/4]: 2y = x and "
2898 "4e1 = -2 + x and 4e0 <= -1 + x and 4e0 >= -3 + x)) or "
2899 "(exists (e0 = [(x)/4]: 2y = x and 4e0 = x and x <= -4)) }" },
2900 {
"{ T[a] -> S[b, c] : a = 4b-2c and c >= b }",
2901 "{ T[a] -> S[b, c] : 2b = a and 2c = a }" },
2903 {
"[K, N] -> { [x, y] -> [a, b] : K+2<=N<=K+4 and x>=4 and "
2904 "2N-6<=x<K+N and N-1<=a<=K+N-1 and N+b-6<=a<=2N-4 and "
2905 "b<=2N-3K+a and 3b<=4N-K+1 and b>=N and a>=x+1 }",
2906 "[K, N] -> { [x, y] -> [1 + x, N] : x >= -6 + 2N and "
2907 "x <= -5 + 2N and x >= -1 + 3K - N and x <= -2 + K + N and "
2909 {
"{ [i, k, j] -> [a, b, c, d] : 8*floor((b)/8) = b and k <= 255 and "
2910 "a <= 255 and c <= 255 and d <= 255 - j and "
2911 "255 - j <= 7d <= 7 - i and 240d <= 239 + a and "
2912 "247d <= 247 + k - j and 247d <= 247 + k - b and "
2913 "247d <= 247 + i and 248 - b <= 248d <= c and "
2914 "254d >= i - a + b and 254d >= -a + b and "
2915 "255d >= -i + a - b and 1792d >= -63736 + 257b }",
2917 "[-127762 + i + 502j, -62992 + 248j, 63240 - 248j, 255 - j] : "
2918 "k <= 255 and 7j >= 1778 + i and 246j >= 62738 - k and "
2919 "247j >= 62738 - i and 509j <= 129795 + i and "
2920 "742j >= 188724 - i; "
2921 "[0, k, j] -> [1, 0, 248, 1] : k <= 255 and 248 <= j <= 254, k }" },
2922 {
"{ [a] -> [b] : 0 <= b <= 255 and -509 + a <= 512b < a and "
2923 "16*floor((8 + b)/16) <= 7 + b; "
2925 "{ [a] -> [b = 1] : a >= 510 or a <= 0; "
2926 "[a] -> [b = 0] : 0 < a <= 509 }" },
2927 {
"{ rat: [i] : 1 <= 2i <= 9 }",
"{ rat: [i] : 2i = 1 }" },
2928 {
"{ rat: [i] : 1 <= 2i <= 9 or i >= 10 }",
"{ rat: [i] : 2i = 1 }" },
2929 {
"{ rat: [i] : 21 <= 2i <= 29 or i = 5 }",
"{ rat: [5] }" },
2943 str =
"[p0, p1] -> { [] -> [] : "
2944 "exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], "
2945 "e4 = [(p1)/3], e5 = [(p1 + 3e4)/3]: "
2946 "3e0 >= -2 + 2p1 and 3e0 >= p1 and 3e3 >= 1 - p1 + 3e0 and "
2947 "3e0 <= 2p1 and 3e3 >= -2 + p1 and 3e3 <= -1 + p1 and p1 >= 3 and "
2948 "3e5 >= -2 + 2p1 and 3e5 >= p1 and 3e5 <= -1 + p1 + 3e4 and "
2949 "3e4 <= p1 and 3e4 >= -2 + p1 and e3 <= -1 + e0 and "
2950 "3e4 >= 6 - p1 + 3e1 and 3e1 >= p1 and 3e5 >= -2 + p1 + 3e4 and "
2951 "2e4 >= 3 - p1 + 2e1 and e4 <= e1 and 3e3 <= 2 - p1 + 3e0 and "
2952 "e5 >= 1 + e1 and 3e4 >= 6 - 2p1 + 3e1 and "
2953 "p0 >= 2 and p1 >= p0 and 3e2 >= p1 and 3e4 >= 6 - p1 + 3e2 and "
2954 "e2 <= e1 and e3 >= 1 and e4 <= e2) }";
2961 str =
"[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and "
2962 "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }";
2965 str =
"[C] -> { [obj,a,b,c] : C = 8 }";
2983 "unexpected result",
return -1);
2986 str =
"{ [i] -> [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
2987 " 8i' <= i and 8i' >= -7 + i }";
2996 str =
"[i] -> { [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
2997 " 8i' <= i and 8i' >= -7 + i }";
3008 "unexpected difference between set and "
3009 "piecewise affine expression",
return -1);
3022 {
"{ [-1] -> [-1]; [1] -> [1] }",
"{ [1] }" },
3023 {
"{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] : "
3024 "0 <= a, b <= 100 and b mod 2 = 0}",
"{ [30] }" },
3025 {
"[N] -> { [i,j] -> A[i, -i, i + j] : 0 <= i,j <= N <= 10 }",
3026 "{ A[10, 0, 20] }" },
3027 {
"[N] -> {A[N, -N, 2N] : 0 <= N }",
"{ A[infty, 0, infty] }" },
3043 isl_multi_val_free(mv);
3067 str =
"{ [a, b] : a >= 2 and b >= 0 and 14 - a <= b <= 9 }";
3069 str =
"{ [a, b] : 1 <= a, b and a + b <= 1 }";
3100 str =
"{ [i, j, k] : 2j = i and 2k = i + 1 and i >= 2 }";
3152 const char *s1, *s2;
3154 s1 =
"[N=0:] -> { [1, 3N:] }";
3155 s2 =
"[N=0:] -> { [10, 2N:] }";
3173 {
"{ [a, b] : 0 <= a, b <= 100 and b mod 2 = 0}",
3174 "{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] }",
3205 "unexpected optimum",
return -1);
3224 void *dep_user,
void *
user)
3238 int depth = *(
int *)first;
3266 "result not as expected",
return -1);
3347 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3351 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3355 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3366 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10); "
3367 " [1,10,0] -> [2,5,0] }";
3369 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3377 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3381 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3385 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3396 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10) }";
3398 str =
"{ [0,5,0] -> [2,5,0]; [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3406 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3410 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3414 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3425 str =
"{ [0,i,0] -> [2,i,0] : 0 <= i <= 10; "
3426 " [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3428 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3436 str =
"{ [0,i,2] -> [i] : 0 <= i <= 10 }";
3440 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3444 str =
"{ [0,i,1] -> [5] : 0 <= i <= 10 }";
3455 str =
"{ [0,i,0] -> [0,i,2] : 0 <= i <= 10; "
3456 " [0,i,1] -> [0,5,2] : 0 <= i <= 5 }";
3458 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3466 str =
"{ [0,i,1] -> [i] : 0 <= i <= 10 }";
3470 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3474 str =
"{ [0,i,2] -> [5] : 0 <= i <= 10 }";
3485 str =
"{ [0,i,0] -> [0,i,1] : 0 <= i <= 10; "
3486 " [0,i,2] -> [0,5,1] : 0 <= i <= 4 }";
3488 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3498 str =
"{ [1,i,0,0,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3502 str =
"{ [0,i,0,j,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3513 str =
"{ [0,i,0,j,0] -> [1,i,0,0,0] : 0 <= i,j <= 10 }";
3515 str =
"{ [0,0,0,0,0] -> [0,0,0,0,0] : 1 = 0 }";
3536 str =
"{ S0[j] -> i[]; S1[j,i] -> i[]; S2[] -> i[]; S3[] -> i[] }";
3538 str =
"{ S0[j] -> [0,j,0,0] : 0 <= j < 10; "
3539 "S1[j,i] -> [0,j,1,i] : 0 <= j < i < 10; "
3540 "S2[] -> [1,0,0,0]; "
3541 "S3[] -> [-1,0,0,0] }";
3545 &must_dep, &may_dep, NULL, NULL);
3556 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }", 1 },
3557 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }", 0 },
3558 {
"{ [i] -> [3*floor(i/2) + 5*floor(i/3)] }", 1 },
3559 {
"{ S1[i] -> [i] : 0 <= i <= 9; S2[i] -> [i] : 0 <= i <= 9 }", 1 },
3560 {
"{ [i] -> S1[i] : 0 <= i <= 9; [i] -> S2[i] : 0 <= i <= 9 }", 0 },
3561 {
"{ A[i] -> [i]; B[i] -> [i]; B[i] -> [i + 1] }", 0 },
3562 {
"{ A[i] -> [i]; B[i] -> [i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3563 {
"{ A[i] -> [i]; B[i] -> A[i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3564 {
"{ A[i] -> [i]; B[i] -> [j] : i - 1 <= j <= i }", 0 },
3581 "map not detected as single valued",
return -1);
3584 "map detected as single valued",
return -1);
3594 {
"[N,M]->{[i,j] -> [i]}", 0 },
3595 {
"[N,M]->{[i,j] -> [i] : j=i}", 1 },
3596 {
"[N,M]->{[i,j] -> [i] : j=0}", 1 },
3597 {
"[N,M]->{[i,j] -> [i] : j=N}", 1 },
3598 {
"[N,M]->{[i,j] -> [j,i]}", 1 },
3599 {
"[N,M]->{[i,j] -> [i+j]}", 0 },
3600 {
"[N,M]->{[i,j] -> []}", 0 },
3601 {
"[N,M]->{[i,j] -> [i,j,N]}", 1 },
3602 {
"[N,M]->{[i,j] -> [2i]}", 0 },
3603 {
"[N,M]->{[i,j] -> [i,i]}", 0 },
3604 {
"[N,M]->{[i,j] -> [2i,i]}", 0 },
3605 {
"[N,M]->{[i,j] -> [2i,j]}", 1 },
3606 {
"[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1 },
3623 "map not detected as bijective",
return -1);
3626 "map detected as bijective",
return -1);
3640 {
"{ [i] -> i }",
"{ [k] : exists a : k = 2a }",
"{ [i] -> i }" },
3641 {
"{ [i] -> i + [ (i + [i/3])/2 ] }",
"{ [10] }",
"{ [i] -> 16 }" },
3642 {
"{ [i] -> ([(i)/2]) }",
"{ [k] : exists a : k = 2a+1 }",
3643 "{ [i] -> -1/2 + 1/2 * i }" },
3644 {
"{ [i] -> i^2 : i != 0 }",
"{ [i] : i != 0 }",
"{ [i] -> i^2 }" },
3645 {
"{ [i] -> i^2 : i > 0; [i] -> i^2 : i < 0 }",
"{ [i] : i != 0 }",
3690 str =
"{ [x=2:9, y] -> floor((x + 1)/4)^3 - floor((2x)/3)^2 }";
3712 str =
"{ [i,j,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3718 str =
"[j] -> { [i,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3730 str =
"{ [i] -> ([([i/2] + [i/2])/5]) }";
3732 str =
"{ [i] -> ([(2 * [i/2])/5]) }";
3741 str =
"{ [x] -> ([x/2] + [(x+1)/2]) }";
3743 str =
"{ [x] -> x }";
3752 str =
"{ [i] -> ([i/2]) : i >= 0; [i] -> ([i/3]) : i < 0 }";
3760 str =
"{ [a,b,a] -> (([(2*[a/3]+b)/5]) * ([(2*[a/3]+b)/5])) }";
3762 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3774 str =
"{ [a,b,c] -> (([(2*[a/3]+1)/5]) * ([(2*[c/3]+1)/5])) : b = 1 }";
3776 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3799 str =
"{ [U,V] -> 1/3 * U + 2/3 * V - [(U + 2V)/3] + [U/2] : "
3800 "U + 2V + 3 >= 0 and - U -2V >= 0 and - U + 10 >= 0 and "
3801 "U >= 0; [U,V] -> U^2 : U >= 100 }";
3821 str =
"{ [i] : 0 <= i <= 1 }";
3823 str =
"{ [1] -> [0] }";
3838 str =
"{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }";
3840 str =
"{ A[i]; B[i] }";
3875 { 0,
isl_fold_max,
"{ [m, n] -> -m * n }",
"{ max(infty) }" },
3877 "{ [a, b, c, d] -> max(0) }" },
3878 { 1,
isl_fold_max,
"{ [[x] -> [x]] -> 1 : exists a : x = 2 a }",
3879 "{ [x] -> max(1) : x mod 2 = 0 }" },
3880 { 1,
isl_fold_min,
"{ [x=5:10] -> (x + 2)^2 }",
"{ min(49) }" },
3883 "{ [m] -> max(m^2) : m >= 0 }" },
3884 { 1,
isl_fold_max,
"{ [[a=0:1] -> [b=0:1]] -> (floor((a + b)/2)) }",
3885 "{ [a=0:1] -> max(a) }" },
3898 str =
"{ [[c] -> [c]] }";
3900 str =
"{ [[a] -> [b]] -> 1 }";
3938 "incorrect bound result",
return -1);
3941 "bound unexpectedly not tight",
return -1);
3952#define EL_BASE basic_map
3958#define EL_BASE basic_set
3959#define SET_BASE union_set
3965#define SET_BASE union_set
3970#define EL_BASE basic_map
3977#define SET_BASE union_map
3984 if (test_get_list_basic_map_from_set(ctx,
"{ [0]; [2]; [3] }"))
3986 if (test_get_list_basic_set_from_union_set(ctx,
"{ A[0]; B[2]; B[3] }"))
3988 if (test_get_list_set_from_union_set(ctx,
"{ A[0]; A[2]; B[3] }"))
3990 if (test_get_list_basic_map_from_map(ctx,
3991 "{ [0] -> [0]; [2] -> [0]; [3] -> [0] }"))
3993 if (test_get_list_map_from_union_map(ctx,
3994 "{ A[0] -> [0]; A[2] -> [0]; B[3] -> [0] }"))
4006 str =
"{ [i0] : exists e0 : i0 = 4e0 }";
4029 str =
"{ [a, b, c, d] : "
4030 "exists (e0 = floor((a + d)/4), e1 = floor((d)/4), "
4031 "e2 = floor((-a - d + 4 *floor((a + d)/4))/10), "
4032 "e3 = floor((-d + 4*floor((d)/4))/10): "
4033 "10e2 = -a - 2c - d + 4e0 and 10e3 = -2c - d + 4e1 and "
4034 "b >= 0 and a <= 0 and b <= a) }";
4048 "set is not considered to be a subset of itself",
4060 "{ [i0, i1] : exists (e0 = [(i0 - i1)/16], e1: "
4061 "16e0 <= i0 - i1 and 16e0 >= -15 + i0 - i1 and "
4062 "16e1 <= i1 and 16e0 >= -i1 and 16e1 >= -i0 + i1) }", 1 },
4064 "{ [i] : exists (e0 = [(255i)/256], e1 = [(127i + 65e0)/191], "
4065 "e2 = [(3i + 61e1)/65], e3 = [(52i + 12e2)/61], "
4066 "e4 = [(2i + e3)/3], e5 = [(4i + e3)/4], e6 = [(8i + e3)/12]: "
4067 "3e4 = 2i + e3 and 4e5 = 4i + e3 and 12e6 = 8i + e3 and "
4068 "i <= 255 and 64e3 >= -45 + 67i and i >= 0 and "
4069 "256e0 <= 255i and 256e0 >= -255 + 255i and "
4070 "191e1 <= 127i + 65e0 and 191e1 >= -190 + 127i + 65e0 and "
4071 "65e2 <= 3i + 61e1 and 65e2 >= -64 + 3i + 61e1 and "
4072 "61e3 <= 52i + 12e2 and 61e3 >= -60 + 52i + 12e2) }", 1 },
4073 {
"{ [i] : 0 <= i <= 10 }",
"{ rat: [i] : 0 <= i <= 10 }", 1 },
4074 {
"{ rat: [i] : 0 <= i <= 10 }",
"{ [i] : 0 <= i <= 10 }", 0 },
4075 {
"{ rat: [0] }",
"{ [i] : 0 <= i <= 10 }", 1 },
4076 {
"{ rat: [(1)/2] }",
"{ [i] : 0 <= i <= 10 }", 0 },
4077 {
"{ [t, i] : (exists (e0 = [(2 + t)/4]: 4e0 <= 2 + t and "
4078 "4e0 >= -1 + t and i >= 57 and i <= 62 and "
4079 "4e0 <= 62 + t - i and 4e0 >= -61 + t + i and "
4080 "t >= 0 and t <= 511 and 4e0 <= -57 + t + i and "
4081 "4e0 >= 58 + t - i and i >= 58 + t and i >= 62 - t)) }",
4082 "{ [i0, i1] : (exists (e0 = [(4 + i0)/4]: 4e0 <= 62 + i0 - i1 and "
4083 "4e0 >= 1 + i0 and i0 >= 0 and i0 <= 511 and "
4084 "4e0 <= -57 + i0 + i1)) or "
4085 "(exists (e0 = [(2 + i0)/4]: 4e0 <= i0 and "
4086 "4e0 >= 58 + i0 - i1 and i0 >= 2 and i0 <= 511 and "
4087 "4e0 >= -61 + i0 + i1)) or "
4088 "(i1 <= 66 - i0 and i0 >= 2 and i1 >= 59 + i0) }", 1 },
4089 {
"[a, b] -> { : a = 0 and b = -1 }",
"[b, a] -> { : b >= -10 }", 1 },
4111 "incorrect subset result",
return -1);
4126 str =
"{ [a] : (exists (e0, e1, e2: 1056e1 <= 32 + a - 33e0 and "
4127 "1089e1 >= a - 33e0 and 1089e1 <= 1 + a - 33e0 and "
4128 "33e2 >= -a + 33e0 + 1056e1 and "
4129 "33e2 < -2a + 66e0 + 2112e1)) or a = 0 }";
4142 {
"{ A[i] -> B[i] }",
"{ A[i] }",
"{ }" },
4143 {
"{ A[i] -> B[i] }",
"{ B[i] }",
"{ A[i] -> B[i] }" },
4144 {
"{ A[i] -> B[i] }",
"{ A[i] : i > 0 }",
"{ A[i] -> B[i] : i <= 0 }" },
4173 "incorrect subtract domain result",
return -1);
4191 "incorrect subtract domain result",
return -1);
4212 if (n1 < 0 || n2 < 0)
4216 "number of constraints of empty set changed",
4231 for (i = 0; i < 100; ++i)
4257 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7] : 3i5 <= 2 - 2i0 and "
4258 "i0 >= -2 and i6 >= 1 + i3 and i7 >= 0 and 3i5 >= -2i0 and "
4259 "2i4 <= i2 and i6 >= 1 + 2i0 + 3i1 and i4 <= -1 and "
4260 "i6 >= 1 + 2i0 + 3i5 and i6 <= 2 + 2i0 + 3i5 and "
4261 "3i5 <= 2 - 2i0 - i2 + 3i4 and i6 <= 2 + 2i0 + 3i1 and "
4262 "i0 <= -1 and i7 <= i2 + i3 - 3i4 - i6 and "
4263 "3i5 >= -2i0 - i2 + 3i4 }";
4270 "failed to construct factorizer",
return -1);
4272 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
4273 "i12 <= 2 + i0 - i11 and 2i8 >= -i4 and i11 >= i1 and "
4274 "3i5 <= -i2 and 2i11 >= -i4 - 2i7 and i11 <= 3 + i0 + 3i9 and "
4275 "i11 <= -i4 - 2i7 and i12 >= -i10 and i2 >= -2 and "
4276 "i11 >= i1 + 3i10 and i11 >= 1 + i0 + 3i9 and "
4277 "i11 <= 1 - i4 - 2i8 and 6i6 <= 6 - i2 and 3i6 >= 1 - i2 and "
4278 "i11 <= 2 + i1 and i12 <= i4 + i11 and i12 >= i0 - i11 and "
4279 "3i5 >= -2 - i2 and i12 >= -1 + i4 + i11 and 3i3 <= 3 - i2 and "
4280 "9i6 <= 11 - i2 + 6i5 and 3i3 >= 1 - i2 and "
4281 "9i6 <= 5 - i2 + 6i3 and i12 <= -1 and i2 <= 0 }";
4288 "failed to construct factorizer",
return -1);
4295 int *injective =
user;
4300 if (*injective < 0 || !*injective)
4307 const char *r,
const char *s,
int tilable,
int parallel)
4324 int is_nonneg, is_parallel, is_tilable, is_injection, is_complete;
4339 &dep_raw, NULL, NULL, NULL);
4344 &dep_waw, &dep_war, NULL, NULL);
4392 for (i = 0; i < tilable; ++i)
4398 for (i = 0; i < parallel; ++i)
4407 for (i = 0; i < dim; ++i)
4419 if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 ||
4420 is_injection < 0 || is_complete < 0)
4424 "generated schedule incomplete",
return -1);
4427 "generated schedule not injective on each statement",
4431 "negative dependences in generated schedule",
4435 "generated schedule not as tilable as expected",
4439 "generated schedule not as parallel as expected",
4450 const char *
domain,
const char *validity,
const char *proximity,
4480 const char *
domain,
const char *validity,
const char *proximity)
4490 const char *validity,
const char *proximity)
4503 const char *validity,
const char *proximity,
const char *expected_sched)
4538 str =
"[N] -> { S0[i] : 0 <= i <= N; S1[i, j] : 0 <= i, j <= N }";
4577 str =
"[n] -> { C[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4578 "A[k] : k >= 1 and k <= -1 + n; "
4579 "B[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4580 "D[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k }";
4583 str =
"[n] -> { D[k, i] -> C[1 + k, k - i] : "
4584 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4585 "D[k, i] -> C[1 + k, i] : "
4586 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4587 "D[k, 0] -> C[1 + k, k] : k >= 1 and k <= -2 + n; "
4588 "D[k, 0] -> C[1 + k, 0] : k >= 1 and k <= -2 + n }";
4591 str =
"[n] -> { C[k, i] -> D[k, i] : "
4592 "0 <= i <= -1 + k and k <= -1 + n }";
4595 str =
"[n] -> { [D[k, i] -> a[]] -> [C[1 + k, k - i] -> b[]] : "
4596 "i <= -1 + k and i >= 1 and k <= -2 + n; "
4597 "[B[k, i] -> c[]] -> [B[k, 1 + i] -> c[]] : "
4598 "k <= -1 + n and i >= 0 and i <= -2 + k }";
4600 str =
"[n] -> { [B[k, i] -> e[]] -> [D[k, i] -> a[]] : "
4601 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4602 "[C[k, i] -> b[]] -> [D[k', -1 + k - i] -> a[]] : "
4603 "i >= 0 and i <= -1 + k and k <= -1 + n and "
4604 "k' <= -1 + n and k' >= k - i and k' >= 1 + k; "
4605 "[C[k, i] -> b[]] -> [D[k, -1 + k - i] -> a[]] : "
4606 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4607 "[B[k, i] -> c[]] -> [A[k'] -> d[]] : "
4608 "k <= -1 + n and i >= 0 and i <= -1 + k and "
4609 "k' >= 1 and k' <= -1 + n and k' >= 1 + k }";
4614 str =
"{ D[2,0] -> [] }";
4617 str =
"{ C[2,1] -> [] }";
4631 "conditional validity not respected",
return -1);
4654 str =
"{ A[0, i] : 0 <= i <= 10; B[1, i] : 0 <= i <= 10 }";
4657 str =
"{ B[1, i] -> A[0, i + 1] }";
4659 str =
"{ A[0, i] -> B[1, i - 1] }";
4679 "conditional validity constraints not satisfied",
4719 {
"{ S[i] : 0 <= 1 < 100; T[i] : 0 <= 1 < 100 }",
4720 "{ S[i] -> S[i+1] : 0 <= i < 99 }",
4721 "{ [S[i] -> B[]] -> [S[i+1] -> B[]] : 0 <= i < 99 }",
4722 "{ [S[i] -> A[]] -> [T[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4723 "[T[i] -> A[]] -> [S[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4724 "[S[i] -> A[]] -> [S[i+1] -> A[]] : 0 <= i < 99 }",
4728 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4729 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4730 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4731 "[n] -> { [S1[i,j] -> t[]] -> [S2[i,j] -> t[]] : 0 <= i,j < n;"
4732 "[S2[i,j] -> x1[]] -> [S2[i,j+1] -> x1[]] : "
4733 "0 <= i < n and 0 <= j < n - 1 }",
4734 "[n] -> { [S2[i,j] -> t[]] -> [S1[i,j'] -> t[]] : "
4735 "0 <= i < n and 0 <= j < j' < n;"
4736 "[S2[i,j] -> t[]] -> [S1[i',j'] -> t[]] : "
4737 "0 <= i < i' < n and 0 <= j,j' < n;"
4738 "[S2[i,j] -> x1[]] -> [S2[i,j'] -> x1[]] : "
4739 "0 <= i,j,j' < n and j < j' }",
4743 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4744 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4745 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4746 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4747 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4748 "[n] -> { S2[i,j] -> S1[i,j'] : 0 <= i < n and 0 <= j < j' < n;"
4749 "S2[i,j] -> S1[i',j'] : 0 <= i < i' < n and 0 <= j,j' < n;"
4750 "S2[i,j] -> S2[i,j'] : 0 <= i,j,j' < n and j < j' }",
4754 {
"{ S1[i,0] : 0 <= i <= 1; S2[i,j] : 0 <= i <= 1 and 1 <= j <= 2;"
4755 "S3[i,3] : 0 <= i <= 1 }",
4756 "{ S1[i,0] -> S2[i,1] : 0 <= i <= 1;"
4757 "S2[i,1] -> S2[i,2] : 0 <= i <= 1;"
4758 "S2[i,2] -> S3[i,3] : 0 <= i <= 1 }",
4759 "{ [S1[i,0]->t[]] -> [S2[i,1]->t[]] : 0 <= i <= 1;"
4760 "[S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4761 "[S2[i,2]->t[]] -> [S3[i,3]->t[]] : 0 <= i <= 1 }",
4762 "{ [S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4763 "[S2[0,j]->t[]] -> [S2[1,j']->t[]] : 1 <= j,j' <= 2;"
4764 "[S2[0,j]->t[]] -> [S1[1,0]->t[]] : 1 <= j <= 2;"
4765 "[S3[0,3]->t[]] -> [S2[1,j]->t[]] : 1 <= j <= 2;"
4766 "[S3[0,3]->t[]] -> [S1[1,0]->t[]] }",
4820 "unexpected number of members in outer band",
4835 const char *
domain, *dep;
4840 domain =
"{ B[i0, i1] : 0 <= i0 <= 1 and 0 <= i1 <= 11; "
4841 "A[i0] : 0 <= i0 <= 1 }";
4842 dep =
"{ B[i0, i1] -> B[i0, 1 + i1] : 0 <= i0 <= 1 and 0 <= i1 <= 10; "
4843 "B[0, 11] -> A[1]; A[i0] -> B[i0, 0] : 0 <= i0 <= 1 }";
4858 "dependences not strongly satisfied",
return -1);
4872 domain =
"[n] -> { A[] : n >= 0 }";
4873 context =
"[n] -> { : n < 0 }";
4891 const char *
domain, *dep;
4896 int treat_coalescing;
4898 domain =
"{ S[a, b] : 0 <= a <= 1 and 0 <= b <= 1 }";
4899 dep =
"{ S[a, b] -> S[a + b, 1 - b] }";
4924 const char *D, *V, *P, *
S;
4926 D =
"[n] -> { S[t,i,j,k] : 0 <= t,i,j,k < n }";
4927 V =
"[n] -> { S[t,i,j,k] -> S[t+1,a,b,c] : 0 <= t,i,j,k,a,b,c < n and "
4928 "-2 <= a-i <= 2 and -1 <= a-i + b-j <= 1 and "
4929 "-1 <= a-i + b-j + c-k <= 1 }";
4931 S =
"{ S[t,i,j,k] -> [t, 2t + i, t + i + j, 2t + k] }";
4938 const char *D, *W, *R, *V, *P, *
S;
4939 int max_coincidence;
4940 int treat_coalescing;
4947 D =
"[T,N] -> { S1[t,i] : 1 <= t <= T and 2 <= i <= N - 1 }";
4948 W =
"{ S1[t,i] -> a[t,i] }";
4949 R =
"{ S1[t,i] -> a[t-1,i]; S1[t,i] -> a[t-1,i-1]; "
4950 "S1[t,i] -> a[t-1,i+1] }";
4951 S =
"{ S1[t,i] -> [t,i] }";
4956 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and j >= 2 and "
4958 W =
"[N] -> { S_0[i, j] -> a[i, j] : i >= 0 and i <= -1 + N and "
4959 "j >= 2 and j <= -1 + N }";
4960 R =
"[N] -> { S_0[i, j] -> a[j, i] : i >= 0 and i <= -1 + N and "
4961 "j >= 2 and j <= -1 + N; "
4962 "S_0[i, j] -> a[i, -1 + j] : i >= 0 and i <= -1 + N and "
4963 "j >= 2 and j <= -1 + N }";
4964 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
4968 D =
"{ S1[i] : 0 <= i <= 10; S2[i] : 0 <= i <= 9 }";
4969 W =
"{ S1[i] -> a[i] }";
4970 R =
"{ S2[i] -> a[i+1] }";
4971 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4975 D =
"{ S1[i] : 0 <= i < 10; S2[i] : 0 <= i < 10 }";
4976 W =
"{ S1[i] -> a[i] }";
4977 R =
"{ S2[i] -> a[9-i] }";
4978 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4982 D =
"[N] -> { S1[i] : 0 <= i < N; S2[i] : 0 <= i < N }";
4983 W =
"{ S1[i] -> a[i] }";
4984 R =
"[N] -> { S2[i] -> a[N-1-i] }";
4985 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4989 D =
"{ S1[i] : 0 < i < 10; S2[i] : 0 <= i < 10 }";
4990 W =
"{ S1[i] -> a[i]; S2[i] -> b[i] }";
4991 R =
"{ S2[i] -> a[i]; S1[i] -> b[i-1] }";
4992 S =
"{ S1[i] -> [i,0]; S2[i] -> [i,1] }";
4996 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
4997 W =
"{ S1[i] -> a[0,i]; S2[i,j] -> a[i,j] }";
4998 R =
"{ S2[i,j] -> a[i-1,j] }";
4999 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
5003 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
5004 W =
"{ S1[i] -> a[i,0]; S2[i,j] -> a[i,j] }";
5005 R =
"{ S2[i,j] -> a[i,j-1] }";
5006 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
5010 D =
"[N] -> { S_0[]; S_1[i] : i >= 0 and i <= -1 + N; S_2[] }";
5011 W =
"[N] -> { S_0[] -> a[0]; S_2[] -> b[0]; "
5012 "S_1[i] -> a[1 + i] : i >= 0 and i <= -1 + N }";
5013 R =
"[N] -> { S_2[] -> a[N]; S_1[i] -> a[i] : i >= 0 and i <= -1 + N }";
5014 S =
"[N] -> { S_1[i] -> [1, i, 0]; S_2[] -> [2, 0, 1]; "
5015 "S_0[] -> [0, 0, 0] }";
5023 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i] : 1 <= i <= N; "
5024 "S3[i,j] : 1 <= i,j <= N; S4[i] : 1 <= i <= N }";
5025 W =
"{ S1[i] -> a[i,0]; S2[i] -> a[0,i]; S3[i,j] -> a[i,j] }";
5026 R =
"[N] -> { S3[i,j] -> a[i-1,j]; S3[i,j] -> a[i,j-1]; "
5027 "S4[i] -> a[i,N] }";
5028 S =
"{ S1[i] -> [0,i,0]; S2[i] -> [1,i,0]; S3[i,j] -> [2,i,j]; "
5029 "S4[i] -> [4,i,0] }";
5036 D =
"[N] -> { S_0[i, j] : i >= 1 and i <= N and j >= 1 and j <= N }";
5037 W =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
5039 R =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
5041 "S_0[i, j] -> a[i, j] : i >= 1 and i <= N and j >= 1 and "
5043 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
5047 D =
"[N] -> { S_0[t] : t >= 0 and t <= -1 + N; "
5048 " S_2[t] : t >= 0 and t <= -1 + N; "
5049 " S_1[t, i] : t >= 0 and t <= -1 + N and i >= 0 and "
5051 W =
"[N] -> { S_0[t] -> a[t, 0] : t >= 0 and t <= -1 + N; "
5052 " S_2[t] -> b[t] : t >= 0 and t <= -1 + N; "
5053 " S_1[t, i] -> a[t, 1 + i] : t >= 0 and t <= -1 + N and "
5054 "i >= 0 and i <= -1 + N }";
5055 R =
"[N] -> { S_1[t, i] -> a[t, i] : t >= 0 and t <= -1 + N and "
5056 "i >= 0 and i <= -1 + N; "
5057 " S_2[t] -> a[t, N] : t >= 0 and t <= -1 + N }";
5058 S =
"[N] -> { S_2[t] -> [0, t, 2]; S_1[t, i] -> [0, t, 1, i, 0]; "
5059 " S_0[t] -> [0, t, 0] }";
5068 D =
"[N] -> { S1[i,j] : 0 <= i,j < N; S2[i,j] : 0 <= i,j < N }";
5069 S =
"{ S1[i,j] -> [0,i,j]; S2[i,j] -> [1,i,j] }";
5073 D =
"[M, N] -> { S_1[i] : i >= 0 and i <= -1 + M; "
5074 "S_0[i, j] : i >= 0 and i <= -1 + M and j >= 0 and j <= -1 + N }";
5075 W =
"[M, N] -> { S_0[i, j] -> a[j] : i >= 0 and i <= -1 + M and "
5076 "j >= 0 and j <= -1 + N; "
5077 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5078 R =
"[M, N] -> { S_0[i, j] -> a[0] : i >= 0 and i <= -1 + M and "
5079 "j >= 0 and j <= -1 + N; "
5080 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5081 S =
"[M, N] -> { S_1[i] -> [1, i, 0]; S_0[i, j] -> [0, i, 0, j, 0] }";
5085 D =
"{ S_0[i] : i >= 0 }";
5086 W =
"{ S_0[i] -> a[i] : i >= 0 }";
5087 R =
"{ S_0[i] -> a[0] : i >= 0 }";
5088 S =
"{ S_0[i] -> [0, i, 0] }";
5092 D =
"{ S_0[i] : i >= 0; S_1[i] : i >= 0 }";
5093 W =
"{ S_0[i] -> a[i] : i >= 0; S_1[i] -> b[i] : i >= 0 }";
5094 R =
"{ S_0[i] -> b[0] : i >= 0; S_1[i] -> a[i] : i >= 0 }";
5095 S =
"{ S_1[i] -> [0, i, 1]; S_0[i] -> [0, i, 0] }";
5099 D =
"[n] -> { S_0[j, k] : j <= -1 + n and j >= 0 and "
5100 "k <= -1 + n and k >= 0 }";
5101 W =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " "k <= -1 + n and k >= 0 }";
5102 R =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and "
5103 "k <= -1 + n and k >= 0; "
5104 "S_0[j, k] -> B[k] : j <= -1 + n and j >= 0 and "
5105 "k <= -1 + n and k >= 0; "
5106 "S_0[j, k] -> A[k] : j <= -1 + n and j >= 0 and "
5107 "k <= -1 + n and k >= 0 }";
5108 S =
"[n] -> { S_0[j, k] -> [2, j, k] }";
5114 D =
"{Stmt_for_body24[i0, i1, i2, i3]:"
5115 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 6 and i2 >= 2 and "
5116 "i2 <= 6 - i1 and i3 >= 0 and i3 <= -1 + i2;"
5117 "Stmt_for_body24[i0, i1, 1, 0]:"
5118 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 5;"
5119 "Stmt_for_body7[i0, i1, i2]:"
5120 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 7 and i2 >= 0 and "
5123 V =
"{Stmt_for_body24[0, i1, i2, i3] -> "
5124 "Stmt_for_body24[1, i1, i2, i3]:"
5125 "i3 >= 0 and i3 <= -1 + i2 and i1 >= 0 and i2 <= 6 - i1 and "
5127 "Stmt_for_body24[0, i1, i2, i3] -> "
5128 "Stmt_for_body7[1, 1 + i1 + i3, 1 + i1 + i2]:"
5129 "i3 <= -1 + i2 and i2 <= 6 - i1 and i2 >= 1 and i1 >= 0 and "
5131 "Stmt_for_body24[0, i1, i2, i3] ->"
5132 "Stmt_for_body7[1, i1, 1 + i1 + i3]:"
5133 "i3 >= 0 and i2 <= 6 - i1 and i1 >= 0 and i3 <= -1 + i2;"
5134 "Stmt_for_body7[0, i1, i2] -> Stmt_for_body7[1, i1, i2]:"
5135 "(i2 >= 1 + i1 and i2 <= 6 and i1 >= 0 and i1 <= 4) or "
5136 "(i2 >= 3 and i2 <= 7 and i1 >= 1 and i2 >= 1 + i1) or "
5137 "(i2 >= 0 and i2 <= i1 and i2 >= -7 + i1 and i1 <= 7);"
5138 "Stmt_for_body7[0, i1, 1 + i1] -> Stmt_for_body7[1, i1, 1 + i1]:"
5139 "i1 <= 6 and i1 >= 0;"
5140 "Stmt_for_body7[0, 0, 7] -> Stmt_for_body7[1, 0, 7];"
5141 "Stmt_for_body7[i0, i1, i2] -> "
5142 "Stmt_for_body24[i0, o1, -1 + i2 - o1, -1 + i1 - o1]:"
5143 "i0 >= 0 and i0 <= 1 and o1 >= 0 and i2 >= 1 + i1 and "
5144 "o1 <= -2 + i2 and i2 <= 7 and o1 <= -1 + i1;"
5145 "Stmt_for_body7[i0, i1, i2] -> "
5146 "Stmt_for_body24[i0, i1, o2, -1 - i1 + i2]:"
5147 "i0 >= 0 and i0 <= 1 and i1 >= 0 and o2 >= -i1 + i2 and "
5148 "o2 >= 1 and o2 <= 6 - i1 and i2 >= 1 + i1 }";
5157 D =
"{ S_0[i, j] : i >= 1 and i <= 10 and j >= 1 and j <= 8 }";
5158 V =
"{ S_0[i, j] -> S_0[i, 1 + j] : i >= 1 and i <= 10 and "
5159 "j >= 1 and j <= 7;"
5160 "S_0[i, j] -> S_0[1 + i, j] : i >= 1 and i <= 9 and "
5161 "j >= 1 and j <= 8 }";
5163 S =
"{ S_0[i, j] -> [i + j, i] }";
5170 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and "
5171 "j >= 0 and j <= -1 + i }";
5172 V =
"[N] -> { S_0[i, j] -> S_0[i, 1 + j] : j <= -2 + i and "
5173 "i <= -1 + N and j >= 0;"
5174 "S_0[i, -1 + i] -> S_0[1 + i, 0] : i >= 1 and "
5177 S =
"{ S_0[i, j] -> [i, j] }";
5184 D =
"{ S[i,j] : 0 <= i <= 10 }";
5186 P =
"{ S[i,j] -> S[i+1,j] : 0 <= i,j <= 10 }";
5187 S =
"{ S[i, j] -> [j, i] }";
5195 D =
"{ A[a]; B[] }";
5197 P =
"{ A[a] -> B[] }";
5207 D =
"[N] -> { S0[i, j] : i >= 0 and i <= N and j >= 0 and j <= N }";
5208 V =
"[N] -> { S0[i0, -1 + N] -> S0[2 + i0, 0] : i0 >= 0 and "
5210 "S0[i0, i1] -> S0[i0, 1 + i1] : i0 >= 0 and "
5211 "i0 <= N and i1 >= 0 and i1 <= -1 + N }";
5221 D =
"{ S1[j] : 0 <= j <= 1; S0[]; S2[k] : 0 <= k <= 1 }";
5222 V =
"{ S0[] -> S1[j] : 0 <= j <= 1; S2[0] -> S0[];"
5223 "S1[j] -> S2[1] : 0 <= j <= 1 }";
5287 if (
test == injective)
5291 "map not detected as injective",
return -1);
5294 "map detected as injective",
return -1);
5318 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[1,0]}";
5321 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[0,0]}";
5333#define BASE pw_multi_aff
5337#define BASE union_pw_aff
5357 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5360 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5361 ok = union_pw_aff_check_plain_equal(upa,
str);
5367 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5370 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5371 ok = union_pw_aff_check_plain_equal(upa,
str);
5395 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [i] }",
5396 "{ [i] -> [2i] }" },
5397 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [i] }",
5399 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [2] }",
5400 "{ [i] -> [2i] }" },
5401 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [i] }",
5402 "{ [i] -> [2i] }" },
5403 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [2] }",
5404 "{ [i] -> [i/2] }" },
5405 {
"{ [i] -> [2i] }",
'/',
"{ [i] -> [2] }",
5407 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [NaN] }",
5408 "{ [i] -> [NaN] }" },
5409 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [NaN] }",
5410 "{ [i] -> [NaN] }" },
5411 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [NaN] }",
5412 "{ [i] -> [NaN] }" },
5413 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [NaN] }",
5414 "{ [i] -> [NaN] }" },
5415 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [NaN] }",
5416 "{ [i] -> [NaN] }" },
5417 {
"{ [i] -> [2] }",
'/',
"{ [i] -> [NaN] }",
5418 "{ [i] -> [NaN] }" },
5419 {
"{ [i] -> [NaN] }",
'+',
"{ [i] -> [i] }",
5420 "{ [i] -> [NaN] }" },
5421 {
"{ [i] -> [NaN] }",
'-',
"{ [i] -> [i] }",
5422 "{ [i] -> [NaN] }" },
5423 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [2] }",
5424 "{ [i] -> [NaN] }" },
5425 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [i] }",
5426 "{ [i] -> [NaN] }" },
5427 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [2] }",
5428 "{ [i] -> [NaN] }" },
5429 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [i] }",
5430 "{ [i] -> [NaN] }" },
5431 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [0] }",
5432 "{ [i] -> [NaN] }" },
5450 aff1 =
fn(aff1, aff2);
5461 "unexpected result",
return -1);
5485 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [i] }",
5487 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [i] }",
5489 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [0] }",
5490 "{ [i] -> [i] : i <= 0; [i] -> [0] : i > 0 }" },
5491 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [0] }",
5492 "{ [i] -> [i] : i >= 0; [i] -> [0] : i < 0 }" },
5493 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [NaN] }",
5494 "{ [i] -> [NaN] }" },
5495 {
"{ [i] -> [NaN] }",
'm',
"{ [i] -> [i] }",
5496 "{ [i] -> [NaN] }" },
5522 "unexpected result",
return -1);
5546 "{ A[] -> [0]; B[0] -> [1, NaN, 5] }",
5549 "{ A[] -> [0]; B[0] -> [1] }",
5552 "{ A[] -> [0]; B[x] -> [1] : x mod 2 = 0 }",
5555 "{ A[] -> [0]; B[x] -> [x // 2] }",
5558 "{ A[i] -> [i // 2]; B[0] -> [1] }",
5597 "{ B[x] -> [2] : x >= 0 }",
"{ B[0] -> [3] }" },
5599 "{ B[x] -> [2] : x >= 0 }",
5600 "{ A[] -> [0]; B[0] -> [3]; B[x] -> [2] : x >= 1 }" },
5602 "{ A[] -> B[0]; C[x] -> B[1] : x < 10; C[y] -> B[2] : y >= 10 }",
5603 "{ D[i] -> A[] : i < 0; D[i] -> C[i + 5] : i >= 0 }",
5604 "{ D[i] -> B[0] : i < 0; D[i] -> B[1] : 0 <= i < 5; "
5605 "D[i] -> B[2] : i >= 5 }" },
5607 "{ B[x] -> C[2] : x > 0 }",
5608 "{ B[x] -> A[1] : x <= 0; B[x] -> C[2] : x > 0 }" },
5610 "{ B[x] -> A[2] : x >= 0 }",
5611 "{ B[x] -> A[1] : x < 0; B[x] -> A[2] : x > 0; B[0] -> A[3] }" },
5614 "{ B[x] -> C[x + 2] }",
5615 "{ D[y] -> B[2y] }",
5619 "{ [A[x] -> B[x + 1]] -> C[x + 2] }",
5620 "{ D[y] -> B[2y] }",
5624 "{ [A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5625 "{ D[y] -> A[2y] }",
5626 "{ [D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5629 "{ T[A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5630 "{ D[y] -> A[2y] }",
5631 "{ T[D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5658 "unexpected result",
return -1);
5672 "{ B[x] -> C[2] : x >= 0 }" },
5687 for (i = 0; i <
n; ++i) {
5700 "operation not expected to succeed",
return -1);
5720 "{ A[i] -> B[i] }",
"{ B[0] }",
5723 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5724 "{ [A[1] -> B[1]] -> C[2] }" },
5726 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5727 "{ [A[0] -> B[0]] -> C[1] }" },
5729 "{ [A[i] -> B[i]] -> C[i + 1] }",
"[N] -> { B[N] }",
5730 "[N] -> { [A[N] -> B[N]] -> C[N + 1] }" },
5732 "[M] -> { [A[M] -> B[M]] -> C[M + 1] }",
"[N] -> { B[N] }",
5733 "[N, M] -> { [A[N] -> B[N]] -> C[N + 1] : N = M }" },
5735 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[]; [B[] -> A[]] -> E[] }",
5737 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[] }" },
5781 { &isl_multi_pw_aff_range_factor_domain,
5782 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5783 "{ A[x] -> B[(1 : x >= 5)] }" },
5784 { &isl_multi_pw_aff_range_factor_range,
5785 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5786 "{ A[y] -> C[(2 : y <= 10)] }" },
5787 { &isl_multi_pw_aff_range_factor_domain,
5788 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5789 "{ A[x] -> B[(1 : x >= 5)] }" },
5790 { &isl_multi_pw_aff_range_factor_range,
5791 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5792 "{ A[y] -> C[] }" },
5793 { &isl_multi_pw_aff_range_factor_domain,
5794 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5795 "{ A[x] -> B[] }" },
5796 { &isl_multi_pw_aff_range_factor_range,
5797 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5798 "{ A[y] -> C[(2 : y <= 10)] }" },
5799 { &isl_multi_pw_aff_range_factor_domain,
5800 "{ A[x] -> [B[] -> C[]] }",
5801 "{ A[x] -> B[] }" },
5802 { &isl_multi_pw_aff_range_factor_range,
5803 "{ A[x] -> [B[] -> C[]] }",
5804 "{ A[y] -> C[] }" },
5805 { &isl_multi_pw_aff_factor_range,
5808 { &isl_multi_pw_aff_range_factor_domain,
5809 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5810 "{ A[x] -> B[] : x >= 0 }" },
5811 { &isl_multi_pw_aff_range_factor_range,
5812 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5813 "{ A[y] -> C[] : y >= 0 }" },
5814 { &isl_multi_pw_aff_factor_range,
5815 "[N] -> { [B[] -> C[]] : N >= 0 }",
5816 "[N] -> { C[] : N >= 0 }" },
5831 ok = isl_multi_pw_aff_plain_is_equal(mpa,
res);
5832 isl_multi_pw_aff_free(mpa);
5833 isl_multi_pw_aff_free(
res);
5838 "unexpected result",
return -1);
5857 { &isl_multi_pw_aff_add,
"{ A[] -> [1] }",
"{ A[] -> [2] }",
5859 { &isl_multi_pw_aff_add,
"{ A[x] -> [(1 : x >= 5)] }",
5860 "{ A[x] -> [(x : x <= 10)] }",
5861 "{ A[x] -> [(1 + x : 5 <= x <= 10)] }" },
5862 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
5863 "{ A[x] -> [] : x <= 10 }",
5864 "{ A[x] -> [] : 5 <= x <= 10 }" },
5865 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
5866 "[N] -> { A[x] -> [] : x <= N }",
5867 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
5868 { &isl_multi_pw_aff_add,
5869 "[N] -> { A[x] -> [] : x <= N }",
5870 "{ A[x] -> [] : x >= 5 }",
5871 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
5872 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5873 "{ A[y] -> C[(2 : y <= 10)] }",
5874 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
5875 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
5876 "{ A[y] -> C[2] : y <= 10 }",
5877 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
5878 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
5879 "[N] -> { A[y] -> C[2] : y <= N }",
5880 "[N] -> { A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= N)]] }" },
5881 { &isl_multi_pw_aff_range_product,
"[N] -> { A[x] -> B[1] : x >= N }",
5882 "{ A[y] -> C[2] : y <= 10 }",
5883 "[N] -> { A[x] -> [B[(1 : x >= N)] -> C[(2 : x <= 10)]] }" },
5884 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
5885 "{ A[] -> [B[1] -> C[2]] }" },
5886 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
5887 "{ A[] -> [B[] -> C[]] }" },
5888 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5889 "{ A[y] -> C[] : y <= 10 }",
5890 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] : x <= 10 }" },
5891 { &isl_multi_pw_aff_range_product,
"{ A[y] -> C[] : y <= 10 }",
5892 "{ A[x] -> B[(1 : x >= 5)] }",
5893 "{ A[x] -> [C[] -> B[(1 : x >= 5)]] : x <= 10 }" },
5894 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5895 "{ A[y] -> C[(2 : y <= 10)] }",
5896 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[(2 : y <= 10)]] }" },
5897 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5898 "{ A[y] -> C[] : y <= 10 }",
5899 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= 10 }" },
5900 { &isl_multi_pw_aff_product,
"{ A[y] -> C[] : y <= 10 }",
5901 "{ A[x] -> B[(1 : x >= 5)] }",
5902 "{ [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= 10 }" },
5903 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5904 "[N] -> { A[y] -> C[] : y <= N }",
5905 "[N] -> { [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= N }" },
5906 { &isl_multi_pw_aff_product,
"[N] -> { A[y] -> C[] : y <= N }",
5907 "{ A[x] -> B[(1 : x >= 5)] }",
5908 "[N] -> { [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= N }" },
5909 { &isl_multi_pw_aff_product,
"{ A[x] -> B[] : x >= 5 }",
5910 "{ A[y] -> C[] : y <= 10 }",
5911 "{ [A[x] -> A[y]] -> [B[] -> C[]] : x >= 5 and y <= 10 }" },
5912 { &isl_multi_pw_aff_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
5913 "{ [A[] -> A[]] -> [B[1] -> C[2]] }" },
5914 { &isl_multi_pw_aff_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
5915 "{ [A[] -> A[]] -> [B[] -> C[]] }" },
5917 "{ B[i,j] -> C[i + 2j] }",
"{ A[a,b] -> B[b,a] }",
5918 "{ A[a,b] -> C[b + 2a] }" },
5920 "{ B[i,j] -> C[i + 2j] }",
5921 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5922 "{ A[a,b] -> C[(b + 2a : b > a)] }" },
5924 "{ B[i,j] -> C[(i + 2j : j > 4)] }",
5925 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5926 "{ A[a,b] -> C[(b + 2a : b > a > 4)] }" },
5928 "{ B[i,j] -> C[] }",
5929 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5930 "{ A[a,b] -> C[] }" },
5932 "{ B[i,j] -> C[] : i > j }",
5933 "{ A[a,b] -> B[b,a] }",
5934 "{ A[a,b] -> C[] : b > a }" },
5936 "{ B[i,j] -> C[] : j > 5 }",
5937 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5938 "{ A[a,b] -> C[] : b > a > 5 }" },
5940 "[N] -> { B[i,j] -> C[] : j > N }",
5941 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5942 "[N] -> { A[a,b] -> C[] : b > a > N }" },
5944 "[M,N] -> { B[] -> C[] : N > 5 }",
5945 "[M,N] -> { A[] -> B[] : M > N }",
5946 "[M,N] -> { A[] -> C[] : M > N > 5 }" },
5965 ok = isl_multi_pw_aff_plain_is_equal(mpa1,
res);
5966 isl_multi_pw_aff_free(mpa1);
5967 isl_multi_pw_aff_free(
res);
5972 "unexpected result",
return -1);
5990 { &isl_multi_union_pw_aff_factor_range,
5991 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]",
5992 "C[{ A[] -> [2] }]" },
5993 { &isl_multi_union_pw_aff_factor_range,
5994 "[B[] -> C[{ A[] -> [2] }]]",
5995 "C[{ A[] -> [2] }]" },
5996 { &isl_multi_union_pw_aff_factor_range,
5997 "[B[{ A[] -> [1] }] -> C[]]",
5999 { &isl_multi_union_pw_aff_factor_range,
6002 { &isl_multi_union_pw_aff_factor_range,
6003 "([B[] -> C[]] : { A[x] : x >= 0 })",
6004 "(C[] : { A[x] : x >= 0 })" },
6005 { &isl_multi_union_pw_aff_factor_range,
6006 "[N] -> ([B[] -> C[]] : { A[x] : x <= N })",
6007 "[N] -> (C[] : { A[x] : x <= N })" },
6008 { &isl_multi_union_pw_aff_factor_range,
6009 "[N] -> ([B[] -> C[]] : { : N >= 0 })",
6010 "[N] -> (C[] : { : N >= 0 })" },
6028 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6029 isl_multi_union_pw_aff_free(
mupa);
6030 isl_multi_union_pw_aff_free(
res);
6035 "unexpected result",
return -1);
6055 { &isl_multi_union_pw_aff_add,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
6056 "[{ A[] -> [3] }]" },
6057 { &isl_multi_union_pw_aff_sub,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
6058 "[{ A[] -> [-1] }]" },
6059 { &isl_multi_union_pw_aff_add,
6060 "[{ A[] -> [1]; B[] -> [4] }]",
6061 "[{ A[] -> [2]; C[] -> [5] }]",
6062 "[{ A[] -> [3] }]" },
6064 "[{ A[] -> [1]; B[] -> [4] }]",
6065 "[{ A[] -> [2]; C[] -> [5] }]",
6066 "[{ A[] -> [3]; B[] -> [4]; C[] -> [5] }]" },
6067 { &isl_multi_union_pw_aff_add,
"[{ A[x] -> [(1)] : x >= 5 }]",
6068 "[{ A[x] -> [(x)] : x <= 10 }]",
6069 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10 }]" },
6070 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6071 "([] : { A[x] : x <= 10 })",
6072 "([] : { A[x] : 5 <= x <= 10 })" },
6073 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6074 "[N] -> ([] : { A[x] : x <= N })",
6075 "[N] -> ([] : { A[x] : 5 <= x <= N })" },
6076 { &isl_multi_union_pw_aff_add,
"[N] -> ([] : { A[x] : x >= N })",
6077 "([] : { A[x] : x <= 10 })",
6078 "[N] -> ([] : { A[x] : N <= x <= 10 })" },
6080 "[{ A[x] -> [(x)] : x <= 10 }]",
6081 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10; "
6082 "A[x] -> [(1)] : x > 10; A[x] -> [(x)] : x < 5 }]" },
6084 "([] : { A[x] : x <= 10 })",
6085 "([] : { A[x] })" },
6087 "[N] -> ([] : { A[x] : x >= N })",
6088 "[N] -> ([] : { A[x] : x >= 0 or x >= N })" },
6090 "[N] -> ([] : { A[] : N >= 0})",
6091 "[N] -> ([] : { A[] : N <= 0})",
6092 "[N] -> ([] : { A[] })" },
6094 "[N] -> ([] : { A[] })",
6095 "[N] -> ([] : { : })",
6096 "[N] -> ([] : { : })" },
6098 "[N] -> ([] : { : })",
6099 "[N] -> ([] : { A[] })",
6100 "[N] -> ([] : { : })" },
6102 "[N] -> ([] : { : N >= 0})",
6103 "[N] -> ([] : { : N <= 0})",
6104 "[N] -> ([] : { : })" },
6105 { &isl_multi_union_pw_aff_range_product,
6106 "B[{ A[] -> [1] }]",
6107 "C[{ A[] -> [2] }]",
6108 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]" },
6109 { &isl_multi_union_pw_aff_range_product,
6110 "(B[] : { A[x] : x >= 5 })",
6111 "(C[] : { A[x] : x <= 10 })",
6112 "([B[] -> C[]] : { A[x] : 5 <= x <= 10 })" },
6113 { &isl_multi_union_pw_aff_range_product,
6114 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6115 "(C[] : { A[x] : x <= 10 })",
6116 "[B[{ A[x] -> [x + 1] : 5 <= x <= 10 }] -> C[]]" },
6117 { &isl_multi_union_pw_aff_range_product,
6118 "(C[] : { A[x] : x <= 10 })",
6119 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6120 "[C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= 10 }]]" },
6121 { &isl_multi_union_pw_aff_range_product,
6122 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6123 "[N] -> (C[] : { A[x] : x <= N })",
6124 "[N] -> [B[{ A[x] -> [x + 1] : 5 <= x <= N }] -> C[]]" },
6125 { &isl_multi_union_pw_aff_range_product,
6126 "[N] -> (C[] : { A[x] : x <= N })",
6127 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6128 "[N] -> [C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= N }]]" },
6129 { &isl_multi_union_pw_aff_range_product,
6130 "B[{ A[] -> [1]; D[] -> [3] }]",
6131 "C[{ A[] -> [2] }]",
6132 "[B[{ A[] -> [1]; D[] -> [3] }] -> C[{ A[] -> [2] }]]" },
6133 { &isl_multi_union_pw_aff_range_product,
6136 "([B[] -> C[]] : { A[x] })" },
6137 { &isl_multi_union_pw_aff_range_product,
6140 "([B[] -> C[]] : { A[x] })" },
6160 ok = isl_multi_union_pw_aff_plain_is_equal(mupa1,
res);
6161 isl_multi_union_pw_aff_free(mupa1);
6162 isl_multi_union_pw_aff_free(
res);
6167 "unexpected result",
return -1);
6188 "C[{ B[i,j] -> [i + 2j] }]",
"{ C[1] }",
6189 "C[{ B[i,j] -> [i + 2j] : i + 2j = 1 }]" },
6191 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[N] }",
6192 "[N] -> C[{ B[i,j] -> [i + 2j] : i + 2j = N }]" },
6194 "[N] -> C[{ B[i,j] -> [i + 2j + N] }]",
"{ C[1] }",
6195 "[N] -> C[{ B[i,j] -> [i + 2j + N] : i + 2j + N = 1 }]" },
6197 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[x] : N >= 0 }",
6198 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0 }]" },
6200 "C[]",
"{ C[] }",
"C[]" },
6202 "[N] -> (C[] : { : N >= 0 })",
6204 "[N] -> (C[] : { : N >= 0 })" },
6206 "(C[] : { A[a,b] })",
6208 "(C[] : { A[a,b] })" },
6210 "[N] -> (C[] : { A[a,b] : a,b <= N })",
6212 "[N] -> (C[] : { A[a,b] : a,b <= N })" },
6215 "[N] -> { C[] : N >= 0 }",
6216 "[N] -> (C[] : { : N >= 0 })" },
6218 "(C[] : { A[a,b] })",
6219 "[N] -> { C[] : N >= 0 }",
6220 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6222 "[N] -> (C[] : { : N >= 0 })",
6223 "[N] -> { C[] : N < 1024 }",
6224 "[N] -> (C[] : { : 0 <= N < 1024 })" },
6226 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { : N >= 0 }",
6227 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0}]" },
6229 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"[N] -> { : N >= 0 }",
6230 "[N] -> C[{ B[i,j] -> [i + 2j] : 0 <= N <= 256 }]" },
6232 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"{ : }",
6233 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]" },
6235 "C[]",
"[N] -> { : N >= 0 }",
6236 "[N] -> (C[] : { : N >= 0 })" },
6238 "(C[] : { A[a,b] })",
"[N] -> { : N >= 0 }",
6239 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6241 "[N] -> (C[] : { A[a,N] })",
"{ : }",
6242 "[N] -> (C[] : { A[a,N] })" },
6244 "[N] -> (C[] : { A[a,b] : N <= 256 })",
"[N] -> { : N >= 0 }",
6245 "[N] -> (C[] : { A[a,b] : 0 <= N <= 256 })" },
6265 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6266 isl_multi_union_pw_aff_free(
mupa);
6267 isl_multi_union_pw_aff_free(
res);
6272 "unexpected result",
return -1);
6293 "C[{ B[i,j] -> [i + 2j] }]",
"{ B[i,i] }",
6294 "C[{ B[i,i] -> [3i] }]" },
6296 "(C[] : { B[i,j] })",
"{ B[i,i] }",
6297 "(C[] : { B[i,i] })" },
6299 "(C[] : { B[i,j] })",
"[N] -> { B[N,N] }",
6300 "[N] -> (C[] : { B[N,N] })" },
6302 "C[]",
"{ B[i,i] }",
6303 "(C[] : { B[i,i] })" },
6305 "[N] -> (C[] : { : N >= 0 })",
"{ B[i,i] }",
6306 "[N] -> (C[] : { B[i,i] : N >= 0 })" },
6327 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6328 isl_multi_union_pw_aff_free(
mupa);
6329 isl_multi_union_pw_aff_free(
res);
6334 "unexpected result",
return -1);
6355 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6356 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6357 "{ C[a,b] -> D[b,a] }",
6358 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6359 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6361 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6362 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6363 "{ C[a,b] -> D[b,a] }",
6364 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6365 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6367 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6368 "[N] -> { C[a] -> D[a + N] }",
6369 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }] " },
6375 "[N] -> (C[] : { : N >= 0 })",
6377 "[N] -> (D[] : { : N >= 0 })" },
6380 "[N] -> { C[] -> D[N] }",
6381 "[N] -> D[{ [N] }]" },
6383 "(C[] : { A[i,j] : i >= j })",
6385 "(D[] : { A[i,j] : i >= j })" },
6387 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6389 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6391 "(C[] : { A[i,j] : i >= j })",
6392 "[N] -> { C[] -> D[N] }",
6393 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
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[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6442 "[N] -> { C[a] -> [a + N] }",
6443 "[N] -> { A[i,j] -> [i + N]; B[i,j] -> [j + N] }" },
6445 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6446 "{ C[a] -> [a] : a >= 0; C[a] -> [-a] : a < 0 }",
6447 "{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6448 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }" },
6451 "[N] -> { C[] -> [N] }",
6455 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6456 "[N] -> { [N] : N >= 0; [-N] : N < 0 }" },
6458 "[N] -> (C[] : { : N >= 0 })",
6459 "[N] -> { C[] -> [N] }",
6460 "[N] -> { [N] : N >= 0 }" },
6462 "[N] -> (C[] : { : N >= 0 })",
6463 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6464 "[N] -> { [N] : N >= 0 }" },
6466 "[N] -> (C[] : { : N >= 0 })",
6468 "[N] -> { [0] : N >= 0 }" },
6470 "(C[] : { A[i,j] : i >= j })",
6471 "[N] -> { C[] -> [N] }",
6472 "[N] -> { A[i,j] -> [N] : i >= j }" },
6474 "(C[] : { A[i,j] : i >= j })",
6475 "[N] -> { C[] -> [N] : N >= 0 }",
6476 "[N] -> { A[i,j] -> [N] : i >= j and N >= 0 }" },
6504 "unexpected result",
return -1);
6525 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6526 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6527 "{ C[a,b] -> D[b,a] }",
6528 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6529 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6531 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6532 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6533 "{ C[a,b] -> D[b,a] }",
6534 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6535 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6537 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6538 "[N] -> { C[a] -> D[a + N] }",
6539 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }]" },
6541 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6542 "{ C[a] -> D[a] : a >= 0; C[a] -> D[-a] : a < 0 }",
6543 "D[{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6544 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }]" },
6546 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6547 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6548 "{ C[a,b] -> D[a,b] : a >= b; C[a,b] -> D[b,a] : a < b }",
6549 "D[{ A[i,j] -> [i] : i >= j; A[i,j] -> [j] : i < j; "
6550 "B[i,j] -> [j] : i <= j; B[i,j] -> [i] : i > j }, "
6551 "{ A[i,j] -> [j] : i >= j; A[i,j] -> [i] : i < j; "
6552 "B[i,j] -> [i] : i <= j; B[i,j] -> [j] : i > j }]" },
6558 "[N] -> (C[] : { : N >= 0 })",
6560 "[N] -> (D[] : { : N >= 0 })" },
6563 "[N] -> { C[] -> D[N] }",
6564 "[N] -> D[{ [N] }]" },
6566 "(C[] : { A[i,j] : i >= j })",
6568 "(D[] : { A[i,j] : i >= j })" },
6570 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6572 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6574 "(C[] : { A[i,j] : i >= j })",
6575 "[N] -> { C[] -> D[N] }",
6576 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
6579 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6580 "[N] -> D[{ [N] : N >= 0; [-N] : N < 0 }]" },
6582 "[N] -> (C[] : { : N >= 0 })",
6583 "[N] -> { C[] -> D[N] }",
6584 "[N] -> D[{ [N] : N >= 0 }]" },
6586 "[N] -> (C[] : { : N >= 0 })",
6587 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6588 "[N] -> D[{ [N] : N >= 0 }]" },
6590 "[N] -> (C[] : { : N >= 0 })",
6592 "[N] -> D[{ [0] : N >= 0 }]" },
6594 "(C[] : { A[i,j] : i >= j })",
6595 "[N] -> { C[] -> D[N] : N >= 0 }",
6596 "[N] -> D[{ A[i,j] -> [N] : i >= j and N >= 0 }]" },
6617 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6618 isl_multi_union_pw_aff_free(
mupa);
6619 isl_multi_union_pw_aff_free(
res);
6624 "unexpected result",
return -1);
6645 "C[{ B[i,j] -> [i + 2j] }]",
"{ A[a,b] -> B[b,a] }",
6646 "C[{ A[a,b] -> [b + 2a] }]" },
6648 "C[{ B[i,j] -> [i + 2j] }]",
6649 "{ A[a,b] -> B[b,a] : b > a }",
6650 "C[{ A[a,b] -> [b + 2a] : b > a }]" },
6652 "C[{ B[i,j] -> [i + 2j] : j > 4 }]",
6653 "{ A[a,b] -> B[b,a] : b > a }",
6654 "C[{ A[a,b] -> [b + 2a] : b > a > 4 }]" },
6656 "C[{ B[i,j] -> [i + 2j] }]",
6657 "{ A[a,b] -> B[b,a] : a > b; A[a,b] -> B[a,b] : a <= b }",
6658 "C[{ A[a,b] -> [b + 2a] : a > b; A[a,b] -> [a + 2b] : a <= b }]" },
6660 "(C[] : { B[a,b] })",
6661 "{ A[a,b] -> B[b,a] }",
6662 "(C[] : { A[a,b] })" },
6664 "(C[] : { B[a,b] })",
6665 "{ B[a,b] -> A[b,a] }",
6668 "(C[] : { B[a,b] })",
6669 "{ A[a,b] -> B[b,a] : a > b }",
6670 "(C[] : { A[a,b] : a > b })" },
6672 "(C[] : { B[a,b] : a > b })",
6673 "{ A[a,b] -> B[b,a] }",
6674 "(C[] : { A[a,b] : b > a })" },
6676 "[N] -> (C[] : { B[a,b] : a > N })",
6677 "{ A[a,b] -> B[b,a] : a > b }",
6678 "[N] -> (C[] : { A[a,b] : a > b > N })" },
6680 "(C[] : { B[a,b] : a > b })",
6681 "[N] -> { A[a,b] -> B[b,a] : a > N }",
6682 "[N] -> (C[] : { A[a,b] : b > a > N })" },
6685 "{ A[a,b] -> B[b,a] }",
6688 "[N] -> (C[] : { : N >= 0 })",
6689 "{ A[a,b] -> B[b,a] }",
6690 "[N] -> (C[] : { : N >= 0 })" },
6693 "[N] -> { A[a,b] -> B[b,a] : N >= 0 }",
6694 "[N] -> (C[] : { : N >= 0 })" },
6715 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6716 isl_multi_union_pw_aff_free(
mupa);
6717 isl_multi_union_pw_aff_free(
res);
6722 "unexpected result",
return -1);
6739 equal = aff_check_plain_equal(
aff,
"{ A[x] -> [x + 1] }");
6760 ok = aff_check_plain_equal(
aff,
"{ [x] -> [1] }");
6839 equal = aff_check_plain_equal(
aff,
"{ [-1] }");
6863 {
"{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6865 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6866 {
"{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }",
6868 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6869 {
"[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }",
6871 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6872 {
"[M] -> { D[x, N] : x mod 2 = 0 and N mod 8 = 3 and M >= 0 }",
6874 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 and M >= 0 }" },
6912 {
"{ A[M, N] -> [M + floor(N/2)] }",
6914 "[M, N] -> { [M + floor(N/2)] }" },
6915 {
"{ B[N, M] -> [M + floor(N/2)] }",
6917 "[N, M] -> { [M + floor(N/2)] }" },
6918 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
6920 "[M, N] -> { [M + floor(N/2)] }" },
6921 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
6923 "[M, N] -> { [M + floor(N/2)] }" },
6924 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
6926 "[M, N] -> { [M + floor(N/2)] }" },
6927 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
6929 "[A, N, M] -> { [M + floor(N/2)] }" },
6970 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6972 "[M, N] -> { B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
6973 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6976 {
"{ A[] -> B[]; C[] -> D[]; E[] -> B[] }",
7019 {
"{ A[M, N] -> [M + floor(N/2)] }",
7021 "[M, N] -> { [M + floor(N/2)] }" },
7022 {
"{ B[N, M] -> [M + floor(N/2)] }",
7024 "[N, M] -> { [M + floor(N/2)] }" },
7025 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
7027 "[M, N] -> { [M + floor(N/2)] }" },
7028 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
7030 "[M, N] -> { [M + floor(N/2)] }" },
7031 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
7033 "[M, N] -> { [M + floor(N/2)] }" },
7034 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
7036 "[A, N, M] -> { [M + floor(N/2)] }" },
7057 r = pw_multi_aff_check_plain_equal(
pma,
str);
7076 {
"{ [A[M, N] -> B[]] -> [M + floor(N/2)] }",
7078 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7079 {
"{ [B[N, M] -> D[]] -> [M + floor(N/2)] }",
7081 "[N, M] -> { D[] -> [M + floor(N/2)] }" },
7082 {
"[M] -> { [C[N] -> B[x]] -> [x + M + floor(N/2)] }",
7084 "[M, N] -> { B[x] -> [x + M + floor(N/2)] }" },
7085 {
"[M] -> { [C[x, N] -> B[]] -> [x + floor(N/2)] }",
7087 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7088 {
"[M] -> { [C[x, N] -> B[]] -> [M + floor(N/2)] }",
7090 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7091 {
"[A, M] -> { [C[N, x] -> B[]] -> [x + floor(N/2)] }",
7093 "[A, N, M] -> { B[] -> [M + floor(N/2)] }" },
7114 r = pw_multi_aff_check_plain_equal(
pma,
str);
7134 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7135 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7136 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7137 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7138 {
"{ [NaN] }",
"M",
"{ : false }" },
7139 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7177 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7178 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7179 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7180 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7181 {
"[M] -> { [M] : M >= 0; [-M] : M < 0 }",
"M",
"[M] -> { : M >= 0 }" },
7182 {
"{ [NaN] }",
"M",
"{ : false }" },
7183 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7221 {
"A[{ [4] }, { [5] }]",
7223 "[M = 4, N = 5] -> { : }" },
7224 {
"A[{ B[x] -> [floor(x/2)] }, { B[y] -> [y + 5] }]",
7226 "[M, N] -> { B[x] : M = floor(x/2) and N = x + 5 }" },
7227 {
"[M] -> A[{ [4] }, { [M + 1] }]",
7229 "[M = 4, N = 5] -> { : }" },
7293 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7295 "{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7296 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7298 "{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
7299 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7301 "[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }" },
7302 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7304 "[M] -> { D[x, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7342 {
"[M, N] -> { [M + floor(N/2)] }",
7344 "{ A[M, N] -> [M + floor(N/2)] }" },
7345 {
"[M, N] -> { [M + floor(N/2)] }",
7347 "{ B[N, M] -> [M + floor(N/2)] }" },
7348 {
"[M, N] -> { [M + floor(N/2)] }",
7350 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7351 {
"[M, N] -> { [M + floor(N/2)] }",
7352 "{ D[A, B, C, N, Z] }",
7353 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7391 {
"[M, N] -> { T[M + floor(N/2)] }",
7393 "{ A[M, N] -> T[M + floor(N/2)] }" },
7394 {
"[M, N] -> { [M + floor(N/2)] }",
7396 "{ B[N, M] -> [M + floor(N/2)] }" },
7397 {
"[M, N] -> { [M + floor(N/2)] }",
7399 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7400 {
"[M, N] -> { [M + floor(N/2)] }",
7401 "{ D[A, B, C, N, Z] }",
7402 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7403 {
"[M, N] -> { T[M + floor(N/2), N + floor(M/3)] }",
7405 "{ A[M, N] -> T[M + floor(N/2), N + floor(M/3)] }" },
7424 ma = isl_multi_aff_unbind_params_insert_domain(
ma,
tuple);
7426 r = multi_aff_check_plain_equal(
ma,
str);
7427 isl_multi_aff_free(
ma);
7479 str =
"[n] -> { [a, b] : n >= 0 and 4a >= -4 + n and b >= 0 and "
7480 "-4a <= b <= 3 and b < n - 4a }";
7501 str =
"[P, N] -> { [a] : a < N and a >= 0 and N > P and a <= P and "
7502 "N > 0 and P >= 0 }";
7522 str =
"[N] -> { [i] : 0 <= i <= min(N,10) }";
7526 str =
"[N] -> { [10] : N >= 10; [N] : N <= 9 and N >= 0 }";
7536 str =
"[N] -> { [i] : 0 <= i <= max(2N,N+6) }";
7540 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7550 str =
"[N] -> { [i] : 0 <= i <= 2N or 0 <= i <= N+6 }";
7554 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7564 str =
"[N,M] -> { [i,j] -> [([i/16]), i%16, ([j/16]), j%16] : "
7565 "0 <= i < N and 0 <= j < M }";
7571 str =
"[N,M] -> { [([(N-1)/16])] : M,N > 0 }";
7579 str =
"[N,M] -> { [t] : t = min(M-1,15) and M,N > 0 }";
7594 str =
"[n] -> { [a, b, c] : c >= -4a - 2b and "
7595 "c <= -1 + n - 4a - 2b and c >= -2b and "
7596 "4a >= -4 + n and c >= 0 }";
7600 str =
"[n] -> { [(0)] : n >= 1 }";
7612 str =
"[n] -> { [t,a] : 1 = 0 }";
7616 str =
"[n] -> { [t] : 1 = 0 }";
7640 str =
"{ A[i] -> B[1] : i < 0; A[i] -> B[2] : i >= 0 }";
7642 str =
"{ C[] -> D[] }";
7645 str =
"{ [A[i] -> C[]] -> [B[(1)] -> D[]] : i < 0;"
7646 "[A[i] -> C[]] -> [B[(2)] -> D[]] : i >= 0 }";
7647 equal = pw_multi_aff_check_plain_equal(pma1,
str);
7675 str =
"{ [[] -> []] }";
7700 str =
"[n] -> { [[]->[]] }";
7702 str =
"{ [[]->[]] }";
7724 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 1 }",
7725 "[N] -> { [0] : 0 <= N <= 1 }" },
7726 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7727 "[N] -> { [0] : 0 <= N <= 1; [1] : N = 2 }" },
7728 { 0,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7729 "[N] -> { [0] : 0 <= N <= 1 }" },
7730 { 0,
"{ [NaN] }",
"{ [NaN] }" },
7765 "unexpected equality result",
return -1);
7784 "map not detected as fixed",
return -1);
7787 "map detected as fixed",
return -1);
7795 str =
"{ [i] -> [i] }";
7799 str =
"{ [i] -> [1] }";
7803 str =
"{ S_1[p1] -> [o0] : o0 = -2 and p1 >= 1 and p1 <= 7 }";
7820 {
"{ A[t, i] : t = 12 and i >= 4 and i <= 12 }",
7821 2, {
"{ A[12, 4] }",
"{ A[12, 12] }" } },
7822 {
"{ A[t, i] : t = 14 and i = 1 }",
7823 1, {
"{ A[14, 1] }" } },
7824 {
"[n, m] -> { [a, b, c] : b <= a and a <= n and b > 0 and c >= b and "
7825 "c <= m and m <= n and m > 0 }",
7827 "[n, m] -> { [n, m, m] : 0 < m <= n }",
7828 "[n, m] -> { [n, 1, m] : 0 < m <= n }",
7829 "[n, m] -> { [n, 1, 1] : 0 < m <= n }",
7830 "[n, m] -> { [m, m, m] : 0 < m <= n }",
7831 "[n, m] -> { [1, 1, m] : 0 < m <= n }",
7832 "[n, m] -> { [1, 1, 1] : 0 < m <= n }"
7835 {
"[N, M] -> { [a, b] : M >= 3 and 9 + 3M <= a <= 29 + 2N + 11M and "
7836 "2b >= M + a and 5 - 2N - M + a <= 2b <= 3 + a and "
7839 "[N, M] -> { [(21), (12)] : M = 3 and N >= 0 }",
7840 "[N, M] -> { [(61 + 2N), (32 + N)] : M = 3 and N >= 0 }",
7862 for (i = 0; i < data->
n; ++i) {
7926 "[n] -> { A[i] -> [] : 0 <= i <= n; B[] -> [] }",
7927 "[m] -> { A[i] -> [] : 0 <= i <= m; C[] -> [] }",
7928 "[m, n] -> { A[i] -> [] : 0 <= i <= n and i <= m }" },
7930 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7931 "[N] -> { B[i] -> C[N] }",
7934 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7935 "[N] -> { A[i] -> C[N] }",
7936 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
7938 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
7939 "[N] -> { A[i] -> C[N] }",
7940 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
7942 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7943 "[N] -> { B[i] -> C[N] }",
7944 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
7946 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
7947 "[N] -> { B[i] -> C[N] }",
7948 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
7950 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7951 "[N] -> { A[i] -> C[N] }",
7954 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7955 "[N] -> { A[i] -> B[N] }",
7956 "[N] -> { A[N - 1] -> [B[N] -> C[N + 1]] }" },
7958 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
7959 "[N] -> { A[i] -> B[N] }",
7960 "[N] -> { A[N - 1] -> T[B[N] -> C[N + 1]] }" },
7962 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7963 "[N] -> { A[i] -> C[N] }",
7966 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7967 "[N] -> { A[i] -> C[N] }",
7968 "[N] -> { A[N - 2] -> [B[N - 1] -> C[N]] }" },
7970 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
7971 "[N] -> { A[i] -> C[N] }",
7972 "[N] -> { A[N - 2] -> T[B[N - 1] -> C[N]] }" },
7974 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7975 "[N] -> { A[i] -> B[N] }",
8021 str =
"[N] -> { A[0:N]; B[*,*] }";
8051#define BASE union_pw_qpolynomial
8068 upwqp1 =
fn(upwqp1, upwqp2);
8069 r = union_pw_qpolynomial_check_plain_equal(upwqp1,
res);
8084 str =
"{ [x] -> x^2 }";
8098 a =
"{ A[x] -> x^2 : x >= 0; B[x] -> x }";
8099 b =
"{ A[x] -> x }";
8100 str =
"{ A[x] -> x^2 + x : x >= 0; A[x] -> x : x < 0; B[x] -> x }";
8103 str =
"{ A[x] -> x^2 - x : x >= 0; A[x] -> -x : x < 0; B[x] -> x }";
8107 str =
"{ A[x] -> 0 }";
8108 a =
"{ A[x] -> 1 }";
8109 b =
"{ A[x] -> -1 }";
8112 a =
"{ A[x] -> 1 }";
8113 b =
"{ A[x] -> 1 }";
8117 str =
"{ [A[x] -> B[y,z]] -> x^2 + y * floor(x/4) * floor(z/2); "
8121 str =
"{ [B[y,z] -> A[x]] -> x^2 + y * floor(x/4) * floor(z/2) }";
8122 r = union_pw_qpolynomial_check_plain_equal(upwqp1,
str);
8143 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8144 "{ A[0,j]; B[0,j] }" },
8146 "F[{ A[i,j] -> [i-j]; B[i,j] -> [i-j] : i >= 0 }]",
8147 "{ A[i,i]; B[i,i] : i >= 0 }" },
8149 "(F[] : { A[i,j]; B[i,i] : i >= 0 })",
8150 "{ A[i,j]; B[i,i] : i >= 0 }" },
8175 "unexpected result",
return -1);
8197 "{ A[i,j] -> B[i',j'] }",
8198 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8199 "{ A[i,j] -> B[i,j'] }" },
8201 "{ A[i,j] -> B[i',j'] }",
8202 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8203 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8204 "{ A[i,j] -> B[i,j] }" },
8206 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8207 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8208 "{ A[i,j] -> B[i,j'] }" },
8210 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8211 "F[{ A[i,j] -> [i]; B[i,j] -> [i]; C[i,j] -> [0] }]",
8212 "{ A[i,j] -> B[i,j']; A[0,j] -> C[i',j'] }" },
8214 "{ A[i,j] -> B[i',j'] }",
8215 "F[{ A[i,j] -> [i] : i > j; B[i,j] -> [i] }]",
8216 "{ A[i,j] -> B[i,j'] : i > j }" },
8218 "{ A[i,j] -> B[i',j'] }",
8219 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8220 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8221 "{ A[i,j] -> B[i',j'] : i,j <<= i',j' }" },
8223 "{ A[i,j] -> B[i',j'] }",
8224 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8225 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8226 "{ A[i,j] -> B[i',j'] : i,j << i',j' }" },
8228 "{ A[i,j] -> B[i',j'] }",
8229 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8230 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8231 "{ A[i,j] -> B[i',j'] : i,j >>= i',j' }" },
8233 "{ A[i,j] -> B[i',j'] }",
8234 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8235 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8236 "{ A[i,j] -> B[i',j'] : i,j >> i',j' }" },
8238 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8239 "(F[] : { A[i,j]; B[i,j] })",
8240 "{ A[i,j] -> B[i',j'] }" },
8242 "{ A[i,j] -> B[i',j'] }",
8243 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8244 "{ A[i,j] -> B[i',j'] : i > j and i' < j' }" },
8246 "[N] -> { A[i,j] -> B[i',j'] : i,i' <= N }",
8247 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8248 "[N] -> { A[i,j] -> B[i',j'] : i > j and i' < j' and i,i' <= N }" },
8250 "{ A[i,j] -> B[i',j'] }",
8251 "[N] -> (F[] : { A[i,j] : i < N; B[i,j] : i < N })",
8252 "[N] -> { A[i,j] -> B[i',j'] : i,i' < N }" },
8254 "{ A[i,j] -> B[i',j'] }",
8255 "[N] -> (F[] : { : N >= 0 })",
8256 "[N] -> { A[i,j] -> B[i',j'] : N >= 0 }" },
8284 "unexpected result",
return -1);
8307 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8308 "{ A[i] : i <= 0 }" },
8310 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8311 "{ A[i] : i < 0 }" },
8313 "{ A[i] -> [i, i] }",
"{ A[i] -> [0, 0] }",
8314 "{ A[i] : i <= 0 }" },
8316 "{ A[i] -> [i, 0] }",
"{ A[i] -> [0, 0] }",
8317 "{ A[i] : i <= 0 }" },
8319 "{ A[i] -> [i, 1] }",
"{ A[i] -> [0, 0] }",
8320 "{ A[i] : i < 0 }" },
8381 str =
"{ A[x] -> x^2; B[x] -> -x^2 }";
8409 str =
"{ A[x] -> [x] }";
8411 str =
"{ A[x] : false }";
8457 {
"{ [i] -> [2 * i] }",
"{ [4] }",
"8" },
8458 {
"{ [i] -> [2 * i] }",
"{ [x] : false }",
"NaN" },
8459 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [0] }",
"0" },
8460 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [1] }",
"1" },
8461 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [2] }",
"3" },
8462 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [3] }",
"5" },
8463 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [4] }",
"7" },
8464 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [0] }",
"0" },
8465 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [1] }",
"0" },
8466 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [2] }",
"0" },
8467 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [3] }",
"0" },
8468 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [4] }",
"1" },
8469 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [6] }",
"1" },
8470 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [8] }",
"2" },
8471 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [4] }",
"4" },
8472 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [-2] }",
"2" },
8473 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [0] }",
"NaN" },
8474 {
"[N] -> { [2 * N] }",
"[N] -> { : N = 4 }",
"8" },
8475 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 1] }",
"1" },
8476 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 2] }",
"3/2" },
8477 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [4] }",
"4" },
8478 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [3] }",
"NaN" },
8479 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [x] : false }",
"NaN" },
8480 {
"[m, n] -> { [2m + 3n] }",
"[n=1, m=10] -> { : }",
"23" },
8526 "{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }",
8529 "{ [x] : x mod 2 = 0 }",
8530 "{ [x] : x mod 2 = 1 }",
8531 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) < x }",
8532 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) < x }",
8533 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8534 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8535 "[n] -> { [y, x] : 2*((x + 2y) mod 3) = n }",
8536 "{ [x, y] : (2*floor(x/3) + 3*floor(y/4)) mod 5 = x }",
8561 "parsed output not the same",
return -1);
8578 ma = isl_multi_aff_set_aff(
ma, 0,
aff);
8582 equal = isl_multi_aff_plain_is_equal(
ma, ma2);
8583 isl_multi_aff_free(ma2);
8584 isl_multi_aff_free(
ma);
8606 mpa = isl_multi_pw_aff_set_pw_aff(mpa, 0,
pa);
8610 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
8611 isl_multi_pw_aff_free(mpa2);
8612 isl_multi_pw_aff_free(mpa);
8638 str =
"[x] -> { [1] : x % 4 <= 2; [2] : x = 3 }";
8650 equal = !strcmp(s,
"4 * floord(x, 4) + 2 >= x ? 1 : 2");
8666 str =
"{ [a, b, c, d, e, f, g, h, i, j, k] : "
8667 "3i >= 1073741823b - c - 1073741823e + f and c >= 0 and "
8668 "3i >= -1 + 3221225466b + c + d - 3221225466e - f and "
8669 "2e >= a - b and 3e <= 2a and 3k <= -a and f <= -1 + a and "
8670 "3i <= 4 - a + 4b + 2c - e - 2f and 3k <= -a + c - f and "
8671 "3h >= -2 + a and 3g >= -3 - a and 3k >= -2 - a and "
8672 "3i >= -2 - a - 2c + 3e + 2f and 3h <= a + c - f and "
8673 "3h >= a + 2147483646b + 2c - 2147483646e - 2f and "
8674 "3g <= -1 - a and 3i <= 1 + c + d - f and a <= 1073741823 and "
8675 "f >= 1 - a + 1073741822b + c + d - 1073741822e and "
8676 "3i >= 1 + 2b - 2c + e + 2f + 3g and "
8677 "1073741822f <= 1073741822 - a + 1073741821b + 1073741822c +"
8678 "d - 1073741821e and "
8679 "3j <= 3 - a + 3b and 3g <= -2 - 2b + c + d - e - f and "
8680 "3j >= 1 - a + b + 2e and "
8681 "3f >= -3 + a + 3221225462b + 3c + d - 3221225465e and "
8682 "3i <= 4 - a + 4b - e and "
8683 "f <= 1073741822 + 1073741822b - 1073741822e and 3h <= a and "
8684 "f >= 0 and 2e <= 4 - a + 5b - d and 2e <= a - b + d and "
8685 "c <= -1 + a and 3i >= -2 - a + 3e and "
8686 "1073741822e <= 1073741823 - a + 1073741822b + c and "
8687 "3g >= -4 + 3221225464b + 3c + d - 3221225467e - 3f and "
8688 "3i >= -1 + 3221225466b + 3c + d - 3221225466e - 3f and "
8689 "1073741823e >= 1 + 1073741823b - d and "
8690 "3i >= 1073741823b + c - 1073741823e - f and "
8691 "3i >= 1 + 2b + e + 3g }";
8698 if (empty < 0 ||
subset < 0)
8719 str =
"{ [a, b, c, d, e, f, g, h] : 5f = 1 + 4a - b + 5c - d - 2e and "
8720 "3h = 2 + b + c and 14c >= 9 - 3a + 25b and "
8721 "4c <= 50 - 3a + 23b and 6b <= -39 + a and "
8722 "9g >= -6 + 3a + b + c and e < a + b - 2d and "
8723 "7d >= -5 + 2a + 2b and 5g >= -14 + a - 4b + d + 2e and "
8724 "9g <= -28 - 5b - 2c + 3d + 6e }";
8742 str =
"{ [i] -> [j] }";
8750 str =
"{ [i] -> [j] }";
8758 str =
"{ [i] -> [j] }";
8766 str =
"{ [i] -> [j] }";
8774 str =
"{ [i] -> [j] }";
8782 str =
"{ [i] -> [j] }";
8799 str =
"{ [i] -> [j] : i = 2j }";
8818 str =
"{ A[i] -> A[i + 1] }";
8840 str =
"{ [i,j] : j = 4 i + 1 and 0 <= i <= 100; "
8841 "[i,j] : j = 4 i + 3 and 500 <= i <= 600 }";
8864 str =
"{ A[B[] -> C[]] -> D[E[] -> F[]] }";
8869 ma1 = isl_multi_aff_align_params(
ma1, space);
8871 str =
"[N] -> { A[B[] -> C[]] -> D[E[] -> F[]] }";
8874 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
8876 isl_multi_aff_free(
ma1);
8877 isl_multi_aff_free(ma2);
8883 "result not as expected",
return -1);
8905 ma = isl_multi_aff_from_aff_list(space, isl_aff_list_from_aff(
aff));
8906 isl_multi_aff_free(
ma);
8932 const char *str_with, *str_without;
8938 str_with =
"[n, m, o] -> { [m] }";
8939 str_without =
"[m] -> { [m] }";
8952 "result not as expected",
return -1);
8965 "result not as expected",
return -1);
8978 "result not as expected",
return -1);
8995 list = isl_id_list_alloc(ctx, 4);
8996 list = isl_id_list_add(list,
b);
8997 list = isl_id_list_insert(list, 0,
a);
8998 list = isl_id_list_add(list, c);
8999 list = isl_id_list_add(list, d);
9000 list = isl_id_list_drop(list, 1, 1);
9002 n = isl_id_list_n_id(list);
9006 isl_id_list_free(list);
9008 "unexpected number of elements in list",
return -1);
9011 id = isl_id_list_get_id(list, 0);
9014 id = isl_id_list_get_id(list, 1);
9017 id = isl_id_list_get_id(list, 2);
9021 isl_id_list_free(list);
9025 "unexpected elements in list",
return -1);
9039 str =
"[N] -> { A[0, N + 1] }";
9055 "[N] -> { [i] : N - 1 <= 2 i <= N }",
9056 "[N] -> { [i] : exists a : i = 4 a and N - 1 <= i <= N }",
9057 "[N] -> { [i,j] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9058 "[N] -> { [[i]->[j]] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9059 "[N] -> { [3*floor(N/2) + 5*floor(N/3)] }",
9060 "[a, b] -> { [c, d] : (4*floor((-a + c)/4) = -a + c and "
9061 "32*floor((-b + d)/32) = -b + d and 5 <= c <= 8 and "
9062 "-3 + c <= d <= 28 + c) }",
9096 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9097 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9098 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9099 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9101 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9102 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9103 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9139 "{ [x] -> A[x] : x >= 0 }",
9140 "{ [x] -> A[x] : x >= 0; [x] -> A[-x] : x < 0 }",
9141 "{ [x] -> A[x, x + 1] }",
9143 "{ [x] -> A[] : x >= 0 }",
9181 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9182 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9183 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9184 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9186 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9187 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9188 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9189 "{ A[] -> B[0]; C[] -> B[1] }",
9190 "{ A[] -> B[]; C[] -> B[] }",
9247 str =
"{ [A[] -> B[]] -> C[] }";
9258 "curried map should not be equal to original",
9269 {
"{ B[i,j] -> C[i + 2j] }" ,
"{ A[a,b] -> B[b,a] }",
9270 "{ A[a,b] -> C[b + 2a] }" },
9271 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/2] }",
"{ A[a] -> C[a] }" },
9272 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[2a] }",
"{ A[a] -> C[a] }" },
9273 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[(a)/3] }",
9274 "{ A[a] -> C[(a)/6] }" },
9275 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[5a] }",
"{ A[a] -> C[10a] }" },
9276 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/3] }",
9277 "{ A[a] -> C[(2a)/3] }" },
9278 {
"{ B[i,j] -> C[i + j] }",
"{ A[a] -> B[a,a] }",
"{ A[a] -> C[2a] }"},
9279 {
"{ B[a] -> C[a,a] }",
"{ A[i,j] -> B[i + j] }",
9280 "{ A[i,j] -> C[i + j, i + j] }"},
9281 {
"{ B[i] -> C[([i/2])] }",
"{ B[5] }",
"{ C[2] }" },
9282 {
"[n] -> { B[i,j] -> C[([i/2]) + 2j] }",
9283 "[n] -> { B[n,[n/3]] }",
"[n] -> { C[([n/2]) + 2*[n/3]] }", },
9284 {
"{ [i, j] -> [floor((i)/4) + floor((2*i+j)/5)] }",
9285 "{ [i, j] -> [floor((i)/3), j] }",
9286 "{ [i, j] -> [(floor((i)/12) + floor((j + 2*floor((i)/3))/5))] }" },
9301 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
9302 isl_multi_aff_free(
ma1);
9303 isl_multi_aff_free(ma2);
9331 ok =
str ? !strcmp(
str,
"-(A + B)") : -1;
9336 if (ok < 0 ||
equal < 0)
9340 "equal expressions not considered equal",
return -1);
9343 "isl_ast_expr printed incorrectly",
return -1);
9351 ok =
str ? !strcmp(
str,
"C - (A + B)") : -1;
9359 "isl_ast_expr printed incorrectly",
return -1);
9428 "unexpected number of for nodes",
return NULL);
9431 "unexpected depth",
return NULL);
9445 "expecting single range space",
return NULL);
9458 "spaces don't match",
return NULL);
9483 "mismatch in number of for nodes",
9523 isl_ast_node_list *children;
9530 child = isl_ast_node_list_get_at(children, 0);
9531 isl_ast_node_list_free(children);
9553 int modified_count = 0;
9561 str =
"[N] -> { : N >= 10 }";
9563 str =
"[N] -> { A[i,j] -> S[8,i,3,j] : 0 <= i,j <= N; "
9564 "B[i,j] -> S[8,j,9,i] : 0 <= i,j <= N }";
9585 &modified_count) < 0)
9595 "unexpected number of for nodes",
9598 if (modified_count != 2)
9600 "unexpected number of for nodes after changes",
9618 str =
"{ A[i,j] -> [i,j] : 0 <= i,j <= 1 }";
9623 str =
"{ [i,j] -> atomic[1] : i + j = 1; [i,j] -> unroll[1] : i = j }";
9661 str =
"[n] -> { A[i] -> [i] : 0 <= i <= 100 and n <= i <= n + 2 }";
9665 str =
"{ [i] -> unroll[0] }";
9681 "unexpected number of for nodes",
return -1);
9701 str =
"[N,M] -> { A[i,j] -> [i,j] : 0 <= i <= N and 0 <= j <= M }";
9718 "not expecting if node",
return -1);
9735 "expecting if node",
return -1);
9768 "code should not contain any for loop",
9792 str =
"{ A[] -> [1, 1, 2]; B[i] -> [1, i, 0] : i >= 1 and i <= 2 }";
9795 str =
"{ [a, b, c] -> unroll[1] : exists (e0 = [(a)/4]: "
9796 "4e0 >= -1 + a - b and 4e0 <= -2 + a + b) }";
9835 str =
"[n] -> { [n/2] : n <= 0 and n % 2 = 0; [0] : n > 0 }";
9850 "expressions should not be combined",
return -1);
9881 str =
"{ [i,j] -> [i+j, 4i-j] }";
9883 str =
"{ [i,j] -> [4i-j] }";
9896 "expressions not equal",
return -1);
9917 mpa2 = isl_multi_pw_aff_flat_range_product(mpa1, mpa2);
9918 str =
"{ [i] -> [(i : i > 0), 2i] }";
9921 equal = isl_multi_pw_aff_plain_is_equal(mpa1, mpa2);
9923 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 0);
9925 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 1);
9931 isl_multi_pw_aff_free(mpa1);
9932 isl_multi_pw_aff_free(mpa2);
9938 "expressions not equal",
return -1);
9940 if (equal_domain < 0)
9944 "domains unexpectedly equal",
return -1);
9959 str =
"{ A[x,y] -> B[] : x >= y }";
9961 involves1 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 2);
9962 mpa1 = isl_multi_pw_aff_copy(mpa);
9964 mpa = isl_multi_pw_aff_insert_dims(mpa,
isl_dim_in, 0, 1);
9965 involves2 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 1);
9966 involves3 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 1, 2);
9967 str =
"{ [a,x,y] -> B[] : x >= y }";
9969 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
9970 isl_multi_pw_aff_free(mpa2);
9972 mpa = isl_multi_pw_aff_drop_dims(mpa,
isl_dim_in, 0, 1);
9973 mpa = isl_multi_pw_aff_set_tuple_name(mpa,
isl_dim_in,
"A");
9975 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa1);
9976 isl_multi_pw_aff_free(mpa1);
9977 isl_multi_pw_aff_free(mpa);
9979 if (involves1 < 0 || involves2 < 0 || involves3 < 0 ||
equal < 0)
9983 "incorrect result of dimension insertion/removal",
9985 if (!involves1 || involves2 || !involves3)
9987 "incorrect characterization of involved dimensions",
10021 "{ A[x, y] -> [] : x + y >= 0 }",
10022 "[N] -> { A[x, y] -> [x] : x + y <= N }",
10023 "[N] -> { A[x, y] -> [x : y] : x + y <= N }",
10089 str =
"{ [i0, i1, i2, i3] : i0 >= -2 and 6i2 <= 4 + i0 + 5i1 and "
10090 "i2 <= 22 and 75i2 <= 111 + 13i0 + 60i1 and "
10091 "25i2 >= 38 + 6i0 + 20i1 and i0 <= -1 and i2 >= 20 and "
10101 "basic set should be empty",
return -1);
10115 str =
"{ [a] : exists e0, e1: 32e1 = 31 + 31a + 31e0 }";
10124 "equality not simplified away",
return -1);
10151 str =
"{ [1, b, c, 1 - c] -> [e] : 2e <= -c and 2e >= -3 + c }";
10153 str =
"{ [a, b, c, d] : c <= 1 and 2d >= 6 - 4b - c }";
10174 str =
"[a, b, c, d, e] -> { [] : exists (e0: 2d = b and a <= 124 and "
10175 "b <= 2046 and b >= 0 and b <= 60 + 64a and 2e >= b + 2c and "
10176 "2e >= b and 2e <= 1 + b and 2e <= 1 + b + 2c and "
10177 "32768e0 >= -124 + a and 2097152e0 <= 60 + 64a - b) }";
10204 str =
"[n] -> { A[i] : 0 <= i < n; B[] }";
10228 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10233 str =
"{ S1[i,j] : i > j }";
10235 filters = isl_union_set_list_from_union_set(uset);
10236 str =
"{ S1[i,j] : i <= j; S2[i,j] }";
10238 filters = isl_union_set_list_add(filters, uset);
10243 str =
"([] : { S1[i,j] : i > j })";
10245 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10246 isl_multi_union_pw_aff_free(mupa2);
10247 isl_multi_union_pw_aff_free(
mupa);
10274 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10278 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [9 - i] }]";
10282 str =
"[{ S1[i,j] -> [j]; S2[i,j] -> [j] }]";
10313 "expressions not equal",
return -1);
10329 int equal, equal_expansion;
10340 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10; "
10341 "S3[i,j] : 0 <= i,j < 10 }";
10345 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [i]; S3[i,j] -> [i] }]";
10349 str =
"{ S1[i,j] }";
10351 filters = isl_union_set_list_from_union_set(uset);
10352 str =
"{ S2[i,j]; S3[i,j] }";
10354 filters = isl_union_set_list_add(filters, uset);
10357 str =
"{ S2[i,j] }";
10359 filters = isl_union_set_list_from_union_set(uset);
10360 str =
"{ S3[i,j] }";
10362 filters = isl_union_set_list_add(filters, uset);
10387 str =
"{ group1[i] -> S1[i,j] : 0 <= i,j < 10; "
10388 "group1[i] -> S2[i,j] : 0 <= i,j < 10; "
10389 "group1[i] -> S3[i,j] : 0 <= i,j < 10 }";
10401 if (
equal < 0 || equal_expansion < 0)
10405 "expressions not equal",
return -1);
10406 if (!equal_expansion)
10408 "unexpected expansion",
return -1);
10428 {
"{ rat: [i] : 0 <= i <= 10 }",
10429 "{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }" },
10430 {
"{ rat: [i] : FALSE }",
10431 "{ rat: coefficients[[cst] -> [a]] }" },
10432 {
"{ rat: [i] : }",
10433 "{ rat: coefficients[[cst] -> [0]] : cst >= 0 }" },
10434 {
"{ [0:,1,2:3] }",
10435 "{ rat: coefficients[[c_cst] -> [a, b, c]] : "
10436 "a >= 0 and 2c >= -c_cst - b and 3c >= -c_cst - b }" },
10437 {
"[M, N] -> { [x = (1 - N):-1, -4x:(M - 4x)] }",
10438 "{ rat: coefficients[[c_cst, c_M = 0:, c_N = 0:] -> [a, b = -c_M:]] :"
10439 "4b >= -c_N + a and 4b >= -c_cst - 2c_N + a }" },
10440 {
"{ rat : [x, y] : 1 <= 2x <= 9 and 2 <= 3y <= 16 }",
10441 "{ rat: coefficients[[c_cst] -> [c_x, c_y]] : "
10442 "4c_y >= -6c_cst - 3c_x and 4c_y >= -6c_cst - 27c_x and "
10443 "32c_y >= -6c_cst - 3c_x and 32c_y >= -6c_cst - 27c_x }" },
10444 {
"{ [x, y, z] : 3y <= 2x - 2 and y >= -2 + 2x and 2y >= 2 - x }",
10445 "{ rat: coefficients[[cst] -> [a, b, c]] }" },
10452 {
"{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }",
10453 "{ rat: [i] : 0 <= i <= 10 }" },
10454 {
"{ rat: coefficients[[cst] -> [a]] : FALSE }",
10456 {
"{ rat: coefficients[[cst] -> [a]] }",
10457 "{ rat: [i] : FALSE }" },
10481 "incorrect dual",
return -1);
10498 "incorrect dual",
return -1);
10513 { 0, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10514 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10516 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10517 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10519 { 1, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10520 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10522 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10523 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10525 { 0, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10526 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10528 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10529 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10531 { 1, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10532 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10534 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10535 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10580 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10581 isl_multi_union_pw_aff_free(
mupa);
10582 isl_multi_union_pw_aff_free(mupa2);
10590 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa,
10592 isl_multi_union_pw_aff_free(
mupa);
10593 isl_multi_union_pw_aff_free(mupa2);
10601 "unexpected result",
return -1);
10617 uint32_t hash1, hash2;
10629 if (hash1 != hash2)
10631 "domain hash not equal to hash of domain",
return -1);
10645 s =
"{ [] : exists x, y : 3y <= 2x and y >= -3 + 2x and 2y >= 2 - x }";
10654 "not recognized as universe set",
return -1);
10662 "[A, B, C] -> { [x, y, z] : x >= 0 and y >= 0 and y <= A - x and "
10663 "z >= 0 and z <= C - y and z <= B - x - y }",
10675 *cells = isl_basic_set_list_add(*cells, dom);
10687 n = isl_basic_set_list_n_basic_set(list);
10691 for (i = 0; i <
n; ++i) {
10694 bset_i = isl_basic_set_list_get_basic_set(list, i);
10695 for (j = i + 1; j <
n; ++j) {
10699 bset_j = isl_basic_set_list_get_basic_set(list, j);
10703 isl_die(isl_basic_set_list_get_ctx(list),
10706 if (disjoint < 0 || !disjoint)
10732 cells = isl_basic_set_list_alloc(ctx, 0);
10735 cells = isl_basic_set_list_free(cells);
10737 isl_basic_set_list_free(cells);
10799 {
"single-valued", &
test_sv },
10813 {
"piecewise quasi-polynomials", &
test_pwqp },
10821 {
"lexicographic order", &
test_lex },
10823 {
"dataflow analysis", &
test_dep },
10827 {
"dimension manipulation", &
test_dim },
10840 options = isl_options_new_with_defaults();
__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_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_export isl_bool isl_pw_aff_plain_is_equal(__isl_keep isl_pw_aff *pwaff1, __isl_keep isl_pw_aff *pwaff2)
__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_export isl_bool isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2)
isl_bool isl_aff_plain_is_zero(__isl_keep isl_aff *aff)
__isl_export isl_bool isl_union_pw_aff_plain_is_equal(__isl_keep isl_union_pw_aff *upa1, __isl_keep isl_union_pw_aff *upa2)
__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_export __isl_give isl_pw_aff * isl_pw_aff_drop_unused_params(__isl_take isl_pw_aff *pa)
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_bool isl_pw_multi_aff_plain_is_equal(__isl_keep isl_pw_multi_aff *pma1, __isl_keep isl_pw_multi_aff *pma2)
__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_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_export 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_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_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_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(* fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, void *user)
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)
bool test_div(testspec_t *t, FILE *ofp)
__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[]
static struct isl_arg_choice bound[]
#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)
void test_parse_map(isl_ctx *ctx, const char *str)
static int test_union_map_mupa_conversion(isl_ctx *ctx)
struct @016117341140033035307325017250231030001172225320 coalesce_tests[]
static int test_min_special2(isl_ctx *ctx)
static int test_conflicting_context_schedule(isl_ctx *ctx)
struct @020074134063177147374305013173201056235322265307 pma_equal_tests[]
static int test_eval(isl_ctx *ctx)
static int test_closure(isl_ctx *ctx)
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)
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)
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)
int test_factorize(isl_ctx *ctx)
static const char * parse_union_pw_multi_aff_fail_tests[]
struct @217300273003272264354301305257075337216352210333 val_bin_tests[]
static __isl_give isl_id * before_for(__isl_keep isl_ast_build *build, void *user)
static int test_deltas_map(isl_ctx *ctx)
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)
struct @061124063161067110073243100231030174062076155272 mpa_bin_tests[]
static isl_stat test_aff_set_tuple_id(isl_ctx *ctx)
struct @174057113116164366203126207022041076172367046214 mupa_uset_tests[]
static isl_stat test_bind_set(isl_ctx *ctx)
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)
struct @237150141343053203027125264373312344000200200232 unbind_set_tests[]
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 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)
static int test_mupa_ma(isl_ctx *ctx)
struct @216257140162010135245171323044214145146165047335 bin_locus_tests[]
static int test_split_periods(isl_ctx *ctx)
static isl_stat test_bind_pa(isl_ctx *ctx)
static int test_ast_gen(isl_ctx *ctx)
static isl_stat test_bound_space(isl_ctx *ctx)
static int test_lex(struct isl_ctx *ctx)
static isl_stat test_coalesce_special8(isl_ctx *ctx)
static int test_ast_build(isl_ctx *ctx)
const char * umap_mupa_conversion_tests[]
struct @105221326373240210216336053113147175001126267127 bind_pma_domain_tests[]
int test_eliminate(isl_ctx *ctx)
struct @046213276021216247135016337073226265266123046377 upma_bin_fail_tests[]
static int test_skewing_schedule(isl_ctx *ctx)
static int test_lexmin(struct isl_ctx *ctx)
static struct @015267075333042347372041363346316206161075303054 upma_test_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)
struct @343352217161364004312145033045065131243340231327 mupa_ma_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)
struct @277255054242064365360344327310257371007324027162 aff_bin_tests[]
static int test_recession_cone(struct isl_ctx *ctx)
static int test_product_pma(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)
struct @263260042340030002023204212344055054207256061003 lexmin_tests[]
static struct @312242276265273206050076024022221044217204247150 bind_pa_tests[]
struct @032326224263051015242172034057017051301131332221 upma_uset_tests[]
static const char * reparse_multi_union_pw_aff_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)
struct @275270173251312013201020346130124230036336200035 bind_umap_range_tests[]
static void test_parse_pwaff(isl_ctx *ctx, const char *str)
struct @336041326377237040302274063337145151235045104073 aff_eval_tests[]
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)
struct @346121156341046050001065107224026155011163173256 opt_tests[]
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)
int test_parse_map_equal(isl_ctx *ctx, const char *str, const char *str2)
struct @073317244344013303260303174253310074300236206353 mupa_un_tests[]
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)
struct @027213002172344323165175365021062236374012126065 live_range_tests[]
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 struct @032104377171373353064050046203260213352306036137 umap_bin_tests[]
static int test_mupa_set(isl_ctx *ctx)
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
struct @123161370147266307110215130177302342032352135375 coalesce_unbounded_tests[]
struct @306152342120224230045201022302340006115324040221 mpa_un_tests[]
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)
struct @136277052127235302001362335036236067334354155255 coef_tests[]
static int test_simplify_1(isl_ctx *ctx)
#define ARRAY_SIZE(array)
static int test_get_list(isl_ctx *ctx)
static struct @016015352272170164072066104344001241103075150127 bind_aff_tests[]
static struct @246277342025272067075065104332037275214221302171 opt_pw_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)
struct @234372225360351010125242076055167203305366236111 mupa_set_tests[]
struct @212251224320377234215223061215057205173040036122 sol_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)
struct @112052067337023134134123200132300000022321127266 tile_tests[]
static int test_plain_gist(isl_ctx *ctx)
int test_drop_unused_parameters(isl_ctx *ctx)
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)
struct @277045303356023321271362066163360052210373341215 recession_cone_tests[]
static isl_bool uset_is_equal(__isl_keep isl_union_set *uset, const char *str)
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 @365347224236156042276345137037354162060170254355 aff_bin_op[]
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)
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)
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)
struct @073223071055162131251174000110304051102024241067 pw_aff_bin_op[]
static __isl_give isl_map * cocoa_fig_1_right_tc(isl_ctx *ctx)
static int test_output_set(isl_ctx *ctx)
static __isl_give isl_ast_node * select_first(__isl_take isl_ast_node *node, void *user)
struct @225231020345174122145152306206242040116330170152 subtract_domain_tests[]
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)
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[]
struct @153221355010016326374145353067372356257264351356 mupa_pma_tests[]
static isl_bool count_for(__isl_keep isl_ast_node *node, void *user)
struct @326352374276177063217211122037271225223365343330 mupa_bin_tests[]
int test_dim_max(isl_ctx *ctx)
static int test_bounded(isl_ctx *ctx)
static char * get_filename(isl_ctx *ctx, const char *name, const char *suffix)
struct @175201007007107104020277010220303030346261040141 pw_aff_bin_tests[]
static __isl_give isl_map * cocoa_fig_1_right_power(isl_ctx *ctx)
static struct @110236216215267062025113222262143012150125310315 bind_set_tests[]
static int test_union(isl_ctx *ctx)
struct @230361366346155317003354075102156334256111143174 parse_map_equal_tests[]
static isl_stat test_aff_normalize(isl_ctx *ctx)
static int map_check_equal(__isl_keep isl_map *map, const char *str)
struct @121334201376000072241342302345242002002112124351 bind_pma_domain_wrapped_tests[]
struct @034023122066004347332201145302160211004356015173 mupa_upma_tests[]
int test_injective(isl_ctx *ctx)
struct @166252077064030177264324146316062043227161027001 mupa_pa_tests[]
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 @227153107326043146302145062112014100102317066121 box_hull_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 @225310166120276347227137376175363010237007305060 upma_bin_tests[]
struct @135300012331366305032307165220313216350342356305 subset_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)
static struct @125356034062032156215334117027034307076106117034 unbind_multi_aff_tests[]
void test_application_case(struct isl_ctx *ctx, const char *name)
static isl_stat test_bind_umap_range(isl_ctx *ctx)
struct @221223354274216223320306321046225142311132162156 tests[]
static int test_mupa_upma(isl_ctx *ctx)
struct @306255212222345361073270334305355037300163072106 sv_tests[]
struct @307311126023073361146236001125175247211007332263 val_bin_op[]
static int test_bin_mpa(isl_ctx *ctx)
struct @174057011213107332265220210271111213013313024017 bind_map_domain_tests[]
struct @250133302144052016047034213024303200342344001123 unbind_aff_tests[]
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)
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 struct @050155310362100077075031154044213015144052006053 bin_locus_ma_tests[]
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)
static struct @320003045101313370267023112313076000262133016064 bind_mupa_tests[]
static int test_parse_multi_val(isl_ctx *ctx, const char *str)
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)
struct @345352160040353307102050305160332264207213132026 pwqp_gist_tests[]
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 @217276206324134050271014074335325122205326340376 convex_hull_tests[]
static int test_coalesce(struct isl_ctx *ctx)
static int test_align_parameters(isl_ctx *ctx)
static int test_simplify(isl_ctx *ctx)
static __isl_give isl_ast_node * after_for(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user)
static isl_stat test_coalesce_special7(isl_ctx *ctx)
void test_parse_pwqp(isl_ctx *ctx, const char *str)
struct @243145263041116036205134344043334252153027152135 simple_hull_tests[]
static int test_schedule_tree_group_1(isl_ctx *ctx)
struct @031064245322346342056014251357027126016366134020 bijective_tests[]
const char * chambers_tests[]
struct @033013227044342070133067222073072061020241124316 plain_gist_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[]
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 struct @234152315152023263103113146365272230152161306351 bound_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[]
struct @341133352173154043211061172152136021073007253337 pullback_tests[]
static int test_residue_class(isl_ctx *ctx)
struct @340232322145356212010141242212302323170034116022 val_un_tests[]
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)
struct @377335042054304314277065373361216112115061122073 un_locus_tests[]
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 int test_schedule_tree_prefix(isl_ctx *ctx)
static __isl_give isl_ast_node * create_leaf(__isl_take isl_ast_build *build, void *user)
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)
#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_union_pw_qpolynomial * isl_union_pw_qpolynomial_domain_reverse(__isl_take isl_union_pw_qpolynomial *upwqp)
__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_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_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_set * isl_set_drop_unused_params(__isl_take isl_set *set)
__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_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_map isl_union_map
__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)