Add support for running the regalloc2 checker. (#4043)

With these fixes, all this PR has to do is instantiate and run the
checker on the `regalloc2::Output`. This is off by default, and is
enabled by setting the `regalloc_checker` Cranelift option.

This restores the old functionality provided by e.g. the
`backtracking_checked` regalloc algorithm setting rather than
`backtracking` when we were still on regalloc.rs.
This commit is contained in:
Chris Fallin
2022-04-18 14:06:07 -07:00
committed by GitHub
parent 534e4263ce
commit 0af8737ec3
7 changed files with 39 additions and 3 deletions

View File

@@ -47,5 +47,23 @@ pub fn compile<B: LowerBackend + TargetIsa>(
.expect("register allocation")
};
// Run the regalloc checker, if requested.
if b.flags().regalloc_checker() {
let _tt = timing::regalloc_checker();
let mut checker = regalloc2::checker::Checker::new(&vcode, machine_env);
checker.prepare(&regalloc_result);
checker
.run()
.map_err(|err| {
log::error!(
"Register allocation checker errors:\n{:?}\nfor vcode:\n{:?}",
err,
vcode
);
err
})
.expect("register allocation checker");
}
Ok((vcode, regalloc_result))
}