>>> # >>> # Test various variable substitution scenarios >>> # >>> >>> symbolic n; >>> >>> # unimodular transformation >>> # >>> is := { [i,j] : 0 <=i<= 4 && 0 <= j<= 6 }; >>> t := { [i,j] -> [i2,j2] : i2 = i+j && j2 = i+2*j }; >>> codegen t:is; for(t1 = 0; t1 <= 10; t1++) { for(t2 = max(t1,2*t1-4); t2 <= min(t1+6,2*t1); t2++) { s1(2*t1-t2,t2-t1); } } >>> >>> >>> # non-unimodular transformation >>> # >>> is := { [i,j] : 0 <=i<= 4 && 0 <= j<= 6 }; >>> t := { [i,j] -> [i2,j2] : i2 = 2*i+j && j2 = i+2*j }; >>> codegen t:is; for(t1 = 0; t1 <= 14; t1++) { for(t2 = max(3*intDiv(intDiv(t1+1,2)--t1+2,3)+-t1,2*t1-12); t2 <= min(intDiv(t1+18,2),2*t1); t2 += 3) { s1(intDiv(2*t1-t2,3),intDiv(2*t2-t1,3)); } } >>> >>> >>> # second loop level is degenerated >>> # >>> is := {[i,j]:1 <= j <= 100 && j = i+4}; >>> t := {[i,j]->[a,b]: a = i && b = j}; >>> codegen t:is; for(t1 = -3; t1 <= 96; t1++) { s1(t1,t1+4); } >>> >>> >>> # global variable case 1 >>> # >>> is := { [i] : 19+n = i }; >>> t:= { [i] -> [j]: j = i }; >>> codegen t:is; s1(n+19); >>> >>> >>> # global variable case 2 >>> # >>> is := {[i]: i-16 <= n < i && exists (alpha: i = n+1+3*alpha) }; >>> t := {[i] -> [i] : Exists ( alpha : i = 1+n+18alpha)}; >>> codegen t:is; s1(n+1);