From ed6630dc02b80a3c038dadfa15f0d6a38701eebf Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 20 Sep 2017 16:37:55 -0700 Subject: [PATCH] Move `verify` calls back into Context, using FlagsOrIsa. With FlagsOrIsa, we can pass around the information we need to run the verifier from the Context even when a TargetIsa is not available. --- cranelift/src/filetest/licm.rs | 3 +-- cranelift/src/filetest/simple_gvn.rs | 3 +-- cranelift/src/wasm.rs | 12 +++++------- lib/cretonne/src/context.rs | 17 ++++++++++------- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/cranelift/src/filetest/licm.rs b/cranelift/src/filetest/licm.rs index 3f3bc6cecc..32be450476 100644 --- a/cranelift/src/filetest/licm.rs +++ b/cranelift/src/filetest/licm.rs @@ -40,8 +40,7 @@ impl SubTest for TestLICM { comp_ctx.flowgraph(); comp_ctx.compute_loop_analysis(); - comp_ctx.licm(); - comp_ctx.verify(context.flags_or_isa()).map_err(|e| { + comp_ctx.licm(context.flags_or_isa()).map_err(|e| { pretty_error(&comp_ctx.func, context.isa, Into::into(e)) })?; diff --git a/cranelift/src/filetest/simple_gvn.rs b/cranelift/src/filetest/simple_gvn.rs index 12a5554f74..a1da0e42a4 100644 --- a/cranelift/src/filetest/simple_gvn.rs +++ b/cranelift/src/filetest/simple_gvn.rs @@ -39,8 +39,7 @@ impl SubTest for TestSimpleGVN { comp_ctx.func = func.into_owned(); comp_ctx.flowgraph(); - comp_ctx.simple_gvn(); - comp_ctx.verify(context.flags_or_isa()).map_err(|e| { + comp_ctx.simple_gvn(context.flags_or_isa()).map_err(|e| { pretty_error(&comp_ctx.func, context.isa, Into::into(e)) })?; diff --git a/cranelift/src/wasm.rs b/cranelift/src/wasm.rs index 7e9040c2c9..e665822e60 100644 --- a/cranelift/src/wasm.rs +++ b/cranelift/src/wasm.rs @@ -20,7 +20,7 @@ use std::path::Path; use std::process::Command; use tempdir::TempDir; use term; -use utils::pretty_verifier_error; +use utils::{pretty_verifier_error, pretty_error}; macro_rules! vprintln { ($x: expr, $($tts:tt)*) => { @@ -182,13 +182,11 @@ fn handle_module( })?; context.flowgraph(); context.compute_loop_analysis(); - context.licm(); - context.verify(*fisa).map_err(|err| { - pretty_verifier_error(&context.func, fisa.isa, err) + context.licm(*fisa).map_err(|err| { + pretty_error(&context.func, fisa.isa, err) })?; - context.simple_gvn(); - context.verify(*fisa).map_err(|err| { - pretty_verifier_error(&context.func, fisa.isa, err) + context.simple_gvn(*fisa).map_err(|err| { + pretty_error(&context.func, fisa.isa, err) })?; } terminal.fg(term::color::GREEN).unwrap(); diff --git a/lib/cretonne/src/context.rs b/lib/cretonne/src/context.rs index 30f67a811f..cd402873e8 100644 --- a/lib/cretonne/src/context.rs +++ b/lib/cretonne/src/context.rs @@ -92,9 +92,10 @@ impl Context { } /// Run the verifier only if the `enable_verifier` setting is true. - pub fn verify_if(&self, isa: &TargetIsa) -> CtonResult { - if isa.flags().enable_verifier() { - self.verify(isa).map_err(Into::into) + pub fn verify_if<'a, FOI: Into>>(&self, fisa: FOI) -> CtonResult { + let fisa = fisa.into(); + if fisa.flags.enable_verifier() { + self.verify(fisa).map_err(Into::into) } else { Ok(()) } @@ -136,18 +137,20 @@ impl Context { } /// Perform simple GVN on the function. - pub fn simple_gvn(&mut self) { - do_simple_gvn(&mut self.func, &mut self.cfg, &mut self.domtree) + pub fn simple_gvn<'a, FOI: Into>>(&mut self, fisa: FOI) -> CtonResult { + do_simple_gvn(&mut self.func, &mut self.cfg, &mut self.domtree); + self.verify_if(fisa) } /// Perform LICM on the function. - pub fn licm(&mut self) { + pub fn licm<'a, FOI: Into>>(&mut self, fisa: FOI) -> CtonResult { do_licm( &mut self.func, &mut self.cfg, &mut self.domtree, &mut self.loop_analysis, - ) + ); + self.verify_if(fisa) } /// Run the register allocator.