cpu.sch 1.06 KiB
macro simpl!(X) {
ccp(X);
simplify-cfg(X);
lift-dc-math(X);
gvn(X);
phi-elim(X);
dce(X);
infer-schedules(X);
}
no-memset(srad@scratch);
phi-elim(*);
let loop1 = outline(srad@loop1);
let loop2 = outline(srad@loop2);
let loop3 = outline(srad@loop3);
simpl!(*);
const-inline(*);
crc(*);
slf(*);
write-predication(*);
simpl!(*);
predication(*);
simpl!(*);
predication(*);
simpl!(*);
fixpoint {
forkify(*);
fork-guard-elim(*);
fork-coalesce(*);
}
simpl!(*);
fork-interchange[0, 1](loop1);
reduce-slf(*);
simpl!(*);
slf(*);
simpl!(*);
if !feature("seq") {
fork-tile[32, 0, false, false](loop2);
let split = fork-split(loop2);
let loop2_body = outline(split.srad_1.fj1);
simpl!(loop2, loop2_body);
loop2 = loop2_body;
fork-tile[32, 0, false, false](loop3);
let split = fork-split(loop3);
let loop3_body = outline(split.srad_2.fj1);
simpl!(loop3, loop3_body);
loop3 = loop3_body;
inline(srad@loop2, srad@loop3);
delete-uncalled(*);
}
fork-split(extract, compress, loop1, loop2, loop3);
unforkify(extract, compress, loop1, loop2, loop3);
gcm(*);