Newer
Older
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
macro simpl!(X) {
ccp(X);
simplify-cfg(X);
lift-dc-math(X);
gvn(X);
phi-elim(X);
dce(X);
infer-schedules(X);
}
simpl!(*);
let fuse1 = outline(cava@fuse1);
inline(fuse1);
let fuse2 = outline(cava@fuse2);
inline(fuse2);
let fuse3 = outline(cava@fuse3);
inline(fuse3);
let fuse4 = outline(cava@fuse4);
inline(fuse4);
let fuse5 = outline(cava@fuse5);
inline(fuse5);
ip-sroa(*);
sroa(*);
simpl!(*);
no-memset(fuse1@res1);
no-memset(fuse1@res2);
fixpoint {
forkify(fuse1);
fork-guard-elim(fuse1);
fork-coalesce(fuse1);
}
simpl!(fuse1);
array-slf(fuse1);
fixpoint {
forkify(fuse1);
fork-guard-elim(fuse1);
fork-coalesce(fuse1);
}
predication(fuse1);
simpl!(fuse1);
write-predication(fuse1);
simpl!(fuse1);
parallel-reduce(fuse1@loop);
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
inline(fuse2);
no-memset(fuse2@res);
no-memset(fuse2@filter);
no-memset(fuse2@tmp);
fixpoint {
forkify(fuse2);
fork-guard-elim(fuse2);
fork-coalesce(fuse2);
}
simpl!(fuse2);
predication(fuse2);
simpl!(fuse2);
let median = outline(fuse2@median);
fork-unroll(median@medianOuter);
simpl!(median);
fixpoint {
forkify(median);
fork-guard-elim(median);
}
simpl!(median);
fixpoint {
fork-unroll(median);
}
ccp(median);
array-to-product(median);
sroa(median);
phi-elim(median);
predication(median);
simpl!(median);
inline(fuse2);
ip-sroa(*);
sroa(*);
array-slf(fuse2);
write-predication(fuse2);
simpl!(fuse2);
no-memset(fuse3@res);
fixpoint {
forkify(fuse3);
fork-guard-elim(fuse3);
fork-coalesce(fuse3);
}
simpl!(fuse3);
no-memset(fuse4@res);
no-memset(fuse4@l2);
fixpoint {
forkify(fuse4);
fork-guard-elim(fuse4);
fork-coalesce(fuse4);
}
simpl!(fuse4);
fork-unroll(fuse4@channel_loop);
simpl!(fuse4);
fixpoint {
fork-fusion(fuse4@channel_loop);
}
simpl!(fuse4);
array-slf(fuse4);
simpl!(fuse4);
if !feature("seq") {
let par = fuse4@image_loop \ fuse4@channel_loop;
fork-tile[4, 1, false, false](par);
fork-tile[8, 0, false, false](par);
fork-interchange[1, 2](par);
let split = fork-split(par);
let fuse4_body = outline(split.cava_3.fj2);
fork-coalesce(fuse4, fuse4_body);
simpl!(fuse4, fuse4_body);
fuse4 = fuse4_body;
}
no-memset(fuse5@res1);
no-memset(fuse5@res2);
fixpoint {
forkify(fuse5);
fork-guard-elim(fuse5);
fork-coalesce(fuse5);
}
simpl!(fuse5);
array-slf(fuse5);
simpl!(fuse5);
delete-uncalled(*);
simpl!(*);
fork-split(fuse1, fuse2, fuse3, fuse4, fuse5);
unforkify(fuse1, fuse2, fuse3, fuse4, fuse5);