summaryrefslogtreecommitdiff
path: root/omega/examples/substitution
blob: 9d841fe1f3432c8ea7592e3b23bc0ef49edf6901 (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
#
# 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;

# 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;

# 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;

# global variable case 1
#
is := { [i] : 19+n = i };
t:= { [i] -> [j]: j = i };
codegen t:is;

# 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;