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 }";
1579 input = fopen(filename,
"r");
1603 {
"{ [i0, i1, i2] : (i2 = 1 and i0 = 0 and i1 >= 0) or "
1604 "(i0 = 1 and i1 = 0 and i2 = 1) or "
1605 "(i0 = 0 and i1 = 0 and i2 = 0) }",
1606 "{ [i0, i1, i2] : i0 >= 0 and i2 >= i0 and i2 <= 1 and i1 >= 0 }" },
1607 {
"[n] -> { [i0, i1, i0] : i0 <= -4 + n; "
1608 "[i0, i0, i2] : n = 6 and i0 >= 0 and i2 <= 7 - i0 and "
1609 "i2 <= 5 and i2 >= 4; "
1610 "[3, i1, 3] : n = 5 and i1 <= 2 and i1 >= 0 }",
1611 "[n] -> { [i0, i1, i2] : i2 <= -1 + n and 2i2 <= -6 + 3n - i0 and "
1612 "i2 <= 5 + i0 and i2 >= i0 }" },
1613 {
"{ [x, y] : 3y <= 2x and y >= -2 + 2x and 2y >= 2 - x }",
1614 "{ [x, y] : 1 = 0 }" },
1615 {
"{ [x, y, z] : 0 <= x, y, z <= 10; [x, y, 0] : x >= 0 and y > 0; "
1616 "[x, y, 0] : x >= 0 and y < 0 }",
1617 "{ [x, y, z] : x >= 0 and 0 <= z <= 10 }" },
1618 {
"{ [a, b, c] : a <= 1 and -a < b <= 1 and 0 <= c <= 2 - a - b and "
1620 "[0, 2, 0]; [3, 1, 0] }",
1621 "{ [a, b, c] : b > -a and 2b >= -1 + a and 0 <= c <= a and "
1622 "5c <= 6 - a - 3b }" },
1663 "unexpected convex hull",
return -1);
1688 isl_bool empty_before, empty_after;
1699 if (empty_before < 0 || empty_after < 0)
1719 map =
"{ [] -> [a, b, c] : 2b = 1 + a }";
1720 context =
"{ [] -> [a, b, c] : 2c = 2 + a }";
1723 map =
"{ [] -> [0, 0] }";
1724 context =
"{ [] -> [a, b] : a > b }";
1738 {
"{ [i] -> [j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
1739 "{ [i] -> [j] : i >= 1 }",
1740 "{ [i] -> [j] : j >= 1 or i >= 2 and j <= 10 }" },
1741 {
"{ [n] -> [i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
1742 "(j mod 4 = 2 and k mod 6 = n) }",
1743 "{ [n] -> [i,j,k] : j mod 4 = 2 }",
1744 "{ [n] -> [i,j,k] : (i mod 3 = 2) or (k mod 6 = n) }" },
1745 {
"{ [i] -> [j] : i > j and (exists a,b : i <= 2a + 5b <= 2) }",
1746 "{ [i] -> [j] : i > j }",
1747 "{ [i] -> [j] : exists a,b : i <= 2a + 5b <= 2 }" },
1774 "incorrect gist result",
return -1);
1789 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : "
1790 "exists (e0 = [(15 + p0 + 15p6 + 15p10)/16], e1 = [(p5)/8], "
1791 "e2 = [(p6)/128], e3 = [(8p2 - p5)/128], "
1792 "e4 = [(128p3 - p6)/4096]: 8e1 = p5 and 128e2 = p6 and "
1793 "128e3 = 8p2 - p5 and 4096e4 = 128p3 - p6 and p2 >= 0 and "
1794 "16e0 >= 16 + 16p6 + 15p10 and p2 <= 15 and p3 >= 0 and "
1795 "p3 <= 31 and p6 >= 128p3 and p5 >= 8p2 and p10 >= 0 and "
1796 "16e0 <= 15 + p0 + 15p6 + 15p10 and 16e0 >= p0 + 15p6 + 15p10 and "
1797 "p10 <= 15 and p10 <= -1 + p0 - p6) }";
1799 str =
"[p0, p2, p3, p5, p6, p10] -> { [] : exists (e0 = [(p5)/8], "
1800 "e1 = [(p6)/128], e2 = [(8p2 - p5)/128], "
1801 "e3 = [(128p3 - p6)/4096]: 8e0 = p5 and 128e1 = p6 and "
1802 "128e2 = 8p2 - p5 and 4096e3 = 128p3 - p6 and p5 >= -7 and "
1803 "p2 >= 0 and 8p2 <= -1 + p0 and p2 <= 15 and p3 >= 0 and "
1804 "p3 <= 31 and 128p3 <= -1 + p0 and p6 >= -127 and "
1805 "p5 <= -1 + p0 and p6 <= -1 + p0 and p6 >= 128p3 and "
1806 "p0 >= 1 and p5 >= 8p2 and p10 >= 0 and p10 <= 15 ) }";
1809 assert(bset1 && bset1->n_div == 0);
1815 str =
"[t1] -> { S_0[] -> A[o0] : (exists (e0 = [(-t1 + o0)/16]: "
1816 "16e0 = -t1 + o0 and o0 >= 0 and o0 <= 15 and t1 >= 0)) or "
1817 "(exists (e0 = [(-1 + t1)/16], "
1818 "e1 = [(-16 + t1 - 16e0)/4294967296]: "
1819 "4294967296e1 = -16 + t1 - o0 - 16e0 and "
1820 "16e0 <= -1 + t1 and 16e0 >= -16 + t1 and o0 >= 0 and "
1821 "o0 <= 4294967295 and t1 <= -1)) }";
1823 str =
"[t1] -> { S_0[] -> A[o0] : t1 >= 0 and t1 <= 4294967295 }";
1857 one =
set &&
set->n == 1;
1865 "coalesced set not equal to input",
return -1);
1866 if (check_one && !one)
1868 "coalesced set should not be a union",
return -1);
1882 { 1,
"{ [x,y,z] : y + 2 >= 0 and x - y + 1 >= 0 and "
1883 "-x - y + 1 >= 0 and -3 <= z <= 3;"
1884 "[x,y,z] : -x+z + 20 >= 0 and -x-z + 20 >= 0 and "
1885 "x-z + 20 >= 0 and x+z + 20 >= 0 and "
1887 { 1,
"{ [x,y] : 0 <= x,y <= 10; [5,y]: 4 <= y <= 11 }" },
1888 { 1,
"{ [x,0,0] : -5 <= x <= 5; [0,y,1] : -5 <= y <= 5 }" },
1889 { 1,
"{ [x,y] : 0 <= x <= 10 and 0 >= y >= -1 and x+y >= 0; [0,1] }" },
1890 { 1,
"{ [x,y] : (0 <= x,y <= 4) or (2 <= x,y <= 5 and x + y <= 9) }" },
1891 { 0,
"{ [x, y, z] : 0 <= x,y,z <= 100 and 0 < z <= 2 + 2x + 2y; "
1892 "[x, y, 0] : x,y <= 100 and y <= 9 + 11x and x <= 9 + 11y }" },
1893 { 1,
"{ [0:1, 0:1]; [0, 2:3] }" },
1894 { 1,
"{ [0:1, 0:1]; [0, 2:3]; [1, -2:-1] }" },
1895 { 1,
"{ [0:3, 0:1]; [1:2, 2:5] }" },
1896 { 1,
"{ [0:3, 0:1]; [0:2, 2:5] }" },
1897 { 1,
"{ [0:3, 0:1]; [1:3, 2:5] }" },
1898 { 0,
"{ [0:3, 0:1]; [1:4, 2:5] }" },
1899 { 0,
"{ [0:3, 0:1]; [1:5, 2:5] }" },
1937 { 1,
"{[x,y]: x >= 0 & x <= 10 & y >= 0 & y <= 10 or "
1938 "y >= x & x >= 2 & 5 >= y }" },
1939 { 1,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
1940 "x + y >= 10 & y <= x & x + y <= 20 & y >= 0}" },
1941 { 0,
"{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or "
1942 "x + y >= 10 & y <= x & x + y <= 19 & y >= 0}" },
1943 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
1944 "y >= 0 & x >= 6 & x <= 10 & y <= x}" },
1945 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
1946 "y >= 0 & x >= 7 & x <= 10 & y <= x}" },
1947 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or "
1948 "y >= 0 & x >= 6 & x <= 10 & y + 1 <= x}" },
1949 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 6}" },
1950 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 7 & y <= 6}" },
1951 { 1,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 5}" },
1952 { 0,
"{[x,y]: y >= 0 & x <= 5 & y <= x or y >= 0 & x = 6 & y <= 7}" },
1953 { 1,
"[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }" },
1954 { 0,
"{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}" },
1955 { 1,
"[n] -> { [i] : 1 <= i and i <= n - 1 or 2 <= i and i <= n }" },
1956 { 0,
"[n] -> { [[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
1957 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
1958 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
1959 "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and "
1960 "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and "
1961 "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and "
1962 "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and "
1963 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);"
1964 "[[i0] -> [o0]] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
1965 "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
1966 "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
1967 "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and "
1968 "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and "
1969 "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and "
1970 "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and "
1971 "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and "
1972 "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and "
1973 "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }" },
1974 { 0,
"[n, m] -> { [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and "
1975 "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or "
1976 "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and "
1977 "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }" },
1978 { 0,
"[M, N] -> { [[i0, i1, i2, i3, i4, i5, i6] -> "
1979 "[o0, o1, o2, o3, o4, o5, o6]] : "
1980 "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and "
1981 "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and "
1982 "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and "
1983 "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 "
1984 "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and "
1985 "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 "
1986 "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and "
1987 "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 "
1988 "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or "
1989 "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and "
1990 "o6 >= i3 + i6 - o3 and M >= 0 and "
1991 "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and "
1992 "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }" },
1993 { 0,
"[M, N] -> { [o0] : (o0 = 0 and M >= 1 and N >= 2) or "
1994 "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or "
1995 "(o0 = 0 and M >= 2 and N >= 3) or "
1996 "(M = 0 and o0 = 0 and N >= 3) }" },
1997 { 0,
"{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and "
1998 "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or "
1999 "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and "
2000 "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }" },
2001 { 0,
"[M] -> { [i1] : (i1 >= 2 and i1 <= M) or (i1 = M and M >= 1) }" },
2002 { 0,
"{[x,y] : x,y >= 0; [x,y] : 10 <= x <= 20 and y >= -1 }" },
2003 { 1,
"{ [x, y] : (x >= 1 and y >= 1 and x <= 2 and y <= 2) or "
2004 "(y = 3 and x = 1) }" },
2005 { 1,
"[M] -> { [i0, i1, i2, i3, i4] : (i1 >= 3 and i4 >= 2 + i2 and "
2006 "i2 >= 2 and i0 >= 2 and i3 >= 1 + i2 and i0 <= M and "
2007 "i1 <= M and i3 <= M and i4 <= M) or "
2008 "(i1 >= 2 and i4 >= 1 + i2 and i2 >= 2 and i0 >= 2 and "
2009 "i3 >= 1 + i2 and i0 <= M and i1 <= -1 + M and i3 <= M and "
2010 "i4 <= -1 + M) }" },
2011 { 1,
"{ [x, y] : (x >= 0 and y >= 0 and x <= 10 and y <= 10) or "
2012 "(x >= 1 and y >= 1 and x <= 11 and y <= 11) }" },
2013 { 0,
"{[x,0] : x >= 0; [x,1] : x <= 20}" },
2014 { 1,
"{ [x, 1 - x] : 0 <= x <= 1; [0,0] }" },
2015 { 1,
"{ [0,0]; [i,i] : 1 <= i <= 10 }" },
2016 { 0,
"{ [0,0]; [i,j] : 1 <= i,j <= 10 }" },
2017 { 1,
"{ [0,0]; [i,2i] : 1 <= i <= 10 }" },
2018 { 0,
"{ [0,0]; [i,2i] : 2 <= i <= 10 }" },
2019 { 0,
"{ [1,0]; [i,2i] : 1 <= i <= 10 }" },
2020 { 0,
"{ [0,1]; [i,2i] : 1 <= i <= 10 }" },
2021 { 0,
"{ [a, b] : exists e : 2e = a and "
2022 "a >= 0 and (a <= 3 or (b <= 0 and b >= -4 + a)) }" },
2023 { 0,
"{ [i, j, i', j'] : i <= 2 and j <= 2 and "
2024 "j' >= -1 + 2i + j - 2i' and i' <= -1 + i and "
2025 "j >= 1 and j' <= i + j - i' and i >= 1; "
2027 { 1,
"{ [i,j] : exists a,b : i = 2a and j = 3b; "
2028 "[i,j] : exists a : j = 3a }" },
2029 { 1,
"{ [a, b, c] : (c <= 7 - b and b <= 1 and b >= 0 and "
2030 "c >= 3 + b and b <= 3 + 8a and b >= -26 + 8a and "
2032 "(b <= 1 and c <= 7 and b >= 0 and c >= 4 + b and "
2033 "b <= 3 + 8a and b >= -26 + 8a and a >= 3) }" },
2034 { 1,
"{ [a, 0, c] : c >= 1 and c <= 29 and c >= -1 + 8a and "
2035 "c <= 6 + 8a and a >= 3; "
2036 "[a, -1, c] : c >= 1 and c <= 30 and c >= 8a and "
2037 "c <= 7 + 8a and a >= 3 and a <= 4 }" },
2038 { 1,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2039 "[x,0] : 3 <= x <= 4 }" },
2040 { 1,
"{ [x,y] : 0 <= x <= 3 and y >= 0 and x + 3y <= 6; "
2041 "[x,0] : 4 <= x <= 5 }" },
2042 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + 2y <= 4; "
2043 "[x,0] : 3 <= x <= 5 }" },
2044 { 0,
"{ [x,y] : 0 <= x <= 2 and y >= 0 and x + y <= 4; "
2045 "[x,0] : 3 <= x <= 4 }" },
2046 { 1,
"{ [i0, i1] : i0 <= 122 and i0 >= 1 and 128i1 >= -249 + i0 and "
2048 "[i0, 0] : i0 >= 123 and i0 <= 124 }" },
2049 { 1,
"{ [0,0]; [1,1] }" },
2050 { 1,
"[n] -> { [k] : 16k <= -1 + n and k >= 1; [0] : n >= 2 }" },
2051 { 1,
"{ [k, ii, k - ii] : ii >= -6 + k and ii <= 6 and ii >= 1 and "
2053 "[k, 0, k] : k <= 6 and k >= 1 }" },
2054 { 1,
"{ [i,j] : i = 4 j and 0 <= i <= 100;"
2055 "[i,j] : 1 <= i <= 100 and i >= 4j + 1 and i <= 4j + 2 }" },
2056 { 1,
"{ [x,y] : x % 2 = 0 and y % 2 = 0; [x,x] : x % 2 = 0 }" },
2057 { 1,
"[n] -> { [1] : n >= 0;"
2058 "[x] : exists (e0 = floor((x)/2): x >= 2 and "
2059 "2e0 >= -1 + x and 2e0 <= x and 2e0 <= n) }" },
2060 { 1,
"[n] -> { [x, y] : exists (e0 = floor((x)/2), e1 = floor((y)/3): "
2061 "3e1 = y and x >= 2 and 2e0 >= -1 + x and "
2062 "2e0 <= x and 2e0 <= n);"
2063 "[1, y] : exists (e0 = floor((y)/3): 3e0 = y and "
2065 { 1,
"[t1] -> { [i0] : (exists (e0 = floor((63t1)/64): "
2066 "128e0 >= -134 + 127t1 and t1 >= 2 and "
2067 "64e0 <= 63t1 and 64e0 >= -63 + 63t1)) or "
2069 { 1,
"{ [i, i] : exists (e0 = floor((1 + 2i)/3): 3e0 <= 2i and "
2070 "3e0 >= -1 + 2i and i <= 9 and i >= 1);"
2072 { 1,
"{ [t1] : exists (e0 = floor((-11 + t1)/2): 2e0 = -11 + t1 and "
2073 "t1 >= 13 and t1 <= 16);"
2074 "[t1] : t1 <= 15 and t1 >= 12 }" },
2075 { 1,
"{ [x,y] : x = 3y and 0 <= y <= 2; [-3,-1] }" },
2076 { 1,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-2] }" },
2077 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-2,-2] }" },
2078 { 0,
"{ [x,y] : 2x = 3y and 0 <= y <= 4; [-3,-1] }" },
2079 { 1,
"{ [i] : exists j : i = 4 j and 0 <= i <= 100;"
2080 "[i] : exists j : 1 <= i <= 100 and i >= 4j + 1 and "
2082 { 1,
"{ [c0] : (exists (e0 : c0 - 1 <= 3e0 <= c0)) or "
2083 "(exists (e0 : 3e0 = -2 + c0)) }" },
2084 { 0,
"[n, b0, t0] -> "
2085 "{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
2086 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2087 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2088 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2089 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 >= 8 + n and "
2090 "3i4 <= -96 + 3t0 + i0 and 3i4 >= -95 - n + 3t0 + i0 and "
2091 "i8 >= -157 + i0 - 4i4 and i8 >= 0 and "
2092 "i8 <= -33 + i0 - 4i4 and 3i8 <= -91 + 4n - i0)) or "
2093 "(exists (e0 = floor((-32b0 + i4)/1048576), "
2094 "e1 = floor((i8)/32): 1048576e0 = -32b0 + i4 and 32e1 = i8 and "
2095 "n <= 2147483647 and b0 <= 32767 and b0 >= 0 and "
2096 "32b0 <= -2 + n and t0 <= 31 and t0 >= 0 and i0 <= 7 + n and "
2097 "4i4 <= -3 + i0 and 3i4 <= -96 + 3t0 + i0 and "
2098 "3i4 >= -95 - n + 3t0 + i0 and i8 >= -157 + i0 - 4i4 and "
2099 "i8 >= 0 and i8 <= -4 + i0 - 3i4 and i8 <= -41 + i0));"
2100 "[i0, i1, i2, i3, 0, i5, i6, i7, i8, i9, i10, i11, i12] : "
2101 "(exists (e0 = floor((i8)/32): b0 = 0 and 32e0 = i8 and "
2102 "n <= 2147483647 and t0 <= 31 and t0 >= 0 and i0 >= 11 and "
2103 "i0 >= 96 - 3t0 and i0 <= 95 + n - 3t0 and i0 <= 7 + n and "
2104 "i8 >= -40 + i0 and i8 <= -10 + i0)) }" },
2105 { 0,
"{ [i0, i1, i2] : "
2106 "(exists (e0, e1 = floor((i0)/32), e2 = floor((i1)/32): "
2107 "32e1 = i0 and 32e2 = i1 and i1 >= -31 + i0 and "
2108 "i1 <= 31 + i0 and i2 >= -30 + i0 and i2 >= -30 + i1 and "
2109 "32e0 >= -30 + i0 and 32e0 >= -30 + i1 and "
2110 "32e0 >= -31 + i2 and 32e0 <= 30 + i2 and 32e0 <= 31 + i1 and "
2111 "32e0 <= 31 + i0)) or "
2113 { 1,
"{ [a, b, c] : 2b = 1 + a and 2c = 2 + a; [0, 0, 0] }" },
2114 { 1,
"{ [a, a, b, c] : 32*floor((a)/32) = a and 2*floor((b)/2) = b and "
2115 "2*floor((c)/2) = c and 0 <= a <= 192;"
2116 "[224, 224, b, c] : 2*floor((b)/2) = b and 2*floor((c)/2) = c }"
2118 { 1,
"[n] -> { [a,b] : (exists e : 1 <= a <= 7e and 9e <= b <= n) or "
2119 "(0 <= a <= b <= n) }" },
2120 { 1,
"{ [a, b] : 0 <= a <= 2 and b >= 0 and "
2121 "((0 < b <= 13) or (2*floor((a + b)/2) >= -5 + a + 2b)) }" },
2122 { 1,
"{ [a] : (2 <= a <= 5) or (a mod 2 = 1 and 1 <= a <= 5) }" },
2123 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2124 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2125 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2126 "b = 3 and 9e0 <= -19 + 2c)) }" },
2127 { 1,
"{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
2128 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2129 "(a = 4 and b = 3 and "
2130 "9*floor((-16 + 2c)/9) <= -19 + 2c) }" },
2131 { 0,
"{ [a, b, c] : (b <= 2 and b <= -2 + a) or "
2132 "(b = -1 + a and 0 < a <= 3 and "
2133 "9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
2134 "(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
2135 "b = 3 and 9e0 <= -19 + 2c)) }" },
2136 { 1,
"{ [y, x] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2138 { 1,
"{ [x, y] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
2140 { 1,
"{ [1, y] : -1 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2141 { 1,
"{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
2142 { 1,
"{ [x, y] : 0 <= x <= 10 and x - 4*floor(x/4) <= 1 and y <= 0; "
2143 "[x, y] : 0 <= x <= 10 and x - 4*floor(x/4) > 1 and y <= 0; "
2144 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) <= 1 and 0 < y; "
2145 "[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) > 1 and 0 < y }" },
2146 { 1,
"{ [x, 0] : 0 <= x <= 10 and x mod 2 = 0; "
2147 "[x, 0] : 0 <= x <= 10 and x mod 2 = 1; "
2148 "[x, y] : 0 <= x <= 10 and 1 <= y <= 10 }" },
2149 { 1,
"{ [a] : a <= 8 and "
2150 "(a mod 10 = 7 or a mod 10 = 8 or a mod 10 = 9) }" },
2151 { 1,
"{ [x, y] : 2y = -x and x <= 0 or "
2152 "x <= -1 and 2y <= -x - 1 and 2y >= x - 1 }" },
2153 { 0,
"{ [x, y] : 2y = -x and x <= 0 or "
2154 "x <= -2 and 2y <= -x - 1 and 2y >= x - 1 }" },
2155 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2156 "(a < 0 and 3*floor((a)/3) < a) }" },
2157 { 1,
"{ [a] : (a <= 0 and 3*floor((a)/3) = a) or "
2158 "(a < -1 and 3*floor((a)/3) < a) }" },
2159 { 1,
"{ [a, b] : a <= 1024 and b >= 0 and "
2160 "((-31 - a + b <= 32*floor((-1 - a)/32) <= -33 + b and "
2161 "32*floor((-1 - a)/32) <= -16 + b + 16*floor((-1 - a)/16))"
2162 "or (2 <= a <= 15 and b < a)) }" },
2163 { 1,
"{ [a] : a > 0 and ((16*floor((a)/16) < a and "
2164 "32*floor((a)/32) < a) or a <= 15) }" },
2165 { 1,
"{ [a, b, c, d] : (-a + d) mod 64 = 0 and a <= 8 and b <= 1 and "
2166 "10 - a <= c <= 3 and d >= 5 and 9 - 64b <= d <= 70;"
2167 "[a, b = 1, c, d] : (-a + d) mod 64 = 0 and a <= 8 and c >= 4 and "
2168 "10 - a <= c <= 5 and 5 <= d <= 73 - c }" },
2169 { 1,
"[n, m] -> { S_0[i] : (-n + i) mod 3 = 0 and m >= 3 + n and "
2170 "i >= n and 3*floor((2 + n + 2m)/3) <= n + 3m - i; "
2171 "S_0[n] : n <= m <= 2 + n }" },
2172 { 1,
"{ [a, b] : exists (e0: 0 <= a <= 1 and b >= 0 and "
2173 "2e0 >= -5 + a + 2b and 2e0 >= -1 + a + b and "
2175 "[a, b] : exists (e0: 0 <= a <= 1 and 2e0 >= -5 + a + 2b and "
2176 "2e0 >= -1 - a + b and 2e0 <= -a + b and "
2177 "2e0 < -a + 2b) }" },
2178 { 1,
"{ [i, j, i - 8j] : 8 <= i <= 63 and -7 + i <= 8j <= i; "
2179 "[i, 0, i] : 0 <= i <= 7 }" },
2180 { 1,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [1, 1] }" },
2181 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [0, 2] }" },
2182 { 0,
"{ [a, b] : a >= 0 and 0 <= b <= 1 - a; [-1, 3] }" },
2183 { 1,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [1, 1] }" },
2184 { 0,
"{ [a, b] : a, b >= 0 and a + 2b <= 2; [2, 1] }" },
2185 { 0,
"{ [a, c] : (2 + a) mod 4 = 0 or "
2186 "(c = 4 + a and 4 * floor((a)/4) = a and a >= 0 and a <= 4) or "
2187 "(c = 3 + a and 4 * floor((-1 + a)/4) = -1 + a and "
2188 "a > 0 and a <= 5) }" },
2189 { 1,
"{ [1, 0, 0]; [a, b, c] : -1 <= -a < b <= 0 and 2c > b }" },
2190 { 0,
"{ [j, a, l] : a mod 2 = 0 and j <= 29 and a >= 2 and "
2191 "2a <= -5 + j and 32j + 2a + 2 <= 4l < 33j; "
2192 "[j, 0, l] : 4 <= j <= 29 and -3 + 33j <= 4l <= 33j }" },
2193 { 0,
"{ [0:1, 0:1]; [0, 2:3] }" },
2194 { 1,
"{ [a] : (a = 0 or ((1 + a) mod 2 = 0 and 0 < a <= 15) or "
2195 "((a) mod 2 = 0 and 0 < a <= 15)) }" },
2196 { 1,
"{ rat: [0:2]; rat: [1:3] }" },
2197 { 1,
"{ [a = 1:14] : a mod 4 = 0 and 4*floor((1 + a)/4) <= a; [0] }" },
2198 { 0,
"{ [a = 4:6, b = 1:7, 8] : a mod 2 = 1 and b mod 2 = 1;"
2199 "[a = 1:7, 1:7, a] }" },
2200 { 1,
"{ [a] : a mod 2 = 0 and (a <= 3 or a >= 12 or 4 <= a <= 11) }" },
2201 { 1,
"{ [a] : 0 < a <= 341 or "
2202 "(0 < a <= 700 and 360*floor(a/360) >= -340 + a) }" },
2203 { 0,
"{ [a] : 0 < a <= 341 or "
2204 "(0 < a <= 701 and 360*floor(a/360) >= -340 + a) }" },
2215 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2216 "[[S_L309_IN[] -> T11[]] -> ce_imag2[1, o1]] : "
2217 "(y = 201 and o1 <= 239 and o1 >= 212) or "
2218 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 198 and y >= 3 and "
2219 "o1 <= 239 and o1 >= 212)) or "
2220 "(exists (e0 = [(y)/3]: 3e0 = y and y <= 201 and y >= 3 and "
2221 "o1 <= 241 and o1 >= 240));"
2222 "[S_L220_OUT[] -> T7[]] -> "
2223 "[[S_L309_IN[] -> T11[]] -> ce_imag2[0, o1]] : "
2224 "(y = 2 and o1 <= 241 and o1 >= 212) or "
2225 "(exists (e0 = [(-2 + y)/3]: 3e0 = -2 + y and y <= 200 and "
2226 "y >= 5 and o1 <= 241 and o1 >= 212)) }";
2230 str =
"[y] -> { [S_L220_OUT[] -> T7[]] -> "
2231 "[[S_L309_IN[] -> T11[]] -> ce_imag2[o0, o1]] : "
2232 "exists (e0 = [(-1 - y + o0)/3]: 3e0 = -1 - y + o0 and "
2233 "y <= 201 and o0 <= 2 and o1 >= 212 and o1 <= 241 and "
2234 "o0 >= 3 - y and o0 <= -2 + y and o0 >= 0) }";
2277 "coalesced set not equal to input",
2295 str1 =
"{ [x, y] : x, y >= 0 and x + 2y <= 1 and 2x + y <= 1 }";
2296 str2 =
"{ [x,0] : -1 <= x <= 1 and x mod 2 = 1 }";
2317 str =
"{ [a, b, a + b] : a >= 0 and b >= 0 and 0 < a + b }";
2350 const char *s1,
const char *s2)
2374 const char *s1, *s2;
2376 s1 =
"{ [a, b] : b <= 0 or a <= 1 }";
2377 s2 =
"{ [a, b] : -1 <= -a < b }";
2388 const char *s1, *s2;
2390 s1 =
"{ [a, b, c] : b <= 0 }";
2391 s2 =
"{ [a, b, c] : -1 <= -a < b and (c >= 0 or c < 0) }";
2402 const char *s1, *s2;
2404 s1 =
"{ [a, b, c] : c <= 0 }";
2405 s2 =
"{ [a, b, c] : 0 <= a <= b <= c or (0 <= b <= c and a > 0) }";
2421 str1 =
"{ [a, b, c=0:17] : a <= 7 and 2b <= 11 - a and "
2422 "c <= -7 + 2a and 2c >= - 3 + 3a - 2b }";
2423 str2 =
"{ [a, b, c] : c > -15a and c >= -7 + 2a and c < 0 and "
2424 "3c <= -5 + 5a - 3b and 2b >= 11 - a }";
2440 str1 =
"{ [a, b, c] : 2c <= -a and b >= -a and b <= 5 and "
2441 "6c > -7a and 11c >= -5a - b and a <= 3 }";
2442 str2 =
"{ [a, b, c] : 6c > -7a and b >= -a and b <= 5 and "
2443 "11c >= -5a - b and a >= 4 and 2b <= a and 2c <= -a }";
2494 "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and "
2495 "2 x - 3 y + 3 >= 0 }");
2497 "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }");
2499 "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }");
2514 "{ [1] -> [[0,0] -> [0,1]]; [2] -> [[0,0] -> [1,1]]; "
2515 " [1] -> [[0,1] -> [1,1]]; [1] -> [[2,2] -> [3,2]]; "
2516 " [2] -> [[2,2] -> [3,3]]; [1] -> [[3,2] -> [3,3]] }");
2536 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2537 "1 <= i and i < n and 1 <= j and j < n or "
2538 "i2 = i + 1 and j2 = j - 1 and "
2539 "1 <= i and i < n and 2 <= j and j <= n }");
2546 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and "
2547 "1 <= i and i < n and 1 <= j and j < n or "
2548 "i2 = i + 1 and j2 = j - 1 and "
2549 "1 <= i and i < n and 2 <= j and j <= n }");
2553 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2554 "1 <= i and i < n and 1 <= j and j <= n and "
2555 "2 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2556 "i2 = i + k1 + k2 and j2 = j + k1 - k2 and "
2557 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1 )}");
2563 "[n] -> { [x] -> [y] : y = x + 1 and 0 <= x and x <= n and "
2564 " 0 <= y and y <= n }");
2567 "[n] -> { [x] -> [y] : y > x and 0 <= x and x <= n and "
2568 " 0 <= y and y <= n }");
2575 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j + 2 and "
2576 "1 <= i and i < n - 1 and 1 <= j and j < n - 1 or "
2577 "i2 = i + 2 and j2 = j - 2 and "
2578 "1 <= i and i < n - 1 and 3 <= j and j <= n }");
2582 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : "
2583 "1 <= i and i < n - 1 and 1 <= j and j <= n and "
2584 "3 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and "
2585 "i2 = i + 2 k1 + 2 k2 and j2 = j + 2 k1 - 2 k2 and "
2586 "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1) }");
2593 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j and "
2594 "i <= 2 j - 3 and i <= n - 2 and j <= 2 i - 1 and "
2596 "i2 = i and j2 = j + 2 and i <= 2 j - 1 and i <= n and "
2597 "j <= 2 i - 3 and j <= n - 2 or "
2598 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2599 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2606 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2607 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2609 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2610 "j <= 2 i - 4 and j <= n - 3 or "
2611 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2612 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2619 "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and "
2620 "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and "
2622 "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and "
2623 "j <= 2 i - 4 and j <= n - 3 or "
2624 "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and "
2625 "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }");
2629 "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k3,k : "
2630 "i <= 2 j - 1 and i <= n and j <= 2 i - 1 and "
2631 "j <= n and 3 + i + 2 j <= 3 n and "
2632 "3 + 2 i + j <= 3n and i2 <= 2 j2 -1 and i2 <= n and "
2633 "i2 <= 3 j2 - 4 and j2 <= 2 i2 -1 and j2 <= n and "
2634 "13 + 4 j2 <= 11 i2 and i2 = i + 3 k1 + k3 and "
2635 "j2 = j + 3 k2 + k3 and k1 >= 0 and k2 >= 0 and "
2636 "k3 >= 0 and k1 + k2 + k3 = k and k > 0) }");
2664 "{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and "
2665 "i2 = 1 and j2 = j or "
2666 "i = 0 and j = 0 and i2 = 0 and j2 = 1 }");
2672 "[m,n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 2 and "
2673 "1 <= i,i2 <= n and 1 <= j,j2 <= m or "
2674 "i2 = i + 1 and 3 <= j2 - j <= 4 and "
2675 "1 <= i,i2 <= n and 1 <= j,j2 <= m }");
2682 "[n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 1 and "
2683 "1 <= i,j,j+1 <= n or "
2684 "j = n and j2 = 1 and i2 = i + 1 and "
2685 "1 <= i,i+1 <= n }");
2689 "[n] -> { [i,j] -> [i2,j2] : 1 <= j < j2 <= n and "
2690 "1 <= i <= n and i = i2 or "
2691 "1 <= i < i2 <= n and 1 <= j <= n and "
2699 "[m,n] -> { [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 and "
2700 "1 <= x,y <= 10 or "
2701 "x2 = x + 1 and y2 = y and "
2702 "1 <= x <= 20 && 5 <= y <= 15 }");
2708 "[n] -> { [x] -> [y]: 1 <= n <= y - x <= 10 }");
2712 "[n] -> { [x] -> [y] : 1 <= n <= 10 and y >= n + x }");
2717 str =
"[n, m] -> { [i0, i1, i2, i3] -> [o0, o1, o2, o3] : "
2718 "i3 = 1 and o0 = i0 and o1 = -1 + i1 and o2 = -1 + i2 and "
2719 "o3 = -2 + i2 and i1 <= -1 + i0 and i1 >= 1 - m + i0 and "
2720 "i1 >= 2 and i1 <= n and i2 >= 3 and i2 <= 1 + n and i2 <= m }";
2729 str =
"{[0] -> [1]; [2] -> [3]}";
2738 str =
"[n] -> { [[i0, i1, 1, 0, i0] -> [i5, 1]] -> "
2739 "[[i0, -1 + i1, 2, 0, i0] -> [-1 + i5, 2]] : "
2740 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 2 and "
2741 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2742 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2743 "[[i0, i1, 2, 0, i0] -> [i5, 1]] -> "
2744 "[[i0, i1, 1, 0, i0] -> [-1 + i5, 2]] : "
2745 "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 1 and "
2746 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2747 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2748 "[[i0, i1, 1, 0, i0] -> [i5, 2]] -> "
2749 "[[i0, -1 + i1, 2, 0, i0] -> [i5, 1]] : "
2750 "exists (e0 = [(3 - n)/3]: i1 >= 2 and i5 >= 1 and "
2751 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2752 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); "
2753 "[[i0, i1, 2, 0, i0] -> [i5, 2]] -> "
2754 "[[i0, i1, 1, 0, i0] -> [i5, 1]] : "
2755 "exists (e0 = [(3 - n)/3]: i5 >= 1 and i1 >= 1 and "
2756 "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and "
2757 "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n) }";
2821 "expecting non-empty result",
return -1);
2833 {
"{ [x] -> [y] : x <= y <= 10; [x] -> [5] : -8 <= x <= 8 }",
2834 "{ [x] -> [5] : 6 <= x <= 8; "
2835 "[x] -> [x] : x <= 5 or (9 <= x <= 10) }" },
2836 {
"{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }",
2837 "{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }" },
2838 {
"{ [x] -> [y] : x = 4y; [x] -> [y] : x = 2y }",
2839 "{ [x] -> [y] : (4y = x and x >= 0) or "
2840 "(exists (e0 = [(x)/4], e1 = [(-2 + x)/4]: 2y = x and "
2841 "4e1 = -2 + x and 4e0 <= -1 + x and 4e0 >= -3 + x)) or "
2842 "(exists (e0 = [(x)/4]: 2y = x and 4e0 = x and x <= -4)) }" },
2843 {
"{ T[a] -> S[b, c] : a = 4b-2c and c >= b }",
2844 "{ T[a] -> S[b, c] : 2b = a and 2c = a }" },
2846 {
"[K, N] -> { [x, y] -> [a, b] : K+2<=N<=K+4 and x>=4 and "
2847 "2N-6<=x<K+N and N-1<=a<=K+N-1 and N+b-6<=a<=2N-4 and "
2848 "b<=2N-3K+a and 3b<=4N-K+1 and b>=N and a>=x+1 }",
2849 "[K, N] -> { [x, y] -> [1 + x, N] : x >= -6 + 2N and "
2850 "x <= -5 + 2N and x >= -1 + 3K - N and x <= -2 + K + N and "
2852 {
"{ [i, k, j] -> [a, b, c, d] : 8*floor((b)/8) = b and k <= 255 and "
2853 "a <= 255 and c <= 255 and d <= 255 - j and "
2854 "255 - j <= 7d <= 7 - i and 240d <= 239 + a and "
2855 "247d <= 247 + k - j and 247d <= 247 + k - b and "
2856 "247d <= 247 + i and 248 - b <= 248d <= c and "
2857 "254d >= i - a + b and 254d >= -a + b and "
2858 "255d >= -i + a - b and 1792d >= -63736 + 257b }",
2860 "[-127762 + i + 502j, -62992 + 248j, 63240 - 248j, 255 - j] : "
2861 "k <= 255 and 7j >= 1778 + i and 246j >= 62738 - k and "
2862 "247j >= 62738 - i and 509j <= 129795 + i and "
2863 "742j >= 188724 - i; "
2864 "[0, k, j] -> [1, 0, 248, 1] : k <= 255 and 248 <= j <= 254, k }" },
2865 {
"{ [a] -> [b] : 0 <= b <= 255 and -509 + a <= 512b < a and "
2866 "16*floor((8 + b)/16) <= 7 + b; "
2868 "{ [a] -> [b = 1] : a >= 510 or a <= 0; "
2869 "[a] -> [b = 0] : 0 < a <= 509 }" },
2870 {
"{ rat: [i] : 1 <= 2i <= 9 }",
"{ rat: [i] : 2i = 1 }" },
2871 {
"{ rat: [i] : 1 <= 2i <= 9 or i >= 10 }",
"{ rat: [i] : 2i = 1 }" },
2872 {
"{ rat: [i] : 21 <= 2i <= 29 or i = 5 }",
"{ rat: [5] }" },
2886 str =
"[p0, p1] -> { [] -> [] : "
2887 "exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], "
2888 "e4 = [(p1)/3], e5 = [(p1 + 3e4)/3]: "
2889 "3e0 >= -2 + 2p1 and 3e0 >= p1 and 3e3 >= 1 - p1 + 3e0 and "
2890 "3e0 <= 2p1 and 3e3 >= -2 + p1 and 3e3 <= -1 + p1 and p1 >= 3 and "
2891 "3e5 >= -2 + 2p1 and 3e5 >= p1 and 3e5 <= -1 + p1 + 3e4 and "
2892 "3e4 <= p1 and 3e4 >= -2 + p1 and e3 <= -1 + e0 and "
2893 "3e4 >= 6 - p1 + 3e1 and 3e1 >= p1 and 3e5 >= -2 + p1 + 3e4 and "
2894 "2e4 >= 3 - p1 + 2e1 and e4 <= e1 and 3e3 <= 2 - p1 + 3e0 and "
2895 "e5 >= 1 + e1 and 3e4 >= 6 - 2p1 + 3e1 and "
2896 "p0 >= 2 and p1 >= p0 and 3e2 >= p1 and 3e4 >= 6 - p1 + 3e2 and "
2897 "e2 <= e1 and e3 >= 1 and e4 <= e2) }";
2904 str =
"[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and "
2905 "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }";
2908 str =
"[C] -> { [obj,a,b,c] : C = 8 }";
2926 "unexpected result",
return -1);
2929 str =
"{ [i] -> [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
2930 " 8i' <= i and 8i' >= -7 + i }";
2939 str =
"[i] -> { [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and "
2940 " 8i' <= i and 8i' >= -7 + i }";
2951 "unexpected difference between set and "
2952 "piecewise affine expression",
return -1);
2965 {
"{ [-1] -> [-1]; [1] -> [1] }",
"{ [1] }" },
2966 {
"{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] : "
2967 "0 <= a, b <= 100 and b mod 2 = 0}",
"{ [30] }" },
2968 {
"[N] -> { [i,j] -> A[i, -i, i + j] : 0 <= i,j <= N <= 10 }",
2969 "{ A[10, 0, 20] }" },
2970 {
"[N] -> {A[N, -N, 2N] : 0 <= N }",
"{ A[infty, 0, infty] }" },
2986 isl_multi_val_free(mv);
3010 str =
"{ [a, b] : a >= 2 and b >= 0 and 14 - a <= b <= 9 }";
3012 str =
"{ [a, b] : 1 <= a, b and a + b <= 1 }";
3043 str =
"{ [i, j, k] : 2j = i and 2k = i + 1 and i >= 2 }";
3095 const char *s1, *s2;
3097 s1 =
"[N=0:] -> { [1, 3N:] }";
3098 s2 =
"[N=0:] -> { [10, 2N:] }";
3116 {
"{ [a, b] : 0 <= a, b <= 100 and b mod 2 = 0}",
3117 "{ [a, b] -> [floor((b - 2*floor((-a)/4))/5)] }",
3148 "unexpected optimum",
return -1);
3167 void *dep_user,
void *
user)
3181 int depth = *(
int *)first;
3209 "result not as expected",
return -1);
3290 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3294 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3298 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3309 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10); "
3310 " [1,10,0] -> [2,5,0] }";
3312 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3320 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3324 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3328 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3339 str =
"{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10) }";
3341 str =
"{ [0,5,0] -> [2,5,0]; [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3349 str =
"{ [2,i,0] -> [i] : 0 <= i <= 10 }";
3353 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3357 str =
"{ [1,i,0] -> [5] : 0 <= i <= 10 }";
3368 str =
"{ [0,i,0] -> [2,i,0] : 0 <= i <= 10; "
3369 " [1,i,0] -> [2,5,0] : 0 <= i <= 10 }";
3371 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3379 str =
"{ [0,i,2] -> [i] : 0 <= i <= 10 }";
3383 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3387 str =
"{ [0,i,1] -> [5] : 0 <= i <= 10 }";
3398 str =
"{ [0,i,0] -> [0,i,2] : 0 <= i <= 10; "
3399 " [0,i,1] -> [0,5,2] : 0 <= i <= 5 }";
3401 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3409 str =
"{ [0,i,1] -> [i] : 0 <= i <= 10 }";
3413 str =
"{ [0,i,0] -> [i] : 0 <= i <= 10 }";
3417 str =
"{ [0,i,2] -> [5] : 0 <= i <= 10 }";
3428 str =
"{ [0,i,0] -> [0,i,1] : 0 <= i <= 10; "
3429 " [0,i,2] -> [0,5,1] : 0 <= i <= 4 }";
3431 str =
"{ [i,j,k] -> [l,m,n] : 1 = 0 }";
3441 str =
"{ [1,i,0,0,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3445 str =
"{ [0,i,0,j,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }";
3456 str =
"{ [0,i,0,j,0] -> [1,i,0,0,0] : 0 <= i,j <= 10 }";
3458 str =
"{ [0,0,0,0,0] -> [0,0,0,0,0] : 1 = 0 }";
3479 str =
"{ S0[j] -> i[]; S1[j,i] -> i[]; S2[] -> i[]; S3[] -> i[] }";
3481 str =
"{ S0[j] -> [0,j,0,0] : 0 <= j < 10; "
3482 "S1[j,i] -> [0,j,1,i] : 0 <= j < i < 10; "
3483 "S2[] -> [1,0,0,0]; "
3484 "S3[] -> [-1,0,0,0] }";
3488 &must_dep, &may_dep, NULL, NULL);
3499 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }", 1 },
3500 {
"[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }", 0 },
3501 {
"{ [i] -> [3*floor(i/2) + 5*floor(i/3)] }", 1 },
3502 {
"{ S1[i] -> [i] : 0 <= i <= 9; S2[i] -> [i] : 0 <= i <= 9 }", 1 },
3503 {
"{ [i] -> S1[i] : 0 <= i <= 9; [i] -> S2[i] : 0 <= i <= 9 }", 0 },
3504 {
"{ A[i] -> [i]; B[i] -> [i]; B[i] -> [i + 1] }", 0 },
3505 {
"{ A[i] -> [i]; B[i] -> [i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3506 {
"{ A[i] -> [i]; B[i] -> A[i] : i < 0; B[i] -> [i + 1] : i > 0 }", 1 },
3507 {
"{ A[i] -> [i]; B[i] -> [j] : i - 1 <= j <= i }", 0 },
3524 "map not detected as single valued",
return -1);
3527 "map detected as single valued",
return -1);
3537 {
"[N,M]->{[i,j] -> [i]}", 0 },
3538 {
"[N,M]->{[i,j] -> [i] : j=i}", 1 },
3539 {
"[N,M]->{[i,j] -> [i] : j=0}", 1 },
3540 {
"[N,M]->{[i,j] -> [i] : j=N}", 1 },
3541 {
"[N,M]->{[i,j] -> [j,i]}", 1 },
3542 {
"[N,M]->{[i,j] -> [i+j]}", 0 },
3543 {
"[N,M]->{[i,j] -> []}", 0 },
3544 {
"[N,M]->{[i,j] -> [i,j,N]}", 1 },
3545 {
"[N,M]->{[i,j] -> [2i]}", 0 },
3546 {
"[N,M]->{[i,j] -> [i,i]}", 0 },
3547 {
"[N,M]->{[i,j] -> [2i,i]}", 0 },
3548 {
"[N,M]->{[i,j] -> [2i,j]}", 1 },
3549 {
"[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1 },
3566 "map not detected as bijective",
return -1);
3569 "map detected as bijective",
return -1);
3583 {
"{ [i] -> i }",
"{ [k] : exists a : k = 2a }",
"{ [i] -> i }" },
3584 {
"{ [i] -> i + [ (i + [i/3])/2 ] }",
"{ [10] }",
"{ [i] -> 16 }" },
3585 {
"{ [i] -> ([(i)/2]) }",
"{ [k] : exists a : k = 2a+1 }",
3586 "{ [i] -> -1/2 + 1/2 * i }" },
3587 {
"{ [i] -> i^2 : i != 0 }",
"{ [i] : i != 0 }",
"{ [i] -> i^2 }" },
3588 {
"{ [i] -> i^2 : i > 0; [i] -> i^2 : i < 0 }",
"{ [i] : i != 0 }",
3633 str =
"{ [x=2:9, y] -> floor((x + 1)/4)^3 - floor((2x)/3)^2 }";
3655 str =
"{ [i,j,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3661 str =
"[j] -> { [i,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }";
3673 str =
"{ [i] -> ([([i/2] + [i/2])/5]) }";
3675 str =
"{ [i] -> ([(2 * [i/2])/5]) }";
3684 str =
"{ [x] -> ([x/2] + [(x+1)/2]) }";
3686 str =
"{ [x] -> x }";
3695 str =
"{ [i] -> ([i/2]) : i >= 0; [i] -> ([i/3]) : i < 0 }";
3703 str =
"{ [a,b,a] -> (([(2*[a/3]+b)/5]) * ([(2*[a/3]+b)/5])) }";
3705 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3717 str =
"{ [a,b,c] -> (([(2*[a/3]+1)/5]) * ([(2*[c/3]+1)/5])) : b = 1 }";
3719 str =
"{ [a,b,c] -> (([(2*[a/3]+b)/5]) * ([(2*[c/3]+b)/5])) }";
3742 str =
"{ [U,V] -> 1/3 * U + 2/3 * V - [(U + 2V)/3] + [U/2] : "
3743 "U + 2V + 3 >= 0 and - U -2V >= 0 and - U + 10 >= 0 and "
3744 "U >= 0; [U,V] -> U^2 : U >= 100 }";
3764 str =
"{ [i] : 0 <= i <= 1 }";
3766 str =
"{ [1] -> [0] }";
3781 str =
"{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }";
3783 str =
"{ A[i]; B[i] }";
3818 { 0,
isl_fold_max,
"{ [m, n] -> -m * n }",
"{ max(infty) }" },
3820 "{ [a, b, c, d] -> max(0) }" },
3821 { 1,
isl_fold_max,
"{ [[x] -> [x]] -> 1 : exists a : x = 2 a }",
3822 "{ [x] -> max(1) : x mod 2 = 0 }" },
3823 { 1,
isl_fold_min,
"{ [x=5:10] -> (x + 2)^2 }",
"{ min(49) }" },
3826 "{ [m] -> max(m^2) : m >= 0 }" },
3827 { 1,
isl_fold_max,
"{ [[a=0:1] -> [b=0:1]] -> (floor((a + b)/2)) }",
3828 "{ [a=0:1] -> max(a) }" },
3841 str =
"{ [[c] -> [c]] }";
3843 str =
"{ [[a] -> [b]] -> 1 }";
3881 "incorrect bound result",
return -1);
3884 "bound unexpectedly not tight",
return -1);
3895#define EL_BASE basic_map
3901#define EL_BASE basic_set
3902#define SET_BASE union_set
3908#define SET_BASE union_set
3913#define EL_BASE basic_map
3920#define SET_BASE union_map
3927 if (test_get_list_basic_map_from_set(ctx,
"{ [0]; [2]; [3] }"))
3929 if (test_get_list_basic_set_from_union_set(ctx,
"{ A[0]; B[2]; B[3] }"))
3931 if (test_get_list_set_from_union_set(ctx,
"{ A[0]; A[2]; B[3] }"))
3933 if (test_get_list_basic_map_from_map(ctx,
3934 "{ [0] -> [0]; [2] -> [0]; [3] -> [0] }"))
3936 if (test_get_list_map_from_union_map(ctx,
3937 "{ A[0] -> [0]; A[2] -> [0]; B[3] -> [0] }"))
3949 str =
"{ [i0] : exists e0 : i0 = 4e0 }";
3972 str =
"{ [a, b, c, d] : "
3973 "exists (e0 = floor((a + d)/4), e1 = floor((d)/4), "
3974 "e2 = floor((-a - d + 4 *floor((a + d)/4))/10), "
3975 "e3 = floor((-d + 4*floor((d)/4))/10): "
3976 "10e2 = -a - 2c - d + 4e0 and 10e3 = -2c - d + 4e1 and "
3977 "b >= 0 and a <= 0 and b <= a) }";
3991 "set is not considered to be a subset of itself",
4003 "{ [i0, i1] : exists (e0 = [(i0 - i1)/16], e1: "
4004 "16e0 <= i0 - i1 and 16e0 >= -15 + i0 - i1 and "
4005 "16e1 <= i1 and 16e0 >= -i1 and 16e1 >= -i0 + i1) }", 1 },
4007 "{ [i] : exists (e0 = [(255i)/256], e1 = [(127i + 65e0)/191], "
4008 "e2 = [(3i + 61e1)/65], e3 = [(52i + 12e2)/61], "
4009 "e4 = [(2i + e3)/3], e5 = [(4i + e3)/4], e6 = [(8i + e3)/12]: "
4010 "3e4 = 2i + e3 and 4e5 = 4i + e3 and 12e6 = 8i + e3 and "
4011 "i <= 255 and 64e3 >= -45 + 67i and i >= 0 and "
4012 "256e0 <= 255i and 256e0 >= -255 + 255i and "
4013 "191e1 <= 127i + 65e0 and 191e1 >= -190 + 127i + 65e0 and "
4014 "65e2 <= 3i + 61e1 and 65e2 >= -64 + 3i + 61e1 and "
4015 "61e3 <= 52i + 12e2 and 61e3 >= -60 + 52i + 12e2) }", 1 },
4016 {
"{ [i] : 0 <= i <= 10 }",
"{ rat: [i] : 0 <= i <= 10 }", 1 },
4017 {
"{ rat: [i] : 0 <= i <= 10 }",
"{ [i] : 0 <= i <= 10 }", 0 },
4018 {
"{ rat: [0] }",
"{ [i] : 0 <= i <= 10 }", 1 },
4019 {
"{ rat: [(1)/2] }",
"{ [i] : 0 <= i <= 10 }", 0 },
4020 {
"{ [t, i] : (exists (e0 = [(2 + t)/4]: 4e0 <= 2 + t and "
4021 "4e0 >= -1 + t and i >= 57 and i <= 62 and "
4022 "4e0 <= 62 + t - i and 4e0 >= -61 + t + i and "
4023 "t >= 0 and t <= 511 and 4e0 <= -57 + t + i and "
4024 "4e0 >= 58 + t - i and i >= 58 + t and i >= 62 - t)) }",
4025 "{ [i0, i1] : (exists (e0 = [(4 + i0)/4]: 4e0 <= 62 + i0 - i1 and "
4026 "4e0 >= 1 + i0 and i0 >= 0 and i0 <= 511 and "
4027 "4e0 <= -57 + i0 + i1)) or "
4028 "(exists (e0 = [(2 + i0)/4]: 4e0 <= i0 and "
4029 "4e0 >= 58 + i0 - i1 and i0 >= 2 and i0 <= 511 and "
4030 "4e0 >= -61 + i0 + i1)) or "
4031 "(i1 <= 66 - i0 and i0 >= 2 and i1 >= 59 + i0) }", 1 },
4032 {
"[a, b] -> { : a = 0 and b = -1 }",
"[b, a] -> { : b >= -10 }", 1 },
4054 "incorrect subset result",
return -1);
4069 str =
"{ [a] : (exists (e0, e1, e2: 1056e1 <= 32 + a - 33e0 and "
4070 "1089e1 >= a - 33e0 and 1089e1 <= 1 + a - 33e0 and "
4071 "33e2 >= -a + 33e0 + 1056e1 and "
4072 "33e2 < -2a + 66e0 + 2112e1)) or a = 0 }";
4085 {
"{ A[i] -> B[i] }",
"{ A[i] }",
"{ }" },
4086 {
"{ A[i] -> B[i] }",
"{ B[i] }",
"{ A[i] -> B[i] }" },
4087 {
"{ A[i] -> B[i] }",
"{ A[i] : i > 0 }",
"{ A[i] -> B[i] : i <= 0 }" },
4116 "incorrect subtract domain result",
return -1);
4134 "incorrect subtract domain result",
return -1);
4155 if (n1 < 0 || n2 < 0)
4159 "number of constraints of empty set changed",
4174 for (i = 0; i < 100; ++i)
4200 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7] : 3i5 <= 2 - 2i0 and "
4201 "i0 >= -2 and i6 >= 1 + i3 and i7 >= 0 and 3i5 >= -2i0 and "
4202 "2i4 <= i2 and i6 >= 1 + 2i0 + 3i1 and i4 <= -1 and "
4203 "i6 >= 1 + 2i0 + 3i5 and i6 <= 2 + 2i0 + 3i5 and "
4204 "3i5 <= 2 - 2i0 - i2 + 3i4 and i6 <= 2 + 2i0 + 3i1 and "
4205 "i0 <= -1 and i7 <= i2 + i3 - 3i4 - i6 and "
4206 "3i5 >= -2i0 - i2 + 3i4 }";
4213 "failed to construct factorizer",
return -1);
4215 str =
"{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : "
4216 "i12 <= 2 + i0 - i11 and 2i8 >= -i4 and i11 >= i1 and "
4217 "3i5 <= -i2 and 2i11 >= -i4 - 2i7 and i11 <= 3 + i0 + 3i9 and "
4218 "i11 <= -i4 - 2i7 and i12 >= -i10 and i2 >= -2 and "
4219 "i11 >= i1 + 3i10 and i11 >= 1 + i0 + 3i9 and "
4220 "i11 <= 1 - i4 - 2i8 and 6i6 <= 6 - i2 and 3i6 >= 1 - i2 and "
4221 "i11 <= 2 + i1 and i12 <= i4 + i11 and i12 >= i0 - i11 and "
4222 "3i5 >= -2 - i2 and i12 >= -1 + i4 + i11 and 3i3 <= 3 - i2 and "
4223 "9i6 <= 11 - i2 + 6i5 and 3i3 >= 1 - i2 and "
4224 "9i6 <= 5 - i2 + 6i3 and i12 <= -1 and i2 <= 0 }";
4231 "failed to construct factorizer",
return -1);
4238 int *injective =
user;
4243 if (*injective < 0 || !*injective)
4250 const char *r,
const char *s,
int tilable,
int parallel)
4267 int is_nonneg, is_parallel, is_tilable, is_injection, is_complete;
4282 &dep_raw, NULL, NULL, NULL);
4287 &dep_waw, &dep_war, NULL, NULL);
4335 for (i = 0; i < tilable; ++i)
4341 for (i = 0; i < parallel; ++i)
4350 for (i = 0; i < dim; ++i)
4362 if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 ||
4363 is_injection < 0 || is_complete < 0)
4367 "generated schedule incomplete",
return -1);
4370 "generated schedule not injective on each statement",
4374 "negative dependences in generated schedule",
4378 "generated schedule not as tilable as expected",
4382 "generated schedule not as parallel as expected",
4393 const char *
domain,
const char *validity,
const char *proximity,
4423 const char *
domain,
const char *validity,
const char *proximity)
4433 const char *validity,
const char *proximity)
4446 const char *validity,
const char *proximity,
const char *expected_sched)
4481 str =
"[N] -> { S0[i] : 0 <= i <= N; S1[i, j] : 0 <= i, j <= N }";
4520 str =
"[n] -> { C[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4521 "A[k] : k >= 1 and k <= -1 + n; "
4522 "B[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k; "
4523 "D[k, i] : k <= -1 + n and i >= 0 and i <= -1 + k }";
4526 str =
"[n] -> { D[k, i] -> C[1 + k, k - i] : "
4527 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4528 "D[k, i] -> C[1 + k, i] : "
4529 "k <= -2 + n and i >= 1 and i <= -1 + k; "
4530 "D[k, 0] -> C[1 + k, k] : k >= 1 and k <= -2 + n; "
4531 "D[k, 0] -> C[1 + k, 0] : k >= 1 and k <= -2 + n }";
4534 str =
"[n] -> { C[k, i] -> D[k, i] : "
4535 "0 <= i <= -1 + k and k <= -1 + n }";
4538 str =
"[n] -> { [D[k, i] -> a[]] -> [C[1 + k, k - i] -> b[]] : "
4539 "i <= -1 + k and i >= 1 and k <= -2 + n; "
4540 "[B[k, i] -> c[]] -> [B[k, 1 + i] -> c[]] : "
4541 "k <= -1 + n and i >= 0 and i <= -2 + k }";
4543 str =
"[n] -> { [B[k, i] -> e[]] -> [D[k, i] -> a[]] : "
4544 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4545 "[C[k, i] -> b[]] -> [D[k', -1 + k - i] -> a[]] : "
4546 "i >= 0 and i <= -1 + k and k <= -1 + n and "
4547 "k' <= -1 + n and k' >= k - i and k' >= 1 + k; "
4548 "[C[k, i] -> b[]] -> [D[k, -1 + k - i] -> a[]] : "
4549 "i >= 0 and i <= -1 + k and k <= -1 + n; "
4550 "[B[k, i] -> c[]] -> [A[k'] -> d[]] : "
4551 "k <= -1 + n and i >= 0 and i <= -1 + k and "
4552 "k' >= 1 and k' <= -1 + n and k' >= 1 + k }";
4557 str =
"{ D[2,0] -> [] }";
4560 str =
"{ C[2,1] -> [] }";
4574 "conditional validity not respected",
return -1);
4597 str =
"{ A[0, i] : 0 <= i <= 10; B[1, i] : 0 <= i <= 10 }";
4600 str =
"{ B[1, i] -> A[0, i + 1] }";
4602 str =
"{ A[0, i] -> B[1, i - 1] }";
4622 "conditional validity constraints not satisfied",
4662 {
"{ S[i] : 0 <= 1 < 100; T[i] : 0 <= 1 < 100 }",
4663 "{ S[i] -> S[i+1] : 0 <= i < 99 }",
4664 "{ [S[i] -> B[]] -> [S[i+1] -> B[]] : 0 <= i < 99 }",
4665 "{ [S[i] -> A[]] -> [T[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4666 "[T[i] -> A[]] -> [S[i'] -> A[]] : 0 <= i', i < 100 and i != i';"
4667 "[S[i] -> A[]] -> [S[i+1] -> A[]] : 0 <= i < 99 }",
4671 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4672 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4673 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4674 "[n] -> { [S1[i,j] -> t[]] -> [S2[i,j] -> t[]] : 0 <= i,j < n;"
4675 "[S2[i,j] -> x1[]] -> [S2[i,j+1] -> x1[]] : "
4676 "0 <= i < n and 0 <= j < n - 1 }",
4677 "[n] -> { [S2[i,j] -> t[]] -> [S1[i,j'] -> t[]] : "
4678 "0 <= i < n and 0 <= j < j' < n;"
4679 "[S2[i,j] -> t[]] -> [S1[i',j'] -> t[]] : "
4680 "0 <= i < i' < n and 0 <= j,j' < n;"
4681 "[S2[i,j] -> x1[]] -> [S2[i,j'] -> x1[]] : "
4682 "0 <= i,j,j' < n and j < j' }",
4686 {
"[n] -> { S1[i,j] : 0 <= i,j < n; S2[i,j] : 0 <= i,j < n }",
4687 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4688 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4689 "[n] -> { S1[i,j] -> S2[i,j] : 0 <= i,j < n;"
4690 "S2[i,j] -> S2[i,j+1] : 0 <= i < n and 0 <= j < n - 1 }",
4691 "[n] -> { S2[i,j] -> S1[i,j'] : 0 <= i < n and 0 <= j < j' < n;"
4692 "S2[i,j] -> S1[i',j'] : 0 <= i < i' < n and 0 <= j,j' < n;"
4693 "S2[i,j] -> S2[i,j'] : 0 <= i,j,j' < n and j < j' }",
4697 {
"{ S1[i,0] : 0 <= i <= 1; S2[i,j] : 0 <= i <= 1 and 1 <= j <= 2;"
4698 "S3[i,3] : 0 <= i <= 1 }",
4699 "{ S1[i,0] -> S2[i,1] : 0 <= i <= 1;"
4700 "S2[i,1] -> S2[i,2] : 0 <= i <= 1;"
4701 "S2[i,2] -> S3[i,3] : 0 <= i <= 1 }",
4702 "{ [S1[i,0]->t[]] -> [S2[i,1]->t[]] : 0 <= i <= 1;"
4703 "[S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4704 "[S2[i,2]->t[]] -> [S3[i,3]->t[]] : 0 <= i <= 1 }",
4705 "{ [S2[i,1]->t[]] -> [S2[i,2]->t[]] : 0 <= i <= 1;"
4706 "[S2[0,j]->t[]] -> [S2[1,j']->t[]] : 1 <= j,j' <= 2;"
4707 "[S2[0,j]->t[]] -> [S1[1,0]->t[]] : 1 <= j <= 2;"
4708 "[S3[0,3]->t[]] -> [S2[1,j]->t[]] : 1 <= j <= 2;"
4709 "[S3[0,3]->t[]] -> [S1[1,0]->t[]] }",
4763 "unexpected number of members in outer band",
4778 const char *
domain, *dep;
4783 domain =
"{ B[i0, i1] : 0 <= i0 <= 1 and 0 <= i1 <= 11; "
4784 "A[i0] : 0 <= i0 <= 1 }";
4785 dep =
"{ B[i0, i1] -> B[i0, 1 + i1] : 0 <= i0 <= 1 and 0 <= i1 <= 10; "
4786 "B[0, 11] -> A[1]; A[i0] -> B[i0, 0] : 0 <= i0 <= 1 }";
4801 "dependences not strongly satisfied",
return -1);
4815 domain =
"[n] -> { A[] : n >= 0 }";
4816 context =
"[n] -> { : n < 0 }";
4834 const char *
domain, *dep;
4839 int treat_coalescing;
4841 domain =
"{ S[a, b] : 0 <= a <= 1 and 0 <= b <= 1 }";
4842 dep =
"{ S[a, b] -> S[a + b, 1 - b] }";
4867 const char *D, *V, *P, *
S;
4869 D =
"[n] -> { S[t,i,j,k] : 0 <= t,i,j,k < n }";
4870 V =
"[n] -> { S[t,i,j,k] -> S[t+1,a,b,c] : 0 <= t,i,j,k,a,b,c < n and "
4871 "-2 <= a-i <= 2 and -1 <= a-i + b-j <= 1 and "
4872 "-1 <= a-i + b-j + c-k <= 1 }";
4874 S =
"{ S[t,i,j,k] -> [t, 2t + i, t + i + j, 2t + k] }";
4881 const char *D, *W, *R, *V, *P, *
S;
4882 int max_coincidence;
4883 int treat_coalescing;
4890 D =
"[T,N] -> { S1[t,i] : 1 <= t <= T and 2 <= i <= N - 1 }";
4891 W =
"{ S1[t,i] -> a[t,i] }";
4892 R =
"{ S1[t,i] -> a[t-1,i]; S1[t,i] -> a[t-1,i-1]; "
4893 "S1[t,i] -> a[t-1,i+1] }";
4894 S =
"{ S1[t,i] -> [t,i] }";
4899 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and j >= 2 and "
4901 W =
"[N] -> { S_0[i, j] -> a[i, j] : i >= 0 and i <= -1 + N and "
4902 "j >= 2 and j <= -1 + N }";
4903 R =
"[N] -> { S_0[i, j] -> a[j, i] : i >= 0 and i <= -1 + N and "
4904 "j >= 2 and j <= -1 + N; "
4905 "S_0[i, j] -> a[i, -1 + j] : i >= 0 and i <= -1 + N and "
4906 "j >= 2 and j <= -1 + N }";
4907 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
4911 D =
"{ S1[i] : 0 <= i <= 10; S2[i] : 0 <= i <= 9 }";
4912 W =
"{ S1[i] -> a[i] }";
4913 R =
"{ S2[i] -> a[i+1] }";
4914 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4918 D =
"{ S1[i] : 0 <= i < 10; S2[i] : 0 <= i < 10 }";
4919 W =
"{ S1[i] -> a[i] }";
4920 R =
"{ S2[i] -> a[9-i] }";
4921 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4925 D =
"[N] -> { S1[i] : 0 <= i < N; S2[i] : 0 <= i < N }";
4926 W =
"{ S1[i] -> a[i] }";
4927 R =
"[N] -> { S2[i] -> a[N-1-i] }";
4928 S =
"{ S1[i] -> [0,i]; S2[i] -> [1,i] }";
4932 D =
"{ S1[i] : 0 < i < 10; S2[i] : 0 <= i < 10 }";
4933 W =
"{ S1[i] -> a[i]; S2[i] -> b[i] }";
4934 R =
"{ S2[i] -> a[i]; S1[i] -> b[i-1] }";
4935 S =
"{ S1[i] -> [i,0]; S2[i] -> [i,1] }";
4939 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
4940 W =
"{ S1[i] -> a[0,i]; S2[i,j] -> a[i,j] }";
4941 R =
"{ S2[i,j] -> a[i-1,j] }";
4942 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
4946 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }";
4947 W =
"{ S1[i] -> a[i,0]; S2[i,j] -> a[i,j] }";
4948 R =
"{ S2[i,j] -> a[i,j-1] }";
4949 S =
"{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }";
4953 D =
"[N] -> { S_0[]; S_1[i] : i >= 0 and i <= -1 + N; S_2[] }";
4954 W =
"[N] -> { S_0[] -> a[0]; S_2[] -> b[0]; "
4955 "S_1[i] -> a[1 + i] : i >= 0 and i <= -1 + N }";
4956 R =
"[N] -> { S_2[] -> a[N]; S_1[i] -> a[i] : i >= 0 and i <= -1 + N }";
4957 S =
"[N] -> { S_1[i] -> [1, i, 0]; S_2[] -> [2, 0, 1]; "
4958 "S_0[] -> [0, 0, 0] }";
4966 D =
"[N] -> { S1[i] : 1 <= i <= N; S2[i] : 1 <= i <= N; "
4967 "S3[i,j] : 1 <= i,j <= N; S4[i] : 1 <= i <= N }";
4968 W =
"{ S1[i] -> a[i,0]; S2[i] -> a[0,i]; S3[i,j] -> a[i,j] }";
4969 R =
"[N] -> { S3[i,j] -> a[i-1,j]; S3[i,j] -> a[i,j-1]; "
4970 "S4[i] -> a[i,N] }";
4971 S =
"{ S1[i] -> [0,i,0]; S2[i] -> [1,i,0]; S3[i,j] -> [2,i,j]; "
4972 "S4[i] -> [4,i,0] }";
4979 D =
"[N] -> { S_0[i, j] : i >= 1 and i <= N and j >= 1 and j <= N }";
4980 W =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
4982 R =
"[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and "
4984 "S_0[i, j] -> a[i, j] : i >= 1 and i <= N and j >= 1 and "
4986 S =
"[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }";
4990 D =
"[N] -> { S_0[t] : t >= 0 and t <= -1 + N; "
4991 " S_2[t] : t >= 0 and t <= -1 + N; "
4992 " S_1[t, i] : t >= 0 and t <= -1 + N and i >= 0 and "
4994 W =
"[N] -> { S_0[t] -> a[t, 0] : t >= 0 and t <= -1 + N; "
4995 " S_2[t] -> b[t] : t >= 0 and t <= -1 + N; "
4996 " S_1[t, i] -> a[t, 1 + i] : t >= 0 and t <= -1 + N and "
4997 "i >= 0 and i <= -1 + N }";
4998 R =
"[N] -> { S_1[t, i] -> a[t, i] : t >= 0 and t <= -1 + N and "
4999 "i >= 0 and i <= -1 + N; "
5000 " S_2[t] -> a[t, N] : t >= 0 and t <= -1 + N }";
5001 S =
"[N] -> { S_2[t] -> [0, t, 2]; S_1[t, i] -> [0, t, 1, i, 0]; "
5002 " S_0[t] -> [0, t, 0] }";
5011 D =
"[N] -> { S1[i,j] : 0 <= i,j < N; S2[i,j] : 0 <= i,j < N }";
5012 S =
"{ S1[i,j] -> [0,i,j]; S2[i,j] -> [1,i,j] }";
5016 D =
"[M, N] -> { S_1[i] : i >= 0 and i <= -1 + M; "
5017 "S_0[i, j] : i >= 0 and i <= -1 + M and j >= 0 and j <= -1 + N }";
5018 W =
"[M, N] -> { S_0[i, j] -> a[j] : i >= 0 and i <= -1 + M and "
5019 "j >= 0 and j <= -1 + N; "
5020 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5021 R =
"[M, N] -> { S_0[i, j] -> a[0] : i >= 0 and i <= -1 + M and "
5022 "j >= 0 and j <= -1 + N; "
5023 "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }";
5024 S =
"[M, N] -> { S_1[i] -> [1, i, 0]; S_0[i, j] -> [0, i, 0, j, 0] }";
5028 D =
"{ S_0[i] : i >= 0 }";
5029 W =
"{ S_0[i] -> a[i] : i >= 0 }";
5030 R =
"{ S_0[i] -> a[0] : i >= 0 }";
5031 S =
"{ S_0[i] -> [0, i, 0] }";
5035 D =
"{ S_0[i] : i >= 0; S_1[i] : i >= 0 }";
5036 W =
"{ S_0[i] -> a[i] : i >= 0; S_1[i] -> b[i] : i >= 0 }";
5037 R =
"{ S_0[i] -> b[0] : i >= 0; S_1[i] -> a[i] : i >= 0 }";
5038 S =
"{ S_1[i] -> [0, i, 1]; S_0[i] -> [0, i, 0] }";
5042 D =
"[n] -> { S_0[j, k] : j <= -1 + n and j >= 0 and "
5043 "k <= -1 + n and k >= 0 }";
5044 W =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " "k <= -1 + n and k >= 0 }";
5045 R =
"[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and "
5046 "k <= -1 + n and k >= 0; "
5047 "S_0[j, k] -> B[k] : j <= -1 + n and j >= 0 and "
5048 "k <= -1 + n and k >= 0; "
5049 "S_0[j, k] -> A[k] : j <= -1 + n and j >= 0 and "
5050 "k <= -1 + n and k >= 0 }";
5051 S =
"[n] -> { S_0[j, k] -> [2, j, k] }";
5057 D =
"{Stmt_for_body24[i0, i1, i2, i3]:"
5058 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 6 and i2 >= 2 and "
5059 "i2 <= 6 - i1 and i3 >= 0 and i3 <= -1 + i2;"
5060 "Stmt_for_body24[i0, i1, 1, 0]:"
5061 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 5;"
5062 "Stmt_for_body7[i0, i1, i2]:"
5063 "i0 >= 0 and i0 <= 1 and i1 >= 0 and i1 <= 7 and i2 >= 0 and "
5066 V =
"{Stmt_for_body24[0, i1, i2, i3] -> "
5067 "Stmt_for_body24[1, i1, i2, i3]:"
5068 "i3 >= 0 and i3 <= -1 + i2 and i1 >= 0 and i2 <= 6 - i1 and "
5070 "Stmt_for_body24[0, i1, i2, i3] -> "
5071 "Stmt_for_body7[1, 1 + i1 + i3, 1 + i1 + i2]:"
5072 "i3 <= -1 + i2 and i2 <= 6 - i1 and i2 >= 1 and i1 >= 0 and "
5074 "Stmt_for_body24[0, i1, i2, i3] ->"
5075 "Stmt_for_body7[1, i1, 1 + i1 + i3]:"
5076 "i3 >= 0 and i2 <= 6 - i1 and i1 >= 0 and i3 <= -1 + i2;"
5077 "Stmt_for_body7[0, i1, i2] -> Stmt_for_body7[1, i1, i2]:"
5078 "(i2 >= 1 + i1 and i2 <= 6 and i1 >= 0 and i1 <= 4) or "
5079 "(i2 >= 3 and i2 <= 7 and i1 >= 1 and i2 >= 1 + i1) or "
5080 "(i2 >= 0 and i2 <= i1 and i2 >= -7 + i1 and i1 <= 7);"
5081 "Stmt_for_body7[0, i1, 1 + i1] -> Stmt_for_body7[1, i1, 1 + i1]:"
5082 "i1 <= 6 and i1 >= 0;"
5083 "Stmt_for_body7[0, 0, 7] -> Stmt_for_body7[1, 0, 7];"
5084 "Stmt_for_body7[i0, i1, i2] -> "
5085 "Stmt_for_body24[i0, o1, -1 + i2 - o1, -1 + i1 - o1]:"
5086 "i0 >= 0 and i0 <= 1 and o1 >= 0 and i2 >= 1 + i1 and "
5087 "o1 <= -2 + i2 and i2 <= 7 and o1 <= -1 + i1;"
5088 "Stmt_for_body7[i0, i1, i2] -> "
5089 "Stmt_for_body24[i0, i1, o2, -1 - i1 + i2]:"
5090 "i0 >= 0 and i0 <= 1 and i1 >= 0 and o2 >= -i1 + i2 and "
5091 "o2 >= 1 and o2 <= 6 - i1 and i2 >= 1 + i1 }";
5100 D =
"{ S_0[i, j] : i >= 1 and i <= 10 and j >= 1 and j <= 8 }";
5101 V =
"{ S_0[i, j] -> S_0[i, 1 + j] : i >= 1 and i <= 10 and "
5102 "j >= 1 and j <= 7;"
5103 "S_0[i, j] -> S_0[1 + i, j] : i >= 1 and i <= 9 and "
5104 "j >= 1 and j <= 8 }";
5106 S =
"{ S_0[i, j] -> [i + j, i] }";
5113 D =
"[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and "
5114 "j >= 0 and j <= -1 + i }";
5115 V =
"[N] -> { S_0[i, j] -> S_0[i, 1 + j] : j <= -2 + i and "
5116 "i <= -1 + N and j >= 0;"
5117 "S_0[i, -1 + i] -> S_0[1 + i, 0] : i >= 1 and "
5120 S =
"{ S_0[i, j] -> [i, j] }";
5127 D =
"{ S[i,j] : 0 <= i <= 10 }";
5129 P =
"{ S[i,j] -> S[i+1,j] : 0 <= i,j <= 10 }";
5130 S =
"{ S[i, j] -> [j, i] }";
5138 D =
"{ A[a]; B[] }";
5140 P =
"{ A[a] -> B[] }";
5150 D =
"[N] -> { S0[i, j] : i >= 0 and i <= N and j >= 0 and j <= N }";
5151 V =
"[N] -> { S0[i0, -1 + N] -> S0[2 + i0, 0] : i0 >= 0 and "
5153 "S0[i0, i1] -> S0[i0, 1 + i1] : i0 >= 0 and "
5154 "i0 <= N and i1 >= 0 and i1 <= -1 + N }";
5164 D =
"{ S1[j] : 0 <= j <= 1; S0[]; S2[k] : 0 <= k <= 1 }";
5165 V =
"{ S0[] -> S1[j] : 0 <= j <= 1; S2[0] -> S0[];"
5166 "S1[j] -> S2[1] : 0 <= j <= 1 }";
5230 if (
test == injective)
5234 "map not detected as injective",
return -1);
5237 "map detected as injective",
return -1);
5261 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[1,0]}";
5264 str =
"{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[0,0]}";
5276#define BASE pw_multi_aff
5280#define BASE union_pw_aff
5300 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5303 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5304 ok = union_pw_aff_check_plain_equal(upa,
str);
5310 str =
"[M] -> { A[i] : 0 <= i < M; B[] }";
5313 str =
"[N, M] -> { A[i] -> [N] : 0 <= i < M; B[] -> [N] }";
5314 ok = union_pw_aff_check_plain_equal(upa,
str);
5338 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [i] }",
5339 "{ [i] -> [2i] }" },
5340 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [i] }",
5342 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [2] }",
5343 "{ [i] -> [2i] }" },
5344 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [i] }",
5345 "{ [i] -> [2i] }" },
5346 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [2] }",
5347 "{ [i] -> [i/2] }" },
5348 {
"{ [i] -> [2i] }",
'/',
"{ [i] -> [2] }",
5350 {
"{ [i] -> [i] }",
'+',
"{ [i] -> [NaN] }",
5351 "{ [i] -> [NaN] }" },
5352 {
"{ [i] -> [i] }",
'-',
"{ [i] -> [NaN] }",
5353 "{ [i] -> [NaN] }" },
5354 {
"{ [i] -> [i] }",
'*',
"{ [i] -> [NaN] }",
5355 "{ [i] -> [NaN] }" },
5356 {
"{ [i] -> [2] }",
'*',
"{ [i] -> [NaN] }",
5357 "{ [i] -> [NaN] }" },
5358 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [NaN] }",
5359 "{ [i] -> [NaN] }" },
5360 {
"{ [i] -> [2] }",
'/',
"{ [i] -> [NaN] }",
5361 "{ [i] -> [NaN] }" },
5362 {
"{ [i] -> [NaN] }",
'+',
"{ [i] -> [i] }",
5363 "{ [i] -> [NaN] }" },
5364 {
"{ [i] -> [NaN] }",
'-',
"{ [i] -> [i] }",
5365 "{ [i] -> [NaN] }" },
5366 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [2] }",
5367 "{ [i] -> [NaN] }" },
5368 {
"{ [i] -> [NaN] }",
'*',
"{ [i] -> [i] }",
5369 "{ [i] -> [NaN] }" },
5370 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [2] }",
5371 "{ [i] -> [NaN] }" },
5372 {
"{ [i] -> [NaN] }",
'/',
"{ [i] -> [i] }",
5373 "{ [i] -> [NaN] }" },
5374 {
"{ [i] -> [i] }",
'/',
"{ [i] -> [0] }",
5375 "{ [i] -> [NaN] }" },
5393 aff1 =
fn(aff1, aff2);
5404 "unexpected result",
return -1);
5428 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [i] }",
5430 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [i] }",
5432 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [0] }",
5433 "{ [i] -> [i] : i <= 0; [i] -> [0] : i > 0 }" },
5434 {
"{ [i] -> [i] }",
'M',
"{ [i] -> [0] }",
5435 "{ [i] -> [i] : i >= 0; [i] -> [0] : i < 0 }" },
5436 {
"{ [i] -> [i] }",
'm',
"{ [i] -> [NaN] }",
5437 "{ [i] -> [NaN] }" },
5438 {
"{ [i] -> [NaN] }",
'm',
"{ [i] -> [i] }",
5439 "{ [i] -> [NaN] }" },
5465 "unexpected result",
return -1);
5489 "{ A[] -> [0]; B[0] -> [1, NaN, 5] }",
5492 "{ A[] -> [0]; B[0] -> [1] }",
5495 "{ A[] -> [0]; B[x] -> [1] : x mod 2 = 0 }",
5498 "{ A[] -> [0]; B[x] -> [x // 2] }",
5501 "{ A[i] -> [i // 2]; B[0] -> [1] }",
5540 "{ B[x] -> [2] : x >= 0 }",
"{ B[0] -> [3] }" },
5542 "{ B[x] -> [2] : x >= 0 }",
5543 "{ A[] -> [0]; B[0] -> [3]; B[x] -> [2] : x >= 1 }" },
5545 "{ A[] -> B[0]; C[x] -> B[1] : x < 10; C[y] -> B[2] : y >= 10 }",
5546 "{ D[i] -> A[] : i < 0; D[i] -> C[i + 5] : i >= 0 }",
5547 "{ D[i] -> B[0] : i < 0; D[i] -> B[1] : 0 <= i < 5; "
5548 "D[i] -> B[2] : i >= 5 }" },
5550 "{ B[x] -> C[2] : x > 0 }",
5551 "{ B[x] -> A[1] : x <= 0; B[x] -> C[2] : x > 0 }" },
5553 "{ B[x] -> A[2] : x >= 0 }",
5554 "{ B[x] -> A[1] : x < 0; B[x] -> A[2] : x > 0; B[0] -> A[3] }" },
5557 "{ B[x] -> C[x + 2] }",
5558 "{ D[y] -> B[2y] }",
5562 "{ [A[x] -> B[x + 1]] -> C[x + 2] }",
5563 "{ D[y] -> B[2y] }",
5567 "{ [A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5568 "{ D[y] -> A[2y] }",
5569 "{ [D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5572 "{ T[A[x] -> B[x + 1]] -> C[x + 2]; B[x] -> C[x + 2] }",
5573 "{ D[y] -> A[2y] }",
5574 "{ T[D[y] -> B[2y + 1]] -> C[2y + 2] }" },
5601 "unexpected result",
return -1);
5615 "{ B[x] -> C[2] : x >= 0 }" },
5630 for (i = 0; i <
n; ++i) {
5643 "operation not expected to succeed",
return -1);
5663 "{ A[i] -> B[i] }",
"{ B[0] }",
5666 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5667 "{ [A[1] -> B[1]] -> C[2] }" },
5669 "{ [A[i] -> B[i]] -> C[i + 1] }",
"{ A[1]; B[0] }",
5670 "{ [A[0] -> B[0]] -> C[1] }" },
5672 "{ [A[i] -> B[i]] -> C[i + 1] }",
"[N] -> { B[N] }",
5673 "[N] -> { [A[N] -> B[N]] -> C[N + 1] }" },
5675 "[M] -> { [A[M] -> B[M]] -> C[M + 1] }",
"[N] -> { B[N] }",
5676 "[N, M] -> { [A[N] -> B[N]] -> C[N + 1] : N = M }" },
5678 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[]; [B[] -> A[]] -> E[] }",
5680 "{ [A[] -> B[]] -> C[]; N[A[] -> B[]] -> D[] }" },
5724 { &isl_multi_pw_aff_range_factor_domain,
5725 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5726 "{ A[x] -> B[(1 : x >= 5)] }" },
5727 { &isl_multi_pw_aff_range_factor_range,
5728 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }",
5729 "{ A[y] -> C[(2 : y <= 10)] }" },
5730 { &isl_multi_pw_aff_range_factor_domain,
5731 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5732 "{ A[x] -> B[(1 : x >= 5)] }" },
5733 { &isl_multi_pw_aff_range_factor_range,
5734 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] }",
5735 "{ A[y] -> C[] }" },
5736 { &isl_multi_pw_aff_range_factor_domain,
5737 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5738 "{ A[x] -> B[] }" },
5739 { &isl_multi_pw_aff_range_factor_range,
5740 "{ A[x] -> [B[] -> C[(2 : x <= 10)]] }",
5741 "{ A[y] -> C[(2 : y <= 10)] }" },
5742 { &isl_multi_pw_aff_range_factor_domain,
5743 "{ A[x] -> [B[] -> C[]] }",
5744 "{ A[x] -> B[] }" },
5745 { &isl_multi_pw_aff_range_factor_range,
5746 "{ A[x] -> [B[] -> C[]] }",
5747 "{ A[y] -> C[] }" },
5748 { &isl_multi_pw_aff_factor_range,
5751 { &isl_multi_pw_aff_range_factor_domain,
5752 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5753 "{ A[x] -> B[] : x >= 0 }" },
5754 { &isl_multi_pw_aff_range_factor_range,
5755 "{ A[x] -> [B[] -> C[]] : x >= 0 }",
5756 "{ A[y] -> C[] : y >= 0 }" },
5757 { &isl_multi_pw_aff_factor_range,
5758 "[N] -> { [B[] -> C[]] : N >= 0 }",
5759 "[N] -> { C[] : N >= 0 }" },
5774 ok = isl_multi_pw_aff_plain_is_equal(mpa,
res);
5775 isl_multi_pw_aff_free(mpa);
5776 isl_multi_pw_aff_free(
res);
5781 "unexpected result",
return -1);
5800 { &isl_multi_pw_aff_add,
"{ A[] -> [1] }",
"{ A[] -> [2] }",
5802 { &isl_multi_pw_aff_add,
"{ A[x] -> [(1 : x >= 5)] }",
5803 "{ A[x] -> [(x : x <= 10)] }",
5804 "{ A[x] -> [(1 + x : 5 <= x <= 10)] }" },
5805 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
5806 "{ A[x] -> [] : x <= 10 }",
5807 "{ A[x] -> [] : 5 <= x <= 10 }" },
5808 { &isl_multi_pw_aff_add,
"{ A[x] -> [] : x >= 5 }",
5809 "[N] -> { A[x] -> [] : x <= N }",
5810 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
5811 { &isl_multi_pw_aff_add,
5812 "[N] -> { A[x] -> [] : x <= N }",
5813 "{ A[x] -> [] : x >= 5 }",
5814 "[N] -> { A[x] -> [] : 5 <= x <= N }" },
5815 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5816 "{ A[y] -> C[(2 : y <= 10)] }",
5817 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
5818 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
5819 "{ A[y] -> C[2] : y <= 10 }",
5820 "{ A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= 10)]] }" },
5821 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[1] : x >= 5 }",
5822 "[N] -> { A[y] -> C[2] : y <= N }",
5823 "[N] -> { A[x] -> [B[(1 : x >= 5)] -> C[(2 : x <= N)]] }" },
5824 { &isl_multi_pw_aff_range_product,
"[N] -> { A[x] -> B[1] : x >= N }",
5825 "{ A[y] -> C[2] : y <= 10 }",
5826 "[N] -> { A[x] -> [B[(1 : x >= N)] -> C[(2 : x <= 10)]] }" },
5827 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
5828 "{ A[] -> [B[1] -> C[2]] }" },
5829 { &isl_multi_pw_aff_range_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
5830 "{ A[] -> [B[] -> C[]] }" },
5831 { &isl_multi_pw_aff_range_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5832 "{ A[y] -> C[] : y <= 10 }",
5833 "{ A[x] -> [B[(1 : x >= 5)] -> C[]] : x <= 10 }" },
5834 { &isl_multi_pw_aff_range_product,
"{ A[y] -> C[] : y <= 10 }",
5835 "{ A[x] -> B[(1 : x >= 5)] }",
5836 "{ A[x] -> [C[] -> B[(1 : x >= 5)]] : x <= 10 }" },
5837 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5838 "{ A[y] -> C[(2 : y <= 10)] }",
5839 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[(2 : y <= 10)]] }" },
5840 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5841 "{ A[y] -> C[] : y <= 10 }",
5842 "{ [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= 10 }" },
5843 { &isl_multi_pw_aff_product,
"{ A[y] -> C[] : y <= 10 }",
5844 "{ A[x] -> B[(1 : x >= 5)] }",
5845 "{ [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= 10 }" },
5846 { &isl_multi_pw_aff_product,
"{ A[x] -> B[(1 : x >= 5)] }",
5847 "[N] -> { A[y] -> C[] : y <= N }",
5848 "[N] -> { [A[x] -> A[y]] -> [B[(1 : x >= 5)] -> C[]] : y <= N }" },
5849 { &isl_multi_pw_aff_product,
"[N] -> { A[y] -> C[] : y <= N }",
5850 "{ A[x] -> B[(1 : x >= 5)] }",
5851 "[N] -> { [A[y] -> A[x]] -> [C[] -> B[(1 : x >= 5)]] : y <= N }" },
5852 { &isl_multi_pw_aff_product,
"{ A[x] -> B[] : x >= 5 }",
5853 "{ A[y] -> C[] : y <= 10 }",
5854 "{ [A[x] -> A[y]] -> [B[] -> C[]] : x >= 5 and y <= 10 }" },
5855 { &isl_multi_pw_aff_product,
"{ A[] -> B[1] }",
"{ A[] -> C[2] }",
5856 "{ [A[] -> A[]] -> [B[1] -> C[2]] }" },
5857 { &isl_multi_pw_aff_product,
"{ A[] -> B[] }",
"{ A[] -> C[] }",
5858 "{ [A[] -> A[]] -> [B[] -> C[]] }" },
5860 "{ B[i,j] -> C[i + 2j] }",
"{ A[a,b] -> B[b,a] }",
5861 "{ A[a,b] -> C[b + 2a] }" },
5863 "{ B[i,j] -> C[i + 2j] }",
5864 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5865 "{ A[a,b] -> C[(b + 2a : b > a)] }" },
5867 "{ B[i,j] -> C[(i + 2j : j > 4)] }",
5868 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5869 "{ A[a,b] -> C[(b + 2a : b > a > 4)] }" },
5871 "{ B[i,j] -> C[] }",
5872 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5873 "{ A[a,b] -> C[] }" },
5875 "{ B[i,j] -> C[] : i > j }",
5876 "{ A[a,b] -> B[b,a] }",
5877 "{ A[a,b] -> C[] : b > a }" },
5879 "{ B[i,j] -> C[] : j > 5 }",
5880 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5881 "{ A[a,b] -> C[] : b > a > 5 }" },
5883 "[N] -> { B[i,j] -> C[] : j > N }",
5884 "{ A[a,b] -> B[(b : b > a),(a : b > a)] }",
5885 "[N] -> { A[a,b] -> C[] : b > a > N }" },
5887 "[M,N] -> { B[] -> C[] : N > 5 }",
5888 "[M,N] -> { A[] -> B[] : M > N }",
5889 "[M,N] -> { A[] -> C[] : M > N > 5 }" },
5908 ok = isl_multi_pw_aff_plain_is_equal(mpa1,
res);
5909 isl_multi_pw_aff_free(mpa1);
5910 isl_multi_pw_aff_free(
res);
5915 "unexpected result",
return -1);
5933 { &isl_multi_union_pw_aff_factor_range,
5934 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]",
5935 "C[{ A[] -> [2] }]" },
5936 { &isl_multi_union_pw_aff_factor_range,
5937 "[B[] -> C[{ A[] -> [2] }]]",
5938 "C[{ A[] -> [2] }]" },
5939 { &isl_multi_union_pw_aff_factor_range,
5940 "[B[{ A[] -> [1] }] -> C[]]",
5942 { &isl_multi_union_pw_aff_factor_range,
5945 { &isl_multi_union_pw_aff_factor_range,
5946 "([B[] -> C[]] : { A[x] : x >= 0 })",
5947 "(C[] : { A[x] : x >= 0 })" },
5948 { &isl_multi_union_pw_aff_factor_range,
5949 "[N] -> ([B[] -> C[]] : { A[x] : x <= N })",
5950 "[N] -> (C[] : { A[x] : x <= N })" },
5951 { &isl_multi_union_pw_aff_factor_range,
5952 "[N] -> ([B[] -> C[]] : { : N >= 0 })",
5953 "[N] -> (C[] : { : N >= 0 })" },
5971 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
5972 isl_multi_union_pw_aff_free(
mupa);
5973 isl_multi_union_pw_aff_free(
res);
5978 "unexpected result",
return -1);
5998 { &isl_multi_union_pw_aff_add,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
5999 "[{ A[] -> [3] }]" },
6000 { &isl_multi_union_pw_aff_sub,
"[{ A[] -> [1] }]",
"[{ A[] -> [2] }]",
6001 "[{ A[] -> [-1] }]" },
6002 { &isl_multi_union_pw_aff_add,
6003 "[{ A[] -> [1]; B[] -> [4] }]",
6004 "[{ A[] -> [2]; C[] -> [5] }]",
6005 "[{ A[] -> [3] }]" },
6007 "[{ A[] -> [1]; B[] -> [4] }]",
6008 "[{ A[] -> [2]; C[] -> [5] }]",
6009 "[{ A[] -> [3]; B[] -> [4]; C[] -> [5] }]" },
6010 { &isl_multi_union_pw_aff_add,
"[{ A[x] -> [(1)] : x >= 5 }]",
6011 "[{ A[x] -> [(x)] : x <= 10 }]",
6012 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10 }]" },
6013 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6014 "([] : { A[x] : x <= 10 })",
6015 "([] : { A[x] : 5 <= x <= 10 })" },
6016 { &isl_multi_union_pw_aff_add,
"([] : { A[x] : x >= 5 })",
6017 "[N] -> ([] : { A[x] : x <= N })",
6018 "[N] -> ([] : { A[x] : 5 <= x <= N })" },
6019 { &isl_multi_union_pw_aff_add,
"[N] -> ([] : { A[x] : x >= N })",
6020 "([] : { A[x] : x <= 10 })",
6021 "[N] -> ([] : { A[x] : N <= x <= 10 })" },
6023 "[{ A[x] -> [(x)] : x <= 10 }]",
6024 "[{ A[x] -> [(1 + x)] : 5 <= x <= 10; "
6025 "A[x] -> [(1)] : x > 10; A[x] -> [(x)] : x < 5 }]" },
6027 "([] : { A[x] : x <= 10 })",
6028 "([] : { A[x] })" },
6030 "[N] -> ([] : { A[x] : x >= N })",
6031 "[N] -> ([] : { A[x] : x >= 0 or x >= N })" },
6033 "[N] -> ([] : { A[] : N >= 0})",
6034 "[N] -> ([] : { A[] : N <= 0})",
6035 "[N] -> ([] : { A[] })" },
6037 "[N] -> ([] : { A[] })",
6038 "[N] -> ([] : { : })",
6039 "[N] -> ([] : { : })" },
6041 "[N] -> ([] : { : })",
6042 "[N] -> ([] : { A[] })",
6043 "[N] -> ([] : { : })" },
6045 "[N] -> ([] : { : N >= 0})",
6046 "[N] -> ([] : { : N <= 0})",
6047 "[N] -> ([] : { : })" },
6048 { &isl_multi_union_pw_aff_range_product,
6049 "B[{ A[] -> [1] }]",
6050 "C[{ A[] -> [2] }]",
6051 "[B[{ A[] -> [1] }] -> C[{ A[] -> [2] }]]" },
6052 { &isl_multi_union_pw_aff_range_product,
6053 "(B[] : { A[x] : x >= 5 })",
6054 "(C[] : { A[x] : x <= 10 })",
6055 "([B[] -> C[]] : { A[x] : 5 <= x <= 10 })" },
6056 { &isl_multi_union_pw_aff_range_product,
6057 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6058 "(C[] : { A[x] : x <= 10 })",
6059 "[B[{ A[x] -> [x + 1] : 5 <= x <= 10 }] -> C[]]" },
6060 { &isl_multi_union_pw_aff_range_product,
6061 "(C[] : { A[x] : x <= 10 })",
6062 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6063 "[C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= 10 }]]" },
6064 { &isl_multi_union_pw_aff_range_product,
6065 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6066 "[N] -> (C[] : { A[x] : x <= N })",
6067 "[N] -> [B[{ A[x] -> [x + 1] : 5 <= x <= N }] -> C[]]" },
6068 { &isl_multi_union_pw_aff_range_product,
6069 "[N] -> (C[] : { A[x] : x <= N })",
6070 "B[{ A[x] -> [x + 1] : x >= 5 }]",
6071 "[N] -> [C[] -> B[{ A[x] -> [x + 1] : 5 <= x <= N }]]" },
6072 { &isl_multi_union_pw_aff_range_product,
6073 "B[{ A[] -> [1]; D[] -> [3] }]",
6074 "C[{ A[] -> [2] }]",
6075 "[B[{ A[] -> [1]; D[] -> [3] }] -> C[{ A[] -> [2] }]]" },
6076 { &isl_multi_union_pw_aff_range_product,
6079 "([B[] -> C[]] : { A[x] })" },
6080 { &isl_multi_union_pw_aff_range_product,
6083 "([B[] -> C[]] : { A[x] })" },
6103 ok = isl_multi_union_pw_aff_plain_is_equal(mupa1,
res);
6104 isl_multi_union_pw_aff_free(mupa1);
6105 isl_multi_union_pw_aff_free(
res);
6110 "unexpected result",
return -1);
6131 "C[{ B[i,j] -> [i + 2j] }]",
"{ C[1] }",
6132 "C[{ B[i,j] -> [i + 2j] : i + 2j = 1 }]" },
6134 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[N] }",
6135 "[N] -> C[{ B[i,j] -> [i + 2j] : i + 2j = N }]" },
6137 "[N] -> C[{ B[i,j] -> [i + 2j + N] }]",
"{ C[1] }",
6138 "[N] -> C[{ B[i,j] -> [i + 2j + N] : i + 2j + N = 1 }]" },
6140 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { C[x] : N >= 0 }",
6141 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0 }]" },
6143 "C[]",
"{ C[] }",
"C[]" },
6145 "[N] -> (C[] : { : N >= 0 })",
6147 "[N] -> (C[] : { : N >= 0 })" },
6149 "(C[] : { A[a,b] })",
6151 "(C[] : { A[a,b] })" },
6153 "[N] -> (C[] : { A[a,b] : a,b <= N })",
6155 "[N] -> (C[] : { A[a,b] : a,b <= N })" },
6158 "[N] -> { C[] : N >= 0 }",
6159 "[N] -> (C[] : { : N >= 0 })" },
6161 "(C[] : { A[a,b] })",
6162 "[N] -> { C[] : N >= 0 }",
6163 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6165 "[N] -> (C[] : { : N >= 0 })",
6166 "[N] -> { C[] : N < 1024 }",
6167 "[N] -> (C[] : { : 0 <= N < 1024 })" },
6169 "C[{ B[i,j] -> [i + 2j] }]",
"[N] -> { : N >= 0 }",
6170 "[N] -> C[{ B[i,j] -> [i + 2j] : N >= 0}]" },
6172 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"[N] -> { : N >= 0 }",
6173 "[N] -> C[{ B[i,j] -> [i + 2j] : 0 <= N <= 256 }]" },
6175 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]",
"{ : }",
6176 "[N] -> C[{ B[i,j] -> [i + 2j] : N <= 256 }]" },
6178 "C[]",
"[N] -> { : N >= 0 }",
6179 "[N] -> (C[] : { : N >= 0 })" },
6181 "(C[] : { A[a,b] })",
"[N] -> { : N >= 0 }",
6182 "[N] -> (C[] : { A[a,b] : N >= 0 })" },
6184 "[N] -> (C[] : { A[a,N] })",
"{ : }",
6185 "[N] -> (C[] : { A[a,N] })" },
6187 "[N] -> (C[] : { A[a,b] : N <= 256 })",
"[N] -> { : N >= 0 }",
6188 "[N] -> (C[] : { A[a,b] : 0 <= N <= 256 })" },
6208 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6209 isl_multi_union_pw_aff_free(
mupa);
6210 isl_multi_union_pw_aff_free(
res);
6215 "unexpected result",
return -1);
6236 "C[{ B[i,j] -> [i + 2j] }]",
"{ B[i,i] }",
6237 "C[{ B[i,i] -> [3i] }]" },
6239 "(C[] : { B[i,j] })",
"{ B[i,i] }",
6240 "(C[] : { B[i,i] })" },
6242 "(C[] : { B[i,j] })",
"[N] -> { B[N,N] }",
6243 "[N] -> (C[] : { B[N,N] })" },
6245 "C[]",
"{ B[i,i] }",
6246 "(C[] : { B[i,i] })" },
6248 "[N] -> (C[] : { : N >= 0 })",
"{ B[i,i] }",
6249 "[N] -> (C[] : { B[i,i] : N >= 0 })" },
6270 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6271 isl_multi_union_pw_aff_free(
mupa);
6272 isl_multi_union_pw_aff_free(
res);
6277 "unexpected result",
return -1);
6298 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6299 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6300 "{ C[a,b] -> D[b,a] }",
6301 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6302 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6304 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6305 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6306 "{ C[a,b] -> D[b,a] }",
6307 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6308 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6310 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6311 "[N] -> { C[a] -> D[a + N] }",
6312 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }] " },
6318 "[N] -> (C[] : { : N >= 0 })",
6320 "[N] -> (D[] : { : N >= 0 })" },
6323 "[N] -> { C[] -> D[N] }",
6324 "[N] -> D[{ [N] }]" },
6326 "(C[] : { A[i,j] : i >= j })",
6328 "(D[] : { A[i,j] : i >= j })" },
6330 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6332 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6334 "(C[] : { A[i,j] : i >= j })",
6335 "[N] -> { C[] -> D[N] }",
6336 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
6356 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6357 isl_multi_union_pw_aff_free(
mupa);
6358 isl_multi_union_pw_aff_free(
res);
6363 "unexpected result",
return -1);
6384 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6385 "[N] -> { C[a] -> [a + N] }",
6386 "[N] -> { A[i,j] -> [i + N]; B[i,j] -> [j + N] }" },
6388 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6389 "{ C[a] -> [a] : a >= 0; C[a] -> [-a] : a < 0 }",
6390 "{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6391 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }" },
6394 "[N] -> { C[] -> [N] }",
6398 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6399 "[N] -> { [N] : N >= 0; [-N] : N < 0 }" },
6401 "[N] -> (C[] : { : N >= 0 })",
6402 "[N] -> { C[] -> [N] }",
6403 "[N] -> { [N] : N >= 0 }" },
6405 "[N] -> (C[] : { : N >= 0 })",
6406 "[N] -> { C[] -> [N] : N >= 0; C[] -> [-N] : N < 0 }",
6407 "[N] -> { [N] : N >= 0 }" },
6409 "[N] -> (C[] : { : N >= 0 })",
6411 "[N] -> { [0] : N >= 0 }" },
6413 "(C[] : { A[i,j] : i >= j })",
6414 "[N] -> { C[] -> [N] }",
6415 "[N] -> { A[i,j] -> [N] : i >= j }" },
6417 "(C[] : { A[i,j] : i >= j })",
6418 "[N] -> { C[] -> [N] : N >= 0 }",
6419 "[N] -> { A[i,j] -> [N] : i >= j and N >= 0 }" },
6447 "unexpected result",
return -1);
6468 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6469 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6470 "{ C[a,b] -> D[b,a] }",
6471 "D[{ A[i,j] -> [j]; B[i,j] -> [i] }, "
6472 "{ A[i,j] -> [i]; B[i,j] -> [j] }]" },
6474 "C[{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }, "
6475 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6476 "{ C[a,b] -> D[b,a] }",
6477 "D[{ A[i,j] -> [j] : i >= 0; B[i,j] -> [i] }, "
6478 "{ A[i,j] -> [i] : i >= 0; B[i,j] -> [j] }]" },
6480 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6481 "[N] -> { C[a] -> D[a + N] }",
6482 "[N] -> D[{ A[i,j] -> [i + N]; B[i,j] -> [j + N] }]" },
6484 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }]",
6485 "{ C[a] -> D[a] : a >= 0; C[a] -> D[-a] : a < 0 }",
6486 "D[{ A[i,j] -> [i] : i >= 0; A[i,j] -> [-i] : i < 0; "
6487 "B[i,j] -> [j] : j >= 0; B[i,j] -> [-j] : j < 0 }]" },
6489 "C[{ A[i,j] -> [i]; B[i,j] -> [j] }, "
6490 "{ A[i,j] -> [j]; B[i,j] -> [i] }]",
6491 "{ C[a,b] -> D[a,b] : a >= b; C[a,b] -> D[b,a] : a < b }",
6492 "D[{ A[i,j] -> [i] : i >= j; A[i,j] -> [j] : i < j; "
6493 "B[i,j] -> [j] : i <= j; B[i,j] -> [i] : i > j }, "
6494 "{ A[i,j] -> [j] : i >= j; A[i,j] -> [i] : i < j; "
6495 "B[i,j] -> [i] : i <= j; B[i,j] -> [j] : i > j }]" },
6501 "[N] -> (C[] : { : N >= 0 })",
6503 "[N] -> (D[] : { : N >= 0 })" },
6506 "[N] -> { C[] -> D[N] }",
6507 "[N] -> D[{ [N] }]" },
6509 "(C[] : { A[i,j] : i >= j })",
6511 "(D[] : { A[i,j] : i >= j })" },
6513 "[N] -> (C[] : { A[i,j] : N >= 0 })",
6515 "[N] -> (D[] : { A[i,j] : N >= 0 })" },
6517 "(C[] : { A[i,j] : i >= j })",
6518 "[N] -> { C[] -> D[N] }",
6519 "[N] -> (D[{ A[i,j] -> [N] : i >= j }])" },
6522 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6523 "[N] -> D[{ [N] : N >= 0; [-N] : N < 0 }]" },
6525 "[N] -> (C[] : { : N >= 0 })",
6526 "[N] -> { C[] -> D[N] }",
6527 "[N] -> D[{ [N] : N >= 0 }]" },
6529 "[N] -> (C[] : { : N >= 0 })",
6530 "[N] -> { C[] -> D[N] : N >= 0; C[] -> D[-N] : N < 0 }",
6531 "[N] -> D[{ [N] : N >= 0 }]" },
6533 "[N] -> (C[] : { : N >= 0 })",
6535 "[N] -> D[{ [0] : N >= 0 }]" },
6537 "(C[] : { A[i,j] : i >= j })",
6538 "[N] -> { C[] -> D[N] : N >= 0 }",
6539 "[N] -> D[{ A[i,j] -> [N] : i >= j and N >= 0 }]" },
6560 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6561 isl_multi_union_pw_aff_free(
mupa);
6562 isl_multi_union_pw_aff_free(
res);
6567 "unexpected result",
return -1);
6588 "C[{ B[i,j] -> [i + 2j] }]",
"{ A[a,b] -> B[b,a] }",
6589 "C[{ A[a,b] -> [b + 2a] }]" },
6591 "C[{ B[i,j] -> [i + 2j] }]",
6592 "{ A[a,b] -> B[b,a] : b > a }",
6593 "C[{ A[a,b] -> [b + 2a] : b > a }]" },
6595 "C[{ B[i,j] -> [i + 2j] : j > 4 }]",
6596 "{ A[a,b] -> B[b,a] : b > a }",
6597 "C[{ A[a,b] -> [b + 2a] : b > a > 4 }]" },
6599 "C[{ B[i,j] -> [i + 2j] }]",
6600 "{ A[a,b] -> B[b,a] : a > b; A[a,b] -> B[a,b] : a <= b }",
6601 "C[{ A[a,b] -> [b + 2a] : a > b; A[a,b] -> [a + 2b] : a <= b }]" },
6603 "(C[] : { B[a,b] })",
6604 "{ A[a,b] -> B[b,a] }",
6605 "(C[] : { A[a,b] })" },
6607 "(C[] : { B[a,b] })",
6608 "{ B[a,b] -> A[b,a] }",
6611 "(C[] : { B[a,b] })",
6612 "{ A[a,b] -> B[b,a] : a > b }",
6613 "(C[] : { A[a,b] : a > b })" },
6615 "(C[] : { B[a,b] : a > b })",
6616 "{ A[a,b] -> B[b,a] }",
6617 "(C[] : { A[a,b] : b > a })" },
6619 "[N] -> (C[] : { B[a,b] : a > N })",
6620 "{ A[a,b] -> B[b,a] : a > b }",
6621 "[N] -> (C[] : { A[a,b] : a > b > N })" },
6623 "(C[] : { B[a,b] : a > b })",
6624 "[N] -> { A[a,b] -> B[b,a] : a > N }",
6625 "[N] -> (C[] : { A[a,b] : b > a > N })" },
6628 "{ A[a,b] -> B[b,a] }",
6631 "[N] -> (C[] : { : N >= 0 })",
6632 "{ A[a,b] -> B[b,a] }",
6633 "[N] -> (C[] : { : N >= 0 })" },
6636 "[N] -> { A[a,b] -> B[b,a] : N >= 0 }",
6637 "[N] -> (C[] : { : N >= 0 })" },
6658 ok = isl_multi_union_pw_aff_plain_is_equal(
mupa,
res);
6659 isl_multi_union_pw_aff_free(
mupa);
6660 isl_multi_union_pw_aff_free(
res);
6665 "unexpected result",
return -1);
6682 equal = aff_check_plain_equal(
aff,
"{ A[x] -> [x + 1] }");
6703 ok = aff_check_plain_equal(
aff,
"{ [x] -> [1] }");
6782 equal = aff_check_plain_equal(
aff,
"{ [-1] }");
6806 {
"{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6808 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6809 {
"{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }",
6811 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6812 {
"[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }",
6814 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }" },
6815 {
"[M] -> { D[x, N] : x mod 2 = 0 and N mod 8 = 3 and M >= 0 }",
6817 "[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 and M >= 0 }" },
6855 {
"{ A[M, N] -> [M + floor(N/2)] }",
6857 "[M, N] -> { [M + floor(N/2)] }" },
6858 {
"{ B[N, M] -> [M + floor(N/2)] }",
6860 "[N, M] -> { [M + floor(N/2)] }" },
6861 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
6863 "[M, N] -> { [M + floor(N/2)] }" },
6864 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
6866 "[M, N] -> { [M + floor(N/2)] }" },
6867 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
6869 "[M, N] -> { [M + floor(N/2)] }" },
6870 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
6872 "[A, N, M] -> { [M + floor(N/2)] }" },
6913 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6915 "[M, N] -> { B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
6916 {
"{ B[N, M] -> A[M, N] : M mod 2 = 0 and N mod 8 = 3 }",
6919 {
"{ A[] -> B[]; C[] -> D[]; E[] -> B[] }",
6962 {
"{ A[M, N] -> [M + floor(N/2)] }",
6964 "[M, N] -> { [M + floor(N/2)] }" },
6965 {
"{ B[N, M] -> [M + floor(N/2)] }",
6967 "[N, M] -> { [M + floor(N/2)] }" },
6968 {
"[M] -> { C[N] -> [M + floor(N/2)] }",
6970 "[M, N] -> { [M + floor(N/2)] }" },
6971 {
"[M] -> { C[x, N] -> [x + floor(N/2)] }",
6973 "[M, N] -> { [M + floor(N/2)] }" },
6974 {
"[M] -> { C[x, N] -> [M + floor(N/2)] }",
6976 "[M, N] -> { [M + floor(N/2)] }" },
6977 {
"[A, M] -> { C[N, x] -> [x + floor(N/2)] }",
6979 "[A, N, M] -> { [M + floor(N/2)] }" },
7000 r = pw_multi_aff_check_plain_equal(
pma,
str);
7019 {
"{ [A[M, N] -> B[]] -> [M + floor(N/2)] }",
7021 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7022 {
"{ [B[N, M] -> D[]] -> [M + floor(N/2)] }",
7024 "[N, M] -> { D[] -> [M + floor(N/2)] }" },
7025 {
"[M] -> { [C[N] -> B[x]] -> [x + M + floor(N/2)] }",
7027 "[M, N] -> { B[x] -> [x + M + floor(N/2)] }" },
7028 {
"[M] -> { [C[x, N] -> B[]] -> [x + floor(N/2)] }",
7030 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7031 {
"[M] -> { [C[x, N] -> B[]] -> [M + floor(N/2)] }",
7033 "[M, N] -> { B[] -> [M + floor(N/2)] }" },
7034 {
"[A, M] -> { [C[N, x] -> B[]] -> [x + floor(N/2)] }",
7036 "[A, N, M] -> { B[] -> [M + floor(N/2)] }" },
7057 r = pw_multi_aff_check_plain_equal(
pma,
str);
7077 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7078 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7079 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7080 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7081 {
"{ [NaN] }",
"M",
"{ : false }" },
7082 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7120 {
"{ [4] }",
"M",
"[M = 4] -> { : }" },
7121 {
"{ B[x] -> [floor(x/2)] }",
"M",
"[M] -> { B[x] : M = floor(x/2) }" },
7122 {
"[M] -> { [4] }",
"M",
"[M = 4] -> { : }" },
7123 {
"[M] -> { [floor(M/2)] }",
"M",
"[M] -> { : floor(M/2) = M }" },
7124 {
"[M] -> { [M] : M >= 0; [-M] : M < 0 }",
"M",
"[M] -> { : M >= 0 }" },
7125 {
"{ [NaN] }",
"M",
"{ : false }" },
7126 {
"{ A[x] -> [NaN] }",
"M",
"{ A[x] : false }" },
7164 {
"A[{ [4] }, { [5] }]",
7166 "[M = 4, N = 5] -> { : }" },
7167 {
"A[{ B[x] -> [floor(x/2)] }, { B[y] -> [y + 5] }]",
7169 "[M, N] -> { B[x] : M = floor(x/2) and N = x + 5 }" },
7170 {
"[M] -> A[{ [4] }, { [M + 1] }]",
7172 "[M = 4, N = 5] -> { : }" },
7236 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7238 "{ A[M, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7239 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7241 "{ B[N, M] : M mod 2 = 0 and N mod 8 = 3 }" },
7242 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7244 "[M] -> { C[N] : M mod 2 = 0 and N mod 8 = 3 }" },
7245 {
"[M, N] -> { : M mod 2 = 0 and N mod 8 = 3 }",
7247 "[M] -> { D[x, N] : M mod 2 = 0 and N mod 8 = 3 }" },
7285 {
"[M, N] -> { [M + floor(N/2)] }",
7287 "{ A[M, N] -> [M + floor(N/2)] }" },
7288 {
"[M, N] -> { [M + floor(N/2)] }",
7290 "{ B[N, M] -> [M + floor(N/2)] }" },
7291 {
"[M, N] -> { [M + floor(N/2)] }",
7293 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7294 {
"[M, N] -> { [M + floor(N/2)] }",
7295 "{ D[A, B, C, N, Z] }",
7296 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7334 {
"[M, N] -> { T[M + floor(N/2)] }",
7336 "{ A[M, N] -> T[M + floor(N/2)] }" },
7337 {
"[M, N] -> { [M + floor(N/2)] }",
7339 "{ B[N, M] -> [M + floor(N/2)] }" },
7340 {
"[M, N] -> { [M + floor(N/2)] }",
7342 "[M] -> { C[N] -> [M + floor(N/2)] }" },
7343 {
"[M, N] -> { [M + floor(N/2)] }",
7344 "{ D[A, B, C, N, Z] }",
7345 "[M] -> { D[A, B, C, N, Z] -> [M + floor(N/2)] }" },
7346 {
"[M, N] -> { T[M + floor(N/2), N + floor(M/3)] }",
7348 "{ A[M, N] -> T[M + floor(N/2), N + floor(M/3)] }" },
7367 ma = isl_multi_aff_unbind_params_insert_domain(
ma,
tuple);
7369 r = multi_aff_check_plain_equal(
ma,
str);
7370 isl_multi_aff_free(
ma);
7422 str =
"[n] -> { [a, b] : n >= 0 and 4a >= -4 + n and b >= 0 and "
7423 "-4a <= b <= 3 and b < n - 4a }";
7444 str =
"[P, N] -> { [a] : a < N and a >= 0 and N > P and a <= P and "
7445 "N > 0 and P >= 0 }";
7465 str =
"[N] -> { [i] : 0 <= i <= min(N,10) }";
7469 str =
"[N] -> { [10] : N >= 10; [N] : N <= 9 and N >= 0 }";
7479 str =
"[N] -> { [i] : 0 <= i <= max(2N,N+6) }";
7483 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7493 str =
"[N] -> { [i] : 0 <= i <= 2N or 0 <= i <= N+6 }";
7497 str =
"[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }";
7507 str =
"[N,M] -> { [i,j] -> [([i/16]), i%16, ([j/16]), j%16] : "
7508 "0 <= i < N and 0 <= j < M }";
7514 str =
"[N,M] -> { [([(N-1)/16])] : M,N > 0 }";
7522 str =
"[N,M] -> { [t] : t = min(M-1,15) and M,N > 0 }";
7537 str =
"[n] -> { [a, b, c] : c >= -4a - 2b and "
7538 "c <= -1 + n - 4a - 2b and c >= -2b and "
7539 "4a >= -4 + n and c >= 0 }";
7543 str =
"[n] -> { [(0)] : n >= 1 }";
7555 str =
"[n] -> { [t,a] : 1 = 0 }";
7559 str =
"[n] -> { [t] : 1 = 0 }";
7583 str =
"{ A[i] -> B[1] : i < 0; A[i] -> B[2] : i >= 0 }";
7585 str =
"{ C[] -> D[] }";
7588 str =
"{ [A[i] -> C[]] -> [B[(1)] -> D[]] : i < 0;"
7589 "[A[i] -> C[]] -> [B[(2)] -> D[]] : i >= 0 }";
7590 equal = pw_multi_aff_check_plain_equal(pma1,
str);
7618 str =
"{ [[] -> []] }";
7643 str =
"[n] -> { [[]->[]] }";
7645 str =
"{ [[]->[]] }";
7667 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 1 }",
7668 "[N] -> { [0] : 0 <= N <= 1 }" },
7669 { 1,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7670 "[N] -> { [0] : 0 <= N <= 1; [1] : N = 2 }" },
7671 { 0,
"[N] -> { [floor(N/2)] : 0 <= N <= 2 }",
7672 "[N] -> { [0] : 0 <= N <= 1 }" },
7673 { 0,
"{ [NaN] }",
"{ [NaN] }" },
7708 "unexpected equality result",
return -1);
7727 "map not detected as fixed",
return -1);
7730 "map detected as fixed",
return -1);
7738 str =
"{ [i] -> [i] }";
7742 str =
"{ [i] -> [1] }";
7746 str =
"{ S_1[p1] -> [o0] : o0 = -2 and p1 >= 1 and p1 <= 7 }";
7763 {
"{ A[t, i] : t = 12 and i >= 4 and i <= 12 }",
7764 2, {
"{ A[12, 4] }",
"{ A[12, 12] }" } },
7765 {
"{ A[t, i] : t = 14 and i = 1 }",
7766 1, {
"{ A[14, 1] }" } },
7767 {
"[n, m] -> { [a, b, c] : b <= a and a <= n and b > 0 and c >= b and "
7768 "c <= m and m <= n and m > 0 }",
7770 "[n, m] -> { [n, m, m] : 0 < m <= n }",
7771 "[n, m] -> { [n, 1, m] : 0 < m <= n }",
7772 "[n, m] -> { [n, 1, 1] : 0 < m <= n }",
7773 "[n, m] -> { [m, m, m] : 0 < m <= n }",
7774 "[n, m] -> { [1, 1, m] : 0 < m <= n }",
7775 "[n, m] -> { [1, 1, 1] : 0 < m <= n }"
7778 {
"[N, M] -> { [a, b] : M >= 3 and 9 + 3M <= a <= 29 + 2N + 11M and "
7779 "2b >= M + a and 5 - 2N - M + a <= 2b <= 3 + a and "
7782 "[N, M] -> { [(21), (12)] : M = 3 and N >= 0 }",
7783 "[N, M] -> { [(61 + 2N), (32 + N)] : M = 3 and N >= 0 }",
7805 for (i = 0; i < data->
n; ++i) {
7869 "[n] -> { A[i] -> [] : 0 <= i <= n; B[] -> [] }",
7870 "[m] -> { A[i] -> [] : 0 <= i <= m; C[] -> [] }",
7871 "[m, n] -> { A[i] -> [] : 0 <= i <= n and i <= m }" },
7873 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7874 "[N] -> { B[i] -> C[N] }",
7877 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7878 "[N] -> { A[i] -> C[N] }",
7879 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
7881 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
7882 "[N] -> { A[i] -> C[N] }",
7883 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
7885 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7886 "[N] -> { B[i] -> C[N] }",
7887 "[N] -> { [A[N - 2] -> B[N - 1]] -> C[N] }" },
7889 "{ T[A[i] -> B[i + 1]] -> C[i + 2] }",
7890 "[N] -> { B[i] -> C[N] }",
7891 "[N] -> { T[A[N - 2] -> B[N - 1]] -> C[N] }" },
7893 "{ [A[i] -> B[i + 1]] -> C[i + 2] }",
7894 "[N] -> { A[i] -> C[N] }",
7897 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7898 "[N] -> { A[i] -> B[N] }",
7899 "[N] -> { A[N - 1] -> [B[N] -> C[N + 1]] }" },
7901 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
7902 "[N] -> { A[i] -> B[N] }",
7903 "[N] -> { A[N - 1] -> T[B[N] -> C[N + 1]] }" },
7905 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7906 "[N] -> { A[i] -> C[N] }",
7909 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7910 "[N] -> { A[i] -> C[N] }",
7911 "[N] -> { A[N - 2] -> [B[N - 1] -> C[N]] }" },
7913 "{ A[i] -> T[B[i + 1] -> C[i + 2]] }",
7914 "[N] -> { A[i] -> C[N] }",
7915 "[N] -> { A[N - 2] -> T[B[N - 1] -> C[N]] }" },
7917 "{ A[i] -> [B[i + 1] -> C[i + 2]] }",
7918 "[N] -> { A[i] -> B[N] }",
7964 str =
"[N] -> { A[0:N]; B[*,*] }";
7994#define BASE union_pw_qpolynomial
8011 upwqp1 =
fn(upwqp1, upwqp2);
8012 r = union_pw_qpolynomial_check_plain_equal(upwqp1,
res);
8027 str =
"{ [x] -> x^2 }";
8041 a =
"{ A[x] -> x^2 : x >= 0; B[x] -> x }";
8042 b =
"{ A[x] -> x }";
8043 str =
"{ A[x] -> x^2 + x : x >= 0; A[x] -> x : x < 0; B[x] -> x }";
8046 str =
"{ A[x] -> x^2 - x : x >= 0; A[x] -> -x : x < 0; B[x] -> x }";
8050 str =
"{ A[x] -> 0 }";
8051 a =
"{ A[x] -> 1 }";
8052 b =
"{ A[x] -> -1 }";
8055 a =
"{ A[x] -> 1 }";
8056 b =
"{ A[x] -> 1 }";
8060 str =
"{ [A[x] -> B[y,z]] -> x^2 + y * floor(x/4) * floor(z/2); "
8064 str =
"{ [B[y,z] -> A[x]] -> x^2 + y * floor(x/4) * floor(z/2) }";
8065 r = union_pw_qpolynomial_check_plain_equal(upwqp1,
str);
8086 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8087 "{ A[0,j]; B[0,j] }" },
8089 "F[{ A[i,j] -> [i-j]; B[i,j] -> [i-j] : i >= 0 }]",
8090 "{ A[i,i]; B[i,i] : i >= 0 }" },
8092 "(F[] : { A[i,j]; B[i,i] : i >= 0 })",
8093 "{ A[i,j]; B[i,i] : i >= 0 }" },
8118 "unexpected result",
return -1);
8140 "{ A[i,j] -> B[i',j'] }",
8141 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8142 "{ A[i,j] -> B[i,j'] }" },
8144 "{ A[i,j] -> B[i',j'] }",
8145 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8146 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8147 "{ A[i,j] -> B[i,j] }" },
8149 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8150 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }]",
8151 "{ A[i,j] -> B[i,j'] }" },
8153 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8154 "F[{ A[i,j] -> [i]; B[i,j] -> [i]; C[i,j] -> [0] }]",
8155 "{ A[i,j] -> B[i,j']; A[0,j] -> C[i',j'] }" },
8157 "{ A[i,j] -> B[i',j'] }",
8158 "F[{ A[i,j] -> [i] : i > j; B[i,j] -> [i] }]",
8159 "{ A[i,j] -> B[i,j'] : i > j }" },
8161 "{ A[i,j] -> B[i',j'] }",
8162 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8163 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8164 "{ A[i,j] -> B[i',j'] : i,j <<= i',j' }" },
8166 "{ A[i,j] -> B[i',j'] }",
8167 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8168 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8169 "{ A[i,j] -> B[i',j'] : i,j << i',j' }" },
8171 "{ A[i,j] -> B[i',j'] }",
8172 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8173 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8174 "{ A[i,j] -> B[i',j'] : i,j >>= i',j' }" },
8176 "{ A[i,j] -> B[i',j'] }",
8177 "F[{ A[i,j] -> [i]; B[i,j] -> [i] }, "
8178 "{ A[i,j] -> [j]; B[i,j] -> [j] }]",
8179 "{ A[i,j] -> B[i',j'] : i,j >> i',j' }" },
8181 "{ A[i,j] -> B[i',j']; A[i,j] -> C[i',j'] }",
8182 "(F[] : { A[i,j]; B[i,j] })",
8183 "{ A[i,j] -> B[i',j'] }" },
8185 "{ A[i,j] -> B[i',j'] }",
8186 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8187 "{ A[i,j] -> B[i',j'] : i > j and i' < j' }" },
8189 "[N] -> { A[i,j] -> B[i',j'] : i,i' <= N }",
8190 "(F[] : { A[i,j] : i > j; B[i,j] : i < j })",
8191 "[N] -> { A[i,j] -> B[i',j'] : i > j and i' < j' and i,i' <= N }" },
8193 "{ A[i,j] -> B[i',j'] }",
8194 "[N] -> (F[] : { A[i,j] : i < N; B[i,j] : i < N })",
8195 "[N] -> { A[i,j] -> B[i',j'] : i,i' < N }" },
8197 "{ A[i,j] -> B[i',j'] }",
8198 "[N] -> (F[] : { : N >= 0 })",
8199 "[N] -> { A[i,j] -> B[i',j'] : N >= 0 }" },
8227 "unexpected result",
return -1);
8250 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8251 "{ A[i] : i <= 0 }" },
8253 "{ A[i] -> [i] }",
"{ A[i] -> [0] }",
8254 "{ A[i] : i < 0 }" },
8256 "{ A[i] -> [i, i] }",
"{ A[i] -> [0, 0] }",
8257 "{ A[i] : i <= 0 }" },
8259 "{ A[i] -> [i, 0] }",
"{ A[i] -> [0, 0] }",
8260 "{ A[i] : i <= 0 }" },
8262 "{ A[i] -> [i, 1] }",
"{ A[i] -> [0, 0] }",
8263 "{ A[i] : i < 0 }" },
8324 str =
"{ A[x] -> x^2; B[x] -> -x^2 }";
8352 str =
"{ A[x] -> [x] }";
8354 str =
"{ A[x] : false }";
8400 {
"{ [i] -> [2 * i] }",
"{ [4] }",
"8" },
8401 {
"{ [i] -> [2 * i] }",
"{ [x] : false }",
"NaN" },
8402 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [0] }",
"0" },
8403 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [1] }",
"1" },
8404 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [2] }",
"3" },
8405 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [3] }",
"5" },
8406 {
"{ [i] -> [i + floor(i/2) + floor(i/3)] }",
"{ [4] }",
"7" },
8407 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [0] }",
"0" },
8408 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [1] }",
"0" },
8409 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [2] }",
"0" },
8410 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [3] }",
"0" },
8411 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [4] }",
"1" },
8412 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [6] }",
"1" },
8413 {
"{ [i] -> [floor((3 * floor(i/2))/5)] }",
"{ [8] }",
"2" },
8414 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [4] }",
"4" },
8415 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [-2] }",
"2" },
8416 {
"{ [i] -> [i] : i > 0; [i] -> [-i] : i < 0 }",
"{ [0] }",
"NaN" },
8417 {
"[N] -> { [2 * N] }",
"[N] -> { : N = 4 }",
"8" },
8418 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 1] }",
"1" },
8419 {
"{ [i, j] -> [(i + j)/2] }",
"{ [1, 2] }",
"3/2" },
8420 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [4] }",
"4" },
8421 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [3] }",
"NaN" },
8422 {
"{ [i] -> [i] : i mod 2 = 0 }",
"{ [x] : false }",
"NaN" },
8423 {
"[m, n] -> { [2m + 3n] }",
"[n=1, m=10] -> { : }",
"23" },
8469 "{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }",
8472 "{ [x] : x mod 2 = 0 }",
8473 "{ [x] : x mod 2 = 1 }",
8474 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) < x }",
8475 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) < x }",
8476 "{ [x, y] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8477 "{ [y, x] : x mod 2 = 0 and 3*floor(y/2) = x + y }",
8478 "[n] -> { [y, x] : 2*((x + 2y) mod 3) = n }",
8479 "{ [x, y] : (2*floor(x/3) + 3*floor(y/4)) mod 5 = x }",
8504 "parsed output not the same",
return -1);
8521 ma = isl_multi_aff_set_aff(
ma, 0,
aff);
8525 equal = isl_multi_aff_plain_is_equal(
ma, ma2);
8526 isl_multi_aff_free(ma2);
8527 isl_multi_aff_free(
ma);
8549 mpa = isl_multi_pw_aff_set_pw_aff(mpa, 0,
pa);
8553 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
8554 isl_multi_pw_aff_free(mpa2);
8555 isl_multi_pw_aff_free(mpa);
8581 str =
"[x] -> { [1] : x % 4 <= 2; [2] : x = 3 }";
8593 equal = !strcmp(s,
"4 * floord(x, 4) + 2 >= x ? 1 : 2");
8609 str =
"{ [a, b, c, d, e, f, g, h, i, j, k] : "
8610 "3i >= 1073741823b - c - 1073741823e + f and c >= 0 and "
8611 "3i >= -1 + 3221225466b + c + d - 3221225466e - f and "
8612 "2e >= a - b and 3e <= 2a and 3k <= -a and f <= -1 + a and "
8613 "3i <= 4 - a + 4b + 2c - e - 2f and 3k <= -a + c - f and "
8614 "3h >= -2 + a and 3g >= -3 - a and 3k >= -2 - a and "
8615 "3i >= -2 - a - 2c + 3e + 2f and 3h <= a + c - f and "
8616 "3h >= a + 2147483646b + 2c - 2147483646e - 2f and "
8617 "3g <= -1 - a and 3i <= 1 + c + d - f and a <= 1073741823 and "
8618 "f >= 1 - a + 1073741822b + c + d - 1073741822e and "
8619 "3i >= 1 + 2b - 2c + e + 2f + 3g and "
8620 "1073741822f <= 1073741822 - a + 1073741821b + 1073741822c +"
8621 "d - 1073741821e and "
8622 "3j <= 3 - a + 3b and 3g <= -2 - 2b + c + d - e - f and "
8623 "3j >= 1 - a + b + 2e and "
8624 "3f >= -3 + a + 3221225462b + 3c + d - 3221225465e and "
8625 "3i <= 4 - a + 4b - e and "
8626 "f <= 1073741822 + 1073741822b - 1073741822e and 3h <= a and "
8627 "f >= 0 and 2e <= 4 - a + 5b - d and 2e <= a - b + d and "
8628 "c <= -1 + a and 3i >= -2 - a + 3e and "
8629 "1073741822e <= 1073741823 - a + 1073741822b + c and "
8630 "3g >= -4 + 3221225464b + 3c + d - 3221225467e - 3f and "
8631 "3i >= -1 + 3221225466b + 3c + d - 3221225466e - 3f and "
8632 "1073741823e >= 1 + 1073741823b - d and "
8633 "3i >= 1073741823b + c - 1073741823e - f and "
8634 "3i >= 1 + 2b + e + 3g }";
8641 if (empty < 0 ||
subset < 0)
8662 str =
"{ [a, b, c, d, e, f, g, h] : 5f = 1 + 4a - b + 5c - d - 2e and "
8663 "3h = 2 + b + c and 14c >= 9 - 3a + 25b and "
8664 "4c <= 50 - 3a + 23b and 6b <= -39 + a and "
8665 "9g >= -6 + 3a + b + c and e < a + b - 2d and "
8666 "7d >= -5 + 2a + 2b and 5g >= -14 + a - 4b + d + 2e and "
8667 "9g <= -28 - 5b - 2c + 3d + 6e }";
8685 str =
"{ [i] -> [j] }";
8693 str =
"{ [i] -> [j] }";
8701 str =
"{ [i] -> [j] }";
8709 str =
"{ [i] -> [j] }";
8717 str =
"{ [i] -> [j] }";
8725 str =
"{ [i] -> [j] }";
8742 str =
"{ [i] -> [j] : i = 2j }";
8761 str =
"{ A[i] -> A[i + 1] }";
8783 str =
"{ [i,j] : j = 4 i + 1 and 0 <= i <= 100; "
8784 "[i,j] : j = 4 i + 3 and 500 <= i <= 600 }";
8807 str =
"{ A[B[] -> C[]] -> D[E[] -> F[]] }";
8812 ma1 = isl_multi_aff_align_params(
ma1, space);
8814 str =
"[N] -> { A[B[] -> C[]] -> D[E[] -> F[]] }";
8817 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
8819 isl_multi_aff_free(
ma1);
8820 isl_multi_aff_free(ma2);
8826 "result not as expected",
return -1);
8848 ma = isl_multi_aff_from_aff_list(space, isl_aff_list_from_aff(
aff));
8849 isl_multi_aff_free(
ma);
8875 const char *str_with, *str_without;
8881 str_with =
"[n, m, o] -> { [m] }";
8882 str_without =
"[m] -> { [m] }";
8895 "result not as expected",
return -1);
8908 "result not as expected",
return -1);
8921 "result not as expected",
return -1);
8938 list = isl_id_list_alloc(ctx, 4);
8939 list = isl_id_list_add(list,
b);
8940 list = isl_id_list_insert(list, 0,
a);
8941 list = isl_id_list_add(list, c);
8942 list = isl_id_list_add(list, d);
8943 list = isl_id_list_drop(list, 1, 1);
8945 n = isl_id_list_n_id(list);
8949 isl_id_list_free(list);
8951 "unexpected number of elements in list",
return -1);
8954 id = isl_id_list_get_id(list, 0);
8957 id = isl_id_list_get_id(list, 1);
8960 id = isl_id_list_get_id(list, 2);
8964 isl_id_list_free(list);
8968 "unexpected elements in list",
return -1);
8982 str =
"[N] -> { A[0, N + 1] }";
8998 "[N] -> { [i] : N - 1 <= 2 i <= N }",
8999 "[N] -> { [i] : exists a : i = 4 a and N - 1 <= i <= N }",
9000 "[N] -> { [i,j] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9001 "[N] -> { [[i]->[j]] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
9002 "[N] -> { [3*floor(N/2) + 5*floor(N/3)] }",
9003 "[a, b] -> { [c, d] : (4*floor((-a + c)/4) = -a + c and "
9004 "32*floor((-b + d)/32) = -b + d and 5 <= c <= 8 and "
9005 "-3 + c <= d <= 28 + c) }",
9039 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9040 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9041 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9042 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9044 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9045 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9046 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9082 "{ [x] -> A[x] : x >= 0 }",
9083 "{ [x] -> A[x] : x >= 0; [x] -> A[-x] : x < 0 }",
9084 "{ [x] -> A[x, x + 1] }",
9086 "{ [x] -> A[] : x >= 0 }",
9124 "{ [a, b, c, d] -> s0[a, b, e, f] : "
9125 "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
9126 "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
9127 "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
9129 "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
9130 "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
9131 "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
9132 "{ A[] -> B[0]; C[] -> B[1] }",
9133 "{ A[] -> B[]; C[] -> B[] }",
9190 str =
"{ [A[] -> B[]] -> C[] }";
9201 "curried map should not be equal to original",
9212 {
"{ B[i,j] -> C[i + 2j] }" ,
"{ A[a,b] -> B[b,a] }",
9213 "{ A[a,b] -> C[b + 2a] }" },
9214 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/2] }",
"{ A[a] -> C[a] }" },
9215 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[2a] }",
"{ A[a] -> C[a] }" },
9216 {
"{ B[i] -> C[(i)/2] }",
"{ A[a] -> B[(a)/3] }",
9217 "{ A[a] -> C[(a)/6] }" },
9218 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[5a] }",
"{ A[a] -> C[10a] }" },
9219 {
"{ B[i] -> C[2i] }",
"{ A[a] -> B[(a)/3] }",
9220 "{ A[a] -> C[(2a)/3] }" },
9221 {
"{ B[i,j] -> C[i + j] }",
"{ A[a] -> B[a,a] }",
"{ A[a] -> C[2a] }"},
9222 {
"{ B[a] -> C[a,a] }",
"{ A[i,j] -> B[i + j] }",
9223 "{ A[i,j] -> C[i + j, i + j] }"},
9224 {
"{ B[i] -> C[([i/2])] }",
"{ B[5] }",
"{ C[2] }" },
9225 {
"[n] -> { B[i,j] -> C[([i/2]) + 2j] }",
9226 "[n] -> { B[n,[n/3]] }",
"[n] -> { C[([n/2]) + 2*[n/3]] }", },
9227 {
"{ [i, j] -> [floor((i)/4) + floor((2*i+j)/5)] }",
9228 "{ [i, j] -> [floor((i)/3), j] }",
9229 "{ [i, j] -> [(floor((i)/12) + floor((j + 2*floor((i)/3))/5))] }" },
9244 equal = isl_multi_aff_plain_is_equal(
ma1, ma2);
9245 isl_multi_aff_free(
ma1);
9246 isl_multi_aff_free(ma2);
9274 ok =
str ? !strcmp(
str,
"-(A + B)") : -1;
9279 if (ok < 0 ||
equal < 0)
9283 "equal expressions not considered equal",
return -1);
9286 "isl_ast_expr printed incorrectly",
return -1);
9294 ok =
str ? !strcmp(
str,
"C - (A + B)") : -1;
9302 "isl_ast_expr printed incorrectly",
return -1);
9371 "unexpected number of for nodes",
return NULL);
9374 "unexpected depth",
return NULL);
9388 "expecting single range space",
return NULL);
9401 "spaces don't match",
return NULL);
9426 "mismatch in number of for nodes",
9466 isl_ast_node_list *children;
9473 child = isl_ast_node_list_get_at(children, 0);
9474 isl_ast_node_list_free(children);
9496 int modified_count = 0;
9504 str =
"[N] -> { : N >= 10 }";
9506 str =
"[N] -> { A[i,j] -> S[8,i,3,j] : 0 <= i,j <= N; "
9507 "B[i,j] -> S[8,j,9,i] : 0 <= i,j <= N }";
9528 &modified_count) < 0)
9538 "unexpected number of for nodes",
9541 if (modified_count != 2)
9543 "unexpected number of for nodes after changes",
9561 str =
"{ A[i,j] -> [i,j] : 0 <= i,j <= 1 }";
9566 str =
"{ [i,j] -> atomic[1] : i + j = 1; [i,j] -> unroll[1] : i = j }";
9604 str =
"[n] -> { A[i] -> [i] : 0 <= i <= 100 and n <= i <= n + 2 }";
9608 str =
"{ [i] -> unroll[0] }";
9624 "unexpected number of for nodes",
return -1);
9644 str =
"[N,M] -> { A[i,j] -> [i,j] : 0 <= i <= N and 0 <= j <= M }";
9661 "not expecting if node",
return -1);
9678 "expecting if node",
return -1);
9711 "code should not contain any for loop",
9735 str =
"{ A[] -> [1, 1, 2]; B[i] -> [1, i, 0] : i >= 1 and i <= 2 }";
9738 str =
"{ [a, b, c] -> unroll[1] : exists (e0 = [(a)/4]: "
9739 "4e0 >= -1 + a - b and 4e0 <= -2 + a + b) }";
9778 str =
"[n] -> { [n/2] : n <= 0 and n % 2 = 0; [0] : n > 0 }";
9793 "expressions should not be combined",
return -1);
9824 str =
"{ [i,j] -> [i+j, 4i-j] }";
9826 str =
"{ [i,j] -> [4i-j] }";
9839 "expressions not equal",
return -1);
9860 mpa2 = isl_multi_pw_aff_flat_range_product(mpa1, mpa2);
9861 str =
"{ [i] -> [(i : i > 0), 2i] }";
9864 equal = isl_multi_pw_aff_plain_is_equal(mpa1, mpa2);
9866 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 0);
9868 pa = isl_multi_pw_aff_get_pw_aff(mpa1, 1);
9874 isl_multi_pw_aff_free(mpa1);
9875 isl_multi_pw_aff_free(mpa2);
9881 "expressions not equal",
return -1);
9883 if (equal_domain < 0)
9887 "domains unexpectedly equal",
return -1);
9902 str =
"{ A[x,y] -> B[] : x >= y }";
9904 involves1 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 2);
9905 mpa1 = isl_multi_pw_aff_copy(mpa);
9907 mpa = isl_multi_pw_aff_insert_dims(mpa,
isl_dim_in, 0, 1);
9908 involves2 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 0, 1);
9909 involves3 = isl_multi_pw_aff_involves_dims(mpa,
isl_dim_in, 1, 2);
9910 str =
"{ [a,x,y] -> B[] : x >= y }";
9912 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa2);
9913 isl_multi_pw_aff_free(mpa2);
9915 mpa = isl_multi_pw_aff_drop_dims(mpa,
isl_dim_in, 0, 1);
9916 mpa = isl_multi_pw_aff_set_tuple_name(mpa,
isl_dim_in,
"A");
9918 equal = isl_multi_pw_aff_plain_is_equal(mpa, mpa1);
9919 isl_multi_pw_aff_free(mpa1);
9920 isl_multi_pw_aff_free(mpa);
9922 if (involves1 < 0 || involves2 < 0 || involves3 < 0 ||
equal < 0)
9926 "incorrect result of dimension insertion/removal",
9928 if (!involves1 || involves2 || !involves3)
9930 "incorrect characterization of involved dimensions",
9964 "{ A[x, y] -> [] : x + y >= 0 }",
9965 "[N] -> { A[x, y] -> [x] : x + y <= N }",
9966 "[N] -> { A[x, y] -> [x : y] : x + y <= N }",
10032 str =
"{ [i0, i1, i2, i3] : i0 >= -2 and 6i2 <= 4 + i0 + 5i1 and "
10033 "i2 <= 22 and 75i2 <= 111 + 13i0 + 60i1 and "
10034 "25i2 >= 38 + 6i0 + 20i1 and i0 <= -1 and i2 >= 20 and "
10044 "basic set should be empty",
return -1);
10058 str =
"{ [a] : exists e0, e1: 32e1 = 31 + 31a + 31e0 }";
10067 "equality not simplified away",
return -1);
10094 str =
"{ [1, b, c, 1 - c] -> [e] : 2e <= -c and 2e >= -3 + c }";
10096 str =
"{ [a, b, c, d] : c <= 1 and 2d >= 6 - 4b - c }";
10117 str =
"[a, b, c, d, e] -> { [] : exists (e0: 2d = b and a <= 124 and "
10118 "b <= 2046 and b >= 0 and b <= 60 + 64a and 2e >= b + 2c and "
10119 "2e >= b and 2e <= 1 + b and 2e <= 1 + b + 2c and "
10120 "32768e0 >= -124 + a and 2097152e0 <= 60 + 64a - b) }";
10147 str =
"[n] -> { A[i] : 0 <= i < n; B[] }";
10171 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10176 str =
"{ S1[i,j] : i > j }";
10178 filters = isl_union_set_list_from_union_set(uset);
10179 str =
"{ S1[i,j] : i <= j; S2[i,j] }";
10181 filters = isl_union_set_list_add(filters, uset);
10186 str =
"([] : { S1[i,j] : i > j })";
10188 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10189 isl_multi_union_pw_aff_free(mupa2);
10190 isl_multi_union_pw_aff_free(
mupa);
10217 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10 }";
10221 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [9 - i] }]";
10225 str =
"[{ S1[i,j] -> [j]; S2[i,j] -> [j] }]";
10256 "expressions not equal",
return -1);
10272 int equal, equal_expansion;
10283 str =
"{ S1[i,j] : 0 <= i,j < 10; S2[i,j] : 0 <= i,j < 10; "
10284 "S3[i,j] : 0 <= i,j < 10 }";
10288 str =
"[{ S1[i,j] -> [i]; S2[i,j] -> [i]; S3[i,j] -> [i] }]";
10292 str =
"{ S1[i,j] }";
10294 filters = isl_union_set_list_from_union_set(uset);
10295 str =
"{ S2[i,j]; S3[i,j] }";
10297 filters = isl_union_set_list_add(filters, uset);
10300 str =
"{ S2[i,j] }";
10302 filters = isl_union_set_list_from_union_set(uset);
10303 str =
"{ S3[i,j] }";
10305 filters = isl_union_set_list_add(filters, uset);
10330 str =
"{ group1[i] -> S1[i,j] : 0 <= i,j < 10; "
10331 "group1[i] -> S2[i,j] : 0 <= i,j < 10; "
10332 "group1[i] -> S3[i,j] : 0 <= i,j < 10 }";
10344 if (
equal < 0 || equal_expansion < 0)
10348 "expressions not equal",
return -1);
10349 if (!equal_expansion)
10351 "unexpected expansion",
return -1);
10371 {
"{ rat: [i] : 0 <= i <= 10 }",
10372 "{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }" },
10373 {
"{ rat: [i] : FALSE }",
10374 "{ rat: coefficients[[cst] -> [a]] }" },
10375 {
"{ rat: [i] : }",
10376 "{ rat: coefficients[[cst] -> [0]] : cst >= 0 }" },
10377 {
"{ [0:,1,2:3] }",
10378 "{ rat: coefficients[[c_cst] -> [a, b, c]] : "
10379 "a >= 0 and 2c >= -c_cst - b and 3c >= -c_cst - b }" },
10380 {
"[M, N] -> { [x = (1 - N):-1, -4x:(M - 4x)] }",
10381 "{ rat: coefficients[[c_cst, c_M = 0:, c_N = 0:] -> [a, b = -c_M:]] :"
10382 "4b >= -c_N + a and 4b >= -c_cst - 2c_N + a }" },
10383 {
"{ rat : [x, y] : 1 <= 2x <= 9 and 2 <= 3y <= 16 }",
10384 "{ rat: coefficients[[c_cst] -> [c_x, c_y]] : "
10385 "4c_y >= -6c_cst - 3c_x and 4c_y >= -6c_cst - 27c_x and "
10386 "32c_y >= -6c_cst - 3c_x and 32c_y >= -6c_cst - 27c_x }" },
10387 {
"{ [x, y, z] : 3y <= 2x - 2 and y >= -2 + 2x and 2y >= 2 - x }",
10388 "{ rat: coefficients[[cst] -> [a, b, c]] }" },
10395 {
"{ rat: coefficients[[cst] -> [a]] : cst >= 0 and 10a + cst >= 0 }",
10396 "{ rat: [i] : 0 <= i <= 10 }" },
10397 {
"{ rat: coefficients[[cst] -> [a]] : FALSE }",
10399 {
"{ rat: coefficients[[cst] -> [a]] }",
10400 "{ rat: [i] : FALSE }" },
10424 "incorrect dual",
return -1);
10441 "incorrect dual",
return -1);
10456 { 0, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10457 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10459 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10460 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10462 { 1, 0,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10463 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10465 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10466 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10468 { 0, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10469 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10471 "[{ S[i,j] -> [floor(i/32)] }, { S[i,j] -> [floor(j/32)] }]",
10472 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10474 { 1, 1,
"[n] -> { S[i,j] : 0 <= i,j < n }",
10475 "[{ S[i,j] -> [i] }, { S[i,j] -> [j] }]",
10477 "[{ S[i,j] -> [32*floor(i/32)] }, { S[i,j] -> [32*floor(j/32)] }]",
10478 "[{ S[i,j] -> [i%32] }, { S[i,j] -> [j%32] }]",
10523 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa, mupa2);
10524 isl_multi_union_pw_aff_free(
mupa);
10525 isl_multi_union_pw_aff_free(mupa2);
10533 equal = isl_multi_union_pw_aff_plain_is_equal(
mupa,
10535 isl_multi_union_pw_aff_free(
mupa);
10536 isl_multi_union_pw_aff_free(mupa2);
10544 "unexpected result",
return -1);
10560 uint32_t hash1, hash2;
10572 if (hash1 != hash2)
10574 "domain hash not equal to hash of domain",
return -1);
10588 s =
"{ [] : exists x, y : 3y <= 2x and y >= -3 + 2x and 2y >= 2 - x }";
10597 "not recognized as universe set",
return -1);
10605 "[A, B, C] -> { [x, y, z] : x >= 0 and y >= 0 and y <= A - x and "
10606 "z >= 0 and z <= C - y and z <= B - x - y }",
10618 *cells = isl_basic_set_list_add(*cells, dom);
10630 n = isl_basic_set_list_n_basic_set(list);
10634 for (i = 0; i <
n; ++i) {
10637 bset_i = isl_basic_set_list_get_basic_set(list, i);
10638 for (j = i + 1; j <
n; ++j) {
10642 bset_j = isl_basic_set_list_get_basic_set(list, j);
10646 isl_die(isl_basic_set_list_get_ctx(list),
10649 if (disjoint < 0 || !disjoint)
10675 cells = isl_basic_set_list_alloc(ctx, 0);
10678 cells = isl_basic_set_list_free(cells);
10680 isl_basic_set_list_free(cells);
10742 {
"single-valued", &
test_sv },
10755 {
"piecewise quasi-polynomials", &
test_pwqp },
10763 {
"lexicographic order", &
test_lex },
10765 {
"dataflow analysis", &
test_dep },
10769 {
"dimension manipulation", &
test_dim },
10782 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)
#define isl_die(ctx, errno, msg, code)
isl_bool isl_bool_ok(int b)
isl_stat isl_stat_non_null(const void *obj)
#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_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)
struct @136277052127235302001362335036236067334354155255 sol_tests[]
static int test_union_map_mupa_conversion(isl_ctx *ctx)
static int test_min_special2(isl_ctx *ctx)
static int test_conflicting_context_schedule(isl_ctx *ctx)
static int test_eval(isl_ctx *ctx)
static int test_closure(isl_ctx *ctx)
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)
struct @227153107326043146302145062112014100102317066121 convex_hull_tests[]
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 struct @312242276265273206050076024022221044217204247150 bind_mupa_tests[]
static int test_bin_upma(isl_ctx *ctx)
static int test_pwqp(struct isl_ctx *ctx)
int test_equal(isl_ctx *ctx)
static isl_stat check_pairwise_disjoint(__isl_keep isl_basic_set_list *list)
static int test_val(isl_ctx *ctx)
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)
struct @073317244344013303260303174253310074300236206353 mupa_bin_tests[]
static int test_empty_projection(isl_ctx *ctx)
static int test_dual(isl_ctx *ctx)
static struct @121334201376000072241342302345242002002112124351 bind_aff_tests[]
static isl_stat test_bind_map_domain(isl_ctx *ctx)
static int test_parse_mupa(isl_ctx *ctx)
static isl_stat test_unbind_multi_aff(isl_ctx *ctx)
static isl_stat set_check_equal(__isl_keep isl_set *set, const char *str)
static int test_coalescing_schedule(isl_ctx *ctx)
static isl_stat test_aff_set_tuple_id(isl_ctx *ctx)
static isl_stat test_bind_set(isl_ctx *ctx)
static struct @263260042340030002023204212344055054207256061003 opt_pw_tests[]
int test_coalesce_set(isl_ctx *ctx, const char *str, int check_one)
static int test_un_val(isl_ctx *ctx)
static int test_min_special(isl_ctx *ctx)
static isl_stat add_cell(__isl_take isl_cell *cell, void *user)
static isl_stat val_check_equal(__isl_keep isl_val *val, const char *str)
static 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)
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)
struct @112052067337023134134123200132300000022321127266 tests[]
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 @135300012331366305032307165220313216350342356305 subtract_domain_tests[]
int test_eliminate(isl_ctx *ctx)
static struct @016015352272170164072066104344001241103075150127 bind_pa_tests[]
static int test_skewing_schedule(isl_ctx *ctx)
static int test_lexmin(struct isl_ctx *ctx)
struct @234152315152023263103113146365272230152161306351 subset_tests[]
static __isl_give isl_union_map * compute_schedule(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity)
static int test_strongly_satisfying_schedule(isl_ctx *ctx)
static isl_stat test_upma_uset(isl_ctx *ctx)
int test_fixed(isl_ctx *ctx)
static 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)
struct @174057011213107332265220210271111213013313024017 bind_umap_range_tests[]
static int test_bin_upma_fail(isl_ctx *ctx)
static int test_special_conditional_schedule_constraints_2(isl_ctx *ctx)
static int test_locus(isl_ctx *ctx)
static isl_stat test_subset_duplicate_integer_divisions(isl_ctx *ctx)
static int test_recession_cone(struct isl_ctx *ctx)
static int test_product_pma(isl_ctx *ctx)
struct @050155310362100077075031154044213015144052006053 aff_eval_tests[]
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 @234372225360351010125242076055167203305366236111 mupa_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)
struct @123161370147266307110215130177302342032352135375 coalesce_tests[]
static int test_gist(struct isl_ctx *ctx)
struct @275270173251312013201020346130124230036336200035 bind_pma_domain_tests[]
struct @343352217161364004312145033045065131243340231327 mupa_pa_tests[]
static void test_parse_pwaff(isl_ctx *ctx, const char *str)
static int test_construction_2(isl_ctx *ctx)
int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, const char *r, const char *s, int tilable, int parallel)
int test_slice(isl_ctx *ctx)
static int test_min_mpa(isl_ctx *ctx)
static int test_universe(isl_ctx *ctx)
struct @016117341140033035307325017250231030001172225320 lexmin_tests[]
static int test_conditional_schedule_constraints(isl_ctx *ctx)
static isl_stat test_gist_empty(isl_ctx *ctx)
static struct @250133302144052016047034213024303200342344001123 unbind_multi_aff_tests[]
int test_parse_map_equal(isl_ctx *ctx, const char *str, const char *str2)
static int test_tile(isl_ctx *ctx)
struct @031064245322346342056014251357027126016366134020 pwqp_gist_tests[]
static isl_stat test_ma_conversion(isl_ctx *ctx)
int test_vertices(isl_ctx *ctx)
static int test_ast_expr(isl_ctx *ctx)
struct @032104377171373353064050046203260213352306036137 un_locus_tests[]
struct @153221355010016326374145353067372356257264351356 mupa_upma_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 int test_mupa_set(isl_ctx *ctx)
struct @110236216215267062025113222262143012150125310315 bind_map_domain_tests[]
static isl_stat test_coalesce_union(isl_ctx *ctx, const char *str1, const char *str2)
static int test_ast_gen3(isl_ctx *ctx)
const char * conditional_validity
static struct @175201007007107104020277010220303030346261040141 upma_test_tests[]
struct @225231020345174122145152306206242040116330170152 live_range_tests[]
int test_output(isl_ctx *ctx)
static int test_bin_aff(isl_ctx *ctx)
struct @306152342120224230045201022302340006115324040221 mpa_bin_tests[]
static int test_multi_pw_aff(isl_ctx *ctx)
static int test_bind(isl_ctx *ctx)
struct @125356034062032156215334117027034307076106117034 pma_equal_tests[]
static int test_simplify_1(isl_ctx *ctx)
#define ARRAY_SIZE(array)
static int test_get_list(isl_ctx *ctx)
static int test_schedule_tree_group(isl_ctx *ctx)
static int test_map_conversion(isl_ctx *ctx)
static isl_stat test_bind_pma_domain(isl_ctx *ctx)
static int test_domain_hash(isl_ctx *ctx)
static int test_schedule_incremental(isl_ctx *ctx)
static int test_bijective(struct isl_ctx *ctx)
static int test_parse_multi(isl_ctx *ctx)
struct @346121156341046050001065107224026155011163173256 sv_tests[]
static int test_simple_hull(struct isl_ctx *ctx)
static int test_mpa_conversion(isl_ctx *ctx)
static int test_bin_pw_aff(isl_ctx *ctx)
static int test_dim_max_2(isl_ctx *ctx)
const char * set_conversion_tests[]
static isl_stat test_intersect_2(isl_ctx *ctx)
static int test_plain_gist(isl_ctx *ctx)
int test_drop_unused_parameters(isl_ctx *ctx)
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)
struct @320003045101313370267023112313076000262133016064 unbind_set_tests[]
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)
struct @326352374276177063217211122037271225223365343330 mupa_set_tests[]
static int test_coalesce_special(struct isl_ctx *ctx)
static int test_subset(isl_ctx *ctx)
static isl_stat test_gist_empty_pair(isl_ctx *ctx, const char *map, const char *context)
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)
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)
int test_affine_hull(struct isl_ctx *ctx)
static int test_intersect_1(isl_ctx *ctx)
struct @105221326373240210216336053113147175001126267127 bind_pma_domain_wrapped_tests[]
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[]
static isl_bool count_for(__isl_keep isl_ast_node *node, void *user)
struct @015267075333042347372041363346316206161075303054 upma_bin_tests[]
int test_dim_max(isl_ctx *ctx)
static int test_bounded(isl_ctx *ctx)
struct @277255054242064365360344327310257371007324027162 pw_aff_bin_op[]
static char * get_filename(isl_ctx *ctx, const char *name, const char *suffix)
struct @246277342025272067075065104332037275214221302171 opt_tests[]
struct @061124063161067110073243100231030174062076155272 mupa_un_tests[]
struct @225310166120276347227137376175363010237007305060 upma_bin_fail_tests[]
static __isl_give isl_map * cocoa_fig_1_right_power(isl_ctx *ctx)
static int test_union(isl_ctx *ctx)
struct @230361366346155317003354075102156334256111143174 parse_map_equal_tests[]
static isl_stat test_aff_normalize(isl_ctx *ctx)
struct @046213276021216247135016337073226265266123046377 upma_uset_tests[]
static int map_check_equal(__isl_keep isl_map *map, const char *str)
int test_injective(isl_ctx *ctx)
static int test_bin_locus(isl_ctx *ctx)
static int test_ast_gen4(isl_ctx *ctx)
static isl_stat test_pw_max(struct isl_ctx *ctx)
static int test_curry(isl_ctx *ctx)
static int test_partial_lexmin(isl_ctx *ctx)
static int test_bin_val(isl_ctx *ctx)
static int test_special_conditional_schedule_constraints(isl_ctx *ctx)
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 @365347224236156042276345137037354162060170254355 aff_bin_tests[]
struct @237150141343053203027125264373312344000200200232 unbind_aff_tests[]
static int test_mupa_uset(isl_ctx *ctx)
struct @217276206324134050271014074335325122205326340376 plain_gist_tests[]
static isl_stat test_unbind_aff(isl_ctx *ctx)
static int test_dep(struct isl_ctx *ctx)
void test_application_case(struct isl_ctx *ctx, const char *name)
static isl_stat test_bind_umap_range(isl_ctx *ctx)
static int test_mupa_upma(isl_ctx *ctx)
struct @307311126023073361146236001125175247211007332263 val_bin_op[]
struct @073223071055162131251174000110304051102024241067 pw_aff_bin_tests[]
static int test_bin_mpa(isl_ctx *ctx)
static isl_stat test_output_mpa(isl_ctx *ctx)
static int test_simplify_2(isl_ctx *ctx)
static isl_stat test_pwqp_gist(isl_ctx *ctx)
static int test_flow(isl_ctx *ctx)
static isl_stat test_coalesce_special4(isl_ctx *ctx)
static int test_conversion(isl_ctx *ctx)
struct @341133352173154043211061172152136021073007253337 coef_tests[]
static isl_stat check_single_expr_min(isl_ctx *ctx, const char *s1, const char *s2)
struct @377335042054304314277065373361216112115061122073 bin_locus_tests[]
static isl_bool set_is_equal(__isl_keep isl_set *set, const char *str)
static isl_stat test_bind_pma_domain_wrapped(isl_ctx *ctx)
static int test_schedule_tree(isl_ctx *ctx)
static int test_schedule_tree_group_2(isl_ctx *ctx)
static int test_convex_hull_algo(isl_ctx *ctx, int convex)
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 struct @216257140162010135245171323044214145146165047335 bin_locus_ma_tests[]
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 @033013227044342070133067222073072061020241124316 coalesce_unbounded_tests[]
struct @174057113116164366203126207022041076172367046214 mupa_ma_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)
static int test_coalesce(struct isl_ctx *ctx)
struct @336041326377237040302274063337145151235045104073 pullback_tests[]
static int test_align_parameters(isl_ctx *ctx)
static int test_simplify(isl_ctx *ctx)
struct @032326224263051015242172034057017051301131332221 mpa_un_tests[]
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)
struct @306255212222345361073270334305355037300163072106 bijective_tests[]
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)
const char * chambers_tests[]
struct @212251224320377234215223061215057205173040036122 tile_tests[]
static struct @345352160040353307102050305160332264207213132026 bound_tests[]
static int test_has_schedule(isl_ctx *ctx, const char *domain, const char *validity, const char *proximity)
static __isl_give isl_map * cocoa_fig_1_right_graph(isl_ctx *ctx)
struct isl_vertices_test_data vertices_tests[]
static struct @020074134063177147374305013173201056235322265307 umap_bin_tests[]
int test_sample(isl_ctx *ctx)
static isl_stat test_bin_locus_ma(isl_ctx *ctx)
const char * mpa_conversion_tests[]
static int test_set_conversion(isl_ctx *ctx)
static int test_upa(isl_ctx *ctx)
static isl_stat test_output_ma(isl_ctx *ctx)
static isl_stat test_parse_pma(isl_ctx *ctx)
static const char * parse_multi_pw_aff_fail_tests[]
static __isl_give isl_ast_node * count_domains(__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build, void *user)
static const char * reparse_multi_pw_aff_tests[]
int test_coalesce_unbounded_wrapping(isl_ctx *ctx)
static const char * multi_pw_aff_box_tests[]
static int test_residue_class(isl_ctx *ctx)
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)
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)
struct @166252077064030177264324146316062043227161027001 mupa_pma_tests[]
static int map_is_equal(__isl_keep isl_map *map, const char *str)
static struct @034023122066004347332201145302160211004356015173 bind_set_tests[]
static int test_schedule_tree_prefix(isl_ctx *ctx)
static __isl_give isl_ast_node * create_leaf(__isl_take isl_ast_build *build, void *user)
static isl_stat test_bin_union_map(isl_ctx *ctx)
struct @027213002172344323165175365021062236374012126065 aff_bin_op[]
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_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)