]> git.lizzy.rs Git - rust.git/commitdiff
add -Z mir-opt-level to disable MIR optimizations
authorAriel Ben-Yehuda <arielb1@mail.tau.ac.il>
Sun, 7 Feb 2016 20:46:39 +0000 (22:46 +0200)
committerAriel Ben-Yehuda <ariel.byd@gmail.com>
Fri, 19 Feb 2016 23:38:27 +0000 (01:38 +0200)
setting -Z mir-opt-level=0 will disable all MIR optimizations
for easier debugging

src/librustc/session/config.rs
src/librustc_mir/mir_map.rs

index 864ff40fe10748479c01939c744e0f39afe8240b..f835613cfcbb998d29cbdee60b35e70b1fe745f9 100644 (file)
@@ -138,6 +138,7 @@ pub struct Options {
     pub no_trans: bool,
     pub error_format: ErrorOutputType,
     pub treat_err_as_bug: bool,
+    pub mir_opt_level: usize,
 
     /// if true, build up the dep-graph
     pub build_dep_graph: bool,
@@ -254,6 +255,7 @@ pub fn basic_options() -> Options {
         parse_only: false,
         no_trans: false,
         treat_err_as_bug: false,
+        mir_opt_level: 1,
         build_dep_graph: false,
         dump_dep_graph: false,
         no_analysis: false,
@@ -655,6 +657,8 @@ fn parse_passes(slot: &mut Passes, v: Option<&str>) -> bool {
           "show spans for compiler debugging (expr|pat|ty)"),
     print_trans_items: Option<String> = (None, parse_opt_string,
           "print the result of the translation item collection pass"),
+    mir_opt_level: Option<usize> = (None, parse_opt_uint,
+          "set the MIR optimization level (0-3)"),
 }
 
 pub fn default_lib_output() -> CrateType {
@@ -988,6 +992,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
     let parse_only = debugging_opts.parse_only;
     let no_trans = debugging_opts.no_trans;
     let treat_err_as_bug = debugging_opts.treat_err_as_bug;
+    let mir_opt_level = debugging_opts.mir_opt_level.unwrap_or(1);
     let incremental_compilation = debugging_opts.incr_comp;
     let dump_dep_graph = debugging_opts.dump_dep_graph;
     let no_analysis = debugging_opts.no_analysis;
@@ -1166,6 +1171,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
         parse_only: parse_only,
         no_trans: no_trans,
         treat_err_as_bug: treat_err_as_bug,
+        mir_opt_level: mir_opt_level,
         build_dep_graph: incremental_compilation || dump_dep_graph,
         dump_dep_graph: dump_dep_graph,
         no_analysis: no_analysis,
index 7a2b90fbbb31d9c0edfc0c5ceee09938031f225b..58b6d69ba5c1a85b293667b899d0ceee882dd3ac 100644 (file)
@@ -148,10 +148,11 @@ fn visit_fn(&mut self,
 
         match build_mir(Cx::new(&infcx), implicit_arg_tys, id, span, decl, body) {
             Ok(mut mir) => {
-                simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir, self.tcx);
                 type_check::TypeckMir::new(&infcx).run_on_mir(&mut mir, self.tcx);
                 no_landing_pads::NoLandingPads.run_on_mir(&mut mir, self.tcx);
-
+                if self.tcx.sess.opts.mir_opt_level > 0 {
+                    simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir, self.tcx);
+                }
                 let meta_item_list = self.attr
                                          .iter()
                                          .flat_map(|a| a.meta_item_list())