Disable limits if mir-opt-level >= 4
This commit is contained in:
parent
d66a00a7b1
commit
ea23585c91
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user