diff --git a/cranelift/src/utils.rs b/cranelift/src/utils.rs index 4d54cf118a..ee879d0843 100644 --- a/cranelift/src/utils.rs +++ b/cranelift/src/utils.rs @@ -61,9 +61,9 @@ pub fn parse_sets_and_isa(flag_set: &[String], flag_isa: &str) -> Result IsaBuilder { fn isa_constructor( shared_flags: shared_settings::Flags, - builder: &shared_settings::Builder, + builder: shared_settings::Builder, ) -> Box { let level1 = if shared_flags.is_compressed() { &enc_tables::LEVEL1_T32[..] diff --git a/lib/codegen/src/isa/arm64/mod.rs b/lib/codegen/src/isa/arm64/mod.rs index 27c95f51b3..0d4f4a5397 100644 --- a/lib/codegen/src/isa/arm64/mod.rs +++ b/lib/codegen/src/isa/arm64/mod.rs @@ -32,7 +32,7 @@ pub fn isa_builder() -> IsaBuilder { fn isa_constructor( shared_flags: shared_settings::Flags, - builder: &shared_settings::Builder, + builder: shared_settings::Builder, ) -> Box { Box::new(Isa { isa_flags: settings::Flags::new(&shared_flags, builder), diff --git a/lib/codegen/src/isa/mod.rs b/lib/codegen/src/isa/mod.rs index ed626a60a2..d94eb37830 100644 --- a/lib/codegen/src/isa/mod.rs +++ b/lib/codegen/src/isa/mod.rs @@ -24,7 +24,7 @@ //! use cretonne_codegen::isa; //! //! let shared_builder = settings::builder(); -//! let shared_flags = settings::Flags::new(&shared_builder); +//! let shared_flags = settings::Flags::new(shared_builder); //! //! match isa::lookup("riscv") { //! Err(_) => { @@ -117,14 +117,14 @@ pub enum LookupError { /// Modify the ISA-specific settings before creating the `TargetIsa` trait object with `finish`. pub struct Builder { setup: settings::Builder, - constructor: fn(settings::Flags, &settings::Builder) -> Box, + constructor: fn(settings::Flags, settings::Builder) -> Box, } impl Builder { /// Combine the ISA-specific settings with the provided ISA-independent settings and allocate a /// fully configured `TargetIsa` trait object. pub fn finish(self, shared_flags: settings::Flags) -> Box { - (self.constructor)(shared_flags, &self.setup) + (self.constructor)(shared_flags, self.setup) } } diff --git a/lib/codegen/src/isa/riscv/mod.rs b/lib/codegen/src/isa/riscv/mod.rs index af993aad0d..bcddc496d0 100644 --- a/lib/codegen/src/isa/riscv/mod.rs +++ b/lib/codegen/src/isa/riscv/mod.rs @@ -33,7 +33,7 @@ pub fn isa_builder() -> IsaBuilder { fn isa_constructor( shared_flags: shared_settings::Flags, - builder: &shared_settings::Builder, + builder: shared_settings::Builder, ) -> Box { let level1 = if shared_flags.is_64bit() { &enc_tables::LEVEL1_RV64[..] @@ -130,7 +130,7 @@ mod tests { fn test_64bitenc() { let mut shared_builder = settings::builder(); shared_builder.enable("is_64bit").unwrap(); - let shared_flags = settings::Flags::new(&shared_builder); + let shared_flags = settings::Flags::new(shared_builder); let isa = isa::lookup("riscv").unwrap().finish(shared_flags); let mut func = Function::new(); @@ -180,7 +180,7 @@ mod tests { fn test_32bitenc() { let mut shared_builder = settings::builder(); shared_builder.set("is_64bit", "false").unwrap(); - let shared_flags = settings::Flags::new(&shared_builder); + let shared_flags = settings::Flags::new(shared_builder); let isa = isa::lookup("riscv").unwrap().finish(shared_flags); let mut func = Function::new(); @@ -234,7 +234,7 @@ mod tests { fn test_rv32m() { let mut shared_builder = settings::builder(); shared_builder.set("is_64bit", "false").unwrap(); - let shared_flags = settings::Flags::new(&shared_builder); + let shared_flags = settings::Flags::new(shared_builder); // Set the supports_m stting which in turn enables the use_m predicate that unlocks // encodings for imul. diff --git a/lib/codegen/src/isa/riscv/settings.rs b/lib/codegen/src/isa/riscv/settings.rs index 4a127b578a..a5bdd6b850 100644 --- a/lib/codegen/src/isa/riscv/settings.rs +++ b/lib/codegen/src/isa/riscv/settings.rs @@ -16,9 +16,9 @@ mod tests { #[test] fn display_default() { - let shared = settings::Flags::new(&settings::builder()); + let shared = settings::Flags::new(settings::builder()); let b = builder(); - let f = Flags::new(&shared, &b); + let f = Flags::new(&shared, b); assert_eq!( f.to_string(), "[riscv]\n\ @@ -35,20 +35,20 @@ mod tests { #[test] fn predicates() { - let shared = settings::Flags::new(&settings::builder()); + let shared = settings::Flags::new(settings::builder()); let mut b = builder(); b.enable("supports_f").unwrap(); b.enable("supports_d").unwrap(); - let f = Flags::new(&shared, &b); + let f = Flags::new(&shared, b); assert_eq!(f.full_float(), true); let mut sb = settings::builder(); sb.set("enable_simd", "false").unwrap(); - let shared = settings::Flags::new(&sb); + let shared = settings::Flags::new(sb); let mut b = builder(); b.enable("supports_f").unwrap(); b.enable("supports_d").unwrap(); - let f = Flags::new(&shared, &b); + let f = Flags::new(&shared, b); assert_eq!(f.full_float(), false); } } diff --git a/lib/codegen/src/isa/x86/mod.rs b/lib/codegen/src/isa/x86/mod.rs index 6bbde318a5..787ec4a992 100644 --- a/lib/codegen/src/isa/x86/mod.rs +++ b/lib/codegen/src/isa/x86/mod.rs @@ -35,7 +35,7 @@ pub fn isa_builder() -> IsaBuilder { fn isa_constructor( shared_flags: shared_settings::Flags, - builder: &shared_settings::Builder, + builder: shared_settings::Builder, ) -> Box { let level1 = if shared_flags.is_64bit() { &enc_tables::LEVEL1_I64[..] diff --git a/lib/codegen/src/isa/x86/settings.rs b/lib/codegen/src/isa/x86/settings.rs index 379f0db493..84d0e96f06 100644 --- a/lib/codegen/src/isa/x86/settings.rs +++ b/lib/codegen/src/isa/x86/settings.rs @@ -15,38 +15,38 @@ mod tests { #[test] fn presets() { - let shared = settings::Flags::new(&settings::builder()); + let shared = settings::Flags::new(settings::builder()); // Nehalem has SSE4.1 but not BMI1. - let mut b1 = builder(); - b1.enable("nehalem").unwrap(); - let f1 = Flags::new(&shared, &b1); - assert_eq!(f1.has_sse41(), true); - assert_eq!(f1.has_bmi1(), false); + let mut b0 = builder(); + b0.enable("nehalem").unwrap(); + let f0 = Flags::new(&shared, b0); + assert_eq!(f0.has_sse41(), true); + assert_eq!(f0.has_bmi1(), false); - let mut b2 = builder(); - b2.enable("haswell").unwrap(); - let f2 = Flags::new(&shared, &b2); - assert_eq!(f2.has_sse41(), true); - assert_eq!(f2.has_bmi1(), true); + let mut b1 = builder(); + b1.enable("haswell").unwrap(); + let f1 = Flags::new(&shared, b1); + assert_eq!(f1.has_sse41(), true); + assert_eq!(f1.has_bmi1(), true); } #[test] fn display_presets() { // Spot check that the flags Display impl does not cause a panic - let shared = settings::Flags::new(&settings::builder()); + let shared = settings::Flags::new(settings::builder()); - let b1 = builder(); - let f1 = Flags::new(&shared, &b1); + let b0 = builder(); + let f0 = Flags::new(&shared, b0); + let _ = format!("{}", f0); + + let mut b1 = builder(); + b1.enable("nehalem").unwrap(); + let f1 = Flags::new(&shared, b1); let _ = format!("{}", f1); let mut b2 = builder(); - b2.enable("nehalem").unwrap(); - let f2 = Flags::new(&shared, &b1); + b2.enable("haswell").unwrap(); + let f2 = Flags::new(&shared, b2); let _ = format!("{}", f2); - - let mut b3 = builder(); - b3.enable("haswell").unwrap(); - let f3 = Flags::new(&shared, &b1); - let _ = format!("{}", f3); } } diff --git a/lib/codegen/src/regalloc/pressure.rs b/lib/codegen/src/regalloc/pressure.rs index 2c86050c59..49eb224e6d 100644 --- a/lib/codegen/src/regalloc/pressure.rs +++ b/lib/codegen/src/regalloc/pressure.rs @@ -281,7 +281,7 @@ mod tests { use settings; let shared_builder = settings::builder(); - let shared_flags = settings::Flags::new(&shared_builder); + let shared_flags = settings::Flags::new(shared_builder); isa::lookup("arm32").ok().map(|b| b.finish(shared_flags)) } diff --git a/lib/codegen/src/regalloc/solver.rs b/lib/codegen/src/regalloc/solver.rs index f3c14c9d81..80c7f862e2 100644 --- a/lib/codegen/src/regalloc/solver.rs +++ b/lib/codegen/src/regalloc/solver.rs @@ -1157,7 +1157,7 @@ mod tests { use settings; let shared_builder = settings::builder(); - let shared_flags = settings::Flags::new(&shared_builder); + let shared_flags = settings::Flags::new(shared_builder); isa::lookup("arm32").ok().map(|b| b.finish(shared_flags)) } diff --git a/lib/codegen/src/settings.rs b/lib/codegen/src/settings.rs index f238cb601a..39416a298f 100644 --- a/lib/codegen/src/settings.rs +++ b/lib/codegen/src/settings.rs @@ -16,7 +16,7 @@ //! let mut b = settings::builder(); //! b.set("opt_level", "fastest"); //! -//! let f = settings::Flags::new(&b); +//! let f = settings::Flags::new(b); //! assert_eq!(f.opt_level(), settings::OptLevel::Fastest); //! ``` @@ -44,6 +44,7 @@ pub trait Configurable { } /// Collect settings values based on a template. +#[derive(Clone)] pub struct Builder { template: &'static detail::Template, bytes: Box<[u8]>, @@ -354,7 +355,7 @@ mod tests { #[test] fn display_default() { let b = builder(); - let f = Flags::new(&b); + let f = Flags::new(b); assert_eq!( f.to_string(), "[shared]\n\ @@ -388,7 +389,7 @@ mod tests { assert_eq!(b.enable("enable_simd"), Ok(())); assert_eq!(b.set("enable_simd", "false"), Ok(())); - let f = Flags::new(&b); + let f = Flags::new(b); assert_eq!(f.enable_simd(), false); } @@ -402,7 +403,7 @@ mod tests { assert_eq!(b.set("opt_level", "best"), Ok(())); assert_eq!(b.set("enable_simd", "0"), Ok(())); - let f = Flags::new(&b); + let f = Flags::new(b); assert_eq!(f.enable_simd(), false); assert_eq!(f.opt_level(), super::OptLevel::Best); } diff --git a/lib/codegen/src/verifier/mod.rs b/lib/codegen/src/verifier/mod.rs index 6408b61977..6db1f871f7 100644 --- a/lib/codegen/src/verifier/mod.rs +++ b/lib/codegen/src/verifier/mod.rs @@ -1175,7 +1175,7 @@ mod tests { #[test] fn empty() { let func = Function::new(); - let flags = &settings::Flags::new(&settings::builder()); + let flags = &settings::Flags::new(settings::builder()); let verifier = Verifier::new(&func, flags.into()); assert_eq!(verifier.run(), Ok(())); } @@ -1198,7 +1198,7 @@ mod tests { }), ebb0, ); - let flags = &settings::Flags::new(&settings::builder()); + let flags = &settings::Flags::new(settings::builder()); let verifier = Verifier::new(&func, flags.into()); assert_err_with_msg!(verifier.run(), "instruction format"); } diff --git a/lib/frontend/src/frontend.rs b/lib/frontend/src/frontend.rs index 1f2c818f99..b2e6385722 100644 --- a/lib/frontend/src/frontend.rs +++ b/lib/frontend/src/frontend.rs @@ -688,7 +688,7 @@ mod tests { builder.finalize(); } - let flags = settings::Flags::new(&settings::builder()); + let flags = settings::Flags::new(settings::builder()); let res = verify_function(&func, &flags); // println!("{}", func.display(None)); match res { diff --git a/lib/frontend/src/lib.rs b/lib/frontend/src/lib.rs index 65d76fd279..3e43d04a84 100644 --- a/lib/frontend/src/lib.rs +++ b/lib/frontend/src/lib.rs @@ -117,7 +117,7 @@ //! builder.finalize(); //! } //! -//! let flags = settings::Flags::new(&settings::builder()); +//! let flags = settings::Flags::new(settings::builder()); //! let res = verify_function(&func, &flags); //! println!("{}", func.display(None)); //! match res { diff --git a/lib/frontend/src/ssa.rs b/lib/frontend/src/ssa.rs index 9c07730de9..422cb05931 100644 --- a/lib/frontend/src/ssa.rs +++ b/lib/frontend/src/ssa.rs @@ -1021,7 +1021,7 @@ mod tests { let mut cur = FuncCursor::new(&mut func).at_bottom(ebb1); cur.ins().return_(&[]) }; - let flags = settings::Flags::new(&settings::builder()); + let flags = settings::Flags::new(settings::builder()); match verify_function(&func, &flags) { Ok(()) => {} Err(err) => { @@ -1200,7 +1200,7 @@ mod tests { ssa.declare_ebb_predecessor(ebb1, block2, j); } ssa.seal_ebb_header_block(ebb1, &mut func); - let flags = settings::Flags::new(&settings::builder()); + let flags = settings::Flags::new(settings::builder()); match verify_function(&func, &flags) { Ok(()) => {} Err(err) => { @@ -1251,7 +1251,7 @@ mod tests { } ssa.seal_ebb_header_block(ebb1, &mut func); ssa.seal_ebb_header_block(ebb2, &mut func); - let flags = settings::Flags::new(&settings::builder()); + let flags = settings::Flags::new(settings::builder()); match verify_function(&func, &flags) { Ok(()) => {} Err(err) => { diff --git a/lib/reader/src/parser.rs b/lib/reader/src/parser.rs index 8ee584075c..67e6939910 100644 --- a/lib/reader/src/parser.rs +++ b/lib/reader/src/parser.rs @@ -725,14 +725,16 @@ impl<'a> Parser<'a> { isaspec::parse_options(words, &mut isa_builder, &self.loc)?; // Construct a trait object with the aggregate settings. - isas.push(isa_builder.finish(settings::Flags::new(&flag_builder))); + isas.push(isa_builder.finish( + settings::Flags::new(flag_builder.clone()), + )); } _ => break, } } if !seen_isa { // No `isa` commands, but we allow for `set` commands. - Ok(isaspec::IsaSpec::None(settings::Flags::new(&flag_builder))) + Ok(isaspec::IsaSpec::None(settings::Flags::new(flag_builder))) } else if let Some(loc) = last_set_loc { err!( loc, diff --git a/lib/simplejit/src/backend.rs b/lib/simplejit/src/backend.rs index a73140a1aa..c7785e04a7 100644 --- a/lib/simplejit/src/backend.rs +++ b/lib/simplejit/src/backend.rs @@ -22,7 +22,7 @@ impl SimpleJITBuilder { let (flag_builder, isa_builder) = cretonne_native::builders().unwrap_or_else(|_| { panic!("host machine is not a supported target"); }); - let isa = isa_builder.finish(settings::Flags::new(&flag_builder)); + let isa = isa_builder.finish(settings::Flags::new(flag_builder)); Self::with_isa(isa) } diff --git a/lib/wasm/src/environ/dummy.rs b/lib/wasm/src/environ/dummy.rs index 2b1fbfbfc7..68927101cf 100644 --- a/lib/wasm/src/environ/dummy.rs +++ b/lib/wasm/src/environ/dummy.rs @@ -101,7 +101,7 @@ pub struct DummyEnvironment { impl DummyEnvironment { /// Allocates the data structures with default flags. pub fn default() -> Self { - Self::with_flags(settings::Flags::new(&settings::builder())) + Self::with_flags(settings::Flags::new(settings::builder())) } /// Allocates the data structures with the given flags. diff --git a/lib/wasm/tests/wasm_testsuite.rs b/lib/wasm/tests/wasm_testsuite.rs index 15feea4b55..1871b4d781 100644 --- a/lib/wasm/tests/wasm_testsuite.rs +++ b/lib/wasm/tests/wasm_testsuite.rs @@ -32,7 +32,7 @@ fn testsuite() { }) .collect(); paths.sort_by_key(|dir| dir.path()); - let flags = Flags::new(&settings::builder()); + let flags = Flags::new(settings::builder()); for path in paths { let path = path.path(); handle_module(&path, &flags); @@ -43,7 +43,7 @@ fn testsuite() { fn return_at_end() { let mut flag_builder = settings::builder(); flag_builder.enable("return_at_end").unwrap(); - let flags = Flags::new(&flag_builder); + let flags = Flags::new(flag_builder); handle_module(&PathBuf::from("../../wasmtests/return_at_end.wat"), &flags); }