Skip to content
Snippets Groups Projects

Forkify + Loop Canonicalization + Initial Fork Fission

Merged Xavier Routh requested to merge fork-opt into main
1 file
+ 21
17
Compare changes
  • Side-by-side
  • Inline
+ 21
17
@@ -151,10 +151,19 @@ pub fn compile_ir(
@@ -151,10 +151,19 @@ pub fn compile_ir(
add_verified_pass!(pm, verify, GVN);
add_verified_pass!(pm, verify, GVN);
add_verified_pass!(pm, verify, PhiElim);
add_verified_pass!(pm, verify, PhiElim);
add_pass!(pm, verify, DCE);
add_pass!(pm, verify, DCE);
 
if x_dot {
 
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
 
}
add_pass!(pm, verify, Inline);
add_pass!(pm, verify, Inline);
 
if x_dot {
 
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
 
}
// Inlining may make some functions uncalled, so run this pass.
// Inlining may make some functions uncalled, so run this pass.
// In general, this should always be run after inlining.
// In general, this should always be run after inlining.
add_pass!(pm, verify, DeleteUncalled);
add_pass!(pm, verify, DeleteUncalled);
 
if x_dot {
 
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
 
}
// Run SROA pretty early (though after inlining which can make SROA more effective) so that
// Run SROA pretty early (though after inlining which can make SROA more effective) so that
// CCP, GVN, etc. can work on the result of SROA
// CCP, GVN, etc. can work on the result of SROA
add_pass!(pm, verify, InterproceduralSROA);
add_pass!(pm, verify, InterproceduralSROA);
@@ -163,30 +172,25 @@ pub fn compile_ir(
@@ -163,30 +172,25 @@ pub fn compile_ir(
// simplified
// simplified
add_verified_pass!(pm, verify, PhiElim);
add_verified_pass!(pm, verify, PhiElim);
add_pass!(pm, verify, DCE);
add_pass!(pm, verify, DCE);
if x_dot {
 
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
 
}
add_pass!(pm, verify, CCP);
add_pass!(pm, verify, CCP);
add_pass!(pm, verify, DCE);
add_pass!(pm, verify, DCE);
add_pass!(pm, verify, GVN);
add_pass!(pm, verify, GVN);
add_pass!(pm, verify, DCE);
add_pass!(pm, verify, DCE);
pm.add_pass(hercules_opt::pass::Pass::Serialize(module_name.clone() + ".module"));
if x_dot {
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
}
add_verified_pass!(pm, verify, CCP);
add_verified_pass!(pm, verify, DCE);
add_verified_pass!(pm, verify, GVN);
add_verified_pass!(pm, verify, LoopCanonicalization);
add_verified_pass!(pm, verify, Forkify);
add_verified_pass!(pm, verify, DCE);
add_verified_pass!(pm, verify, ForkGuardElim);
add_verified_pass!(pm, verify, LoopCanonicalization);
add_verified_pass!(pm, verify, Forkify);
if x_dot {
if x_dot {
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
}
}
add_pass!(pm, verify, LoopCanonicalization);
//add_pass!(pm, verify, ForkGuardElim);
// These two need to be ran in a loop, matmul has three layers,
 
// so list them three times for now.
 
add_pass!(pm, verify, Forkify);
 
add_pass!(pm, verify, ForkGuardElim);
 
add_pass!(pm, verify, Forkify);
 
add_pass!(pm, verify, ForkGuardElim);
 
add_pass!(pm, verify, Forkify);
 
add_pass!(pm, verify, ForkGuardElim);
add_verified_pass!(pm, verify, DCE);
add_verified_pass!(pm, verify, DCE);
add_pass!(pm, verify, ForkSplit);
add_pass!(pm, verify, ForkSplit);
add_pass!(pm, verify, Unforkify);
add_pass!(pm, verify, Unforkify);
Loading