Disable limits if mir-opt-level >= 4

This commit is contained in:
Jannis Christopher Köhl 2022-11-12 20:14:34 +01:00
parent d66a00a7b1
commit ea23585c91

View File

@ -14,6 +14,7 @@
use crate::MirPass; use crate::MirPass;
// These constants are somewhat random guesses and have not been optimized. // These constants are somewhat random guesses and have not been optimized.
// If `tcx.sess.mir_opt_level() >= 4`, we ignore the limits (this can become very expensive).
const BLOCK_LIMIT: usize = 100; const BLOCK_LIMIT: usize = 100;
const PLACE_LIMIT: usize = 100; const PLACE_LIMIT: usize = 100;
@ -26,7 +27,7 @@ fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
#[instrument(skip_all level = "debug")] #[instrument(skip_all level = "debug")]
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
if body.basic_blocks.len() > BLOCK_LIMIT { if tcx.sess.mir_opt_level() < 4 && body.basic_blocks.len() > BLOCK_LIMIT {
debug!("aborted dataflow const prop due too many basic blocks"); debug!("aborted dataflow const prop due too many basic blocks");
return; return;
} }
@ -42,7 +43,7 @@ fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
// `O(num_nodes * tracked_places * n)` in terms of time complexity. Since the number of // `O(num_nodes * tracked_places * n)` in terms of time complexity. Since the number of
// map nodes is strongly correlated to the number of tracked places, this becomes more or // map nodes is strongly correlated to the number of tracked places, this becomes more or
// less `O(n)` if we place a constant limit on the number of tracked places. // less `O(n)` if we place a constant limit on the number of tracked places.
if map.tracked_places() > PLACE_LIMIT { if tcx.sess.mir_opt_level() < 4 && map.tracked_places() > PLACE_LIMIT {
debug!("aborted dataflow const prop due to too many tracked places"); debug!("aborted dataflow const prop due to too many tracked places");
return; return;
} }