Skip to content
Snippets Groups Projects
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(*);