summaryrefslogtreecommitdiff
path: root/omegalib/examples/substitution.out
blob: 3a084055e334a5035594ddddeab8f8db7a5c5974 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
>>> #
>>> # 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);