Skip to content

Commit 60b6947

Browse files
committed
Revert the ISA builder to consumer self on "finish", but allow more components to clone themselves
1 parent fe20812 commit 60b6947

8 files changed

Lines changed: 16 additions & 16 deletions

File tree

cranelift/codegen/meta/src/gen_settings.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub(crate) enum ParentGroup {
2121
fn gen_constructor(group: &SettingGroup, parent: ParentGroup, fmt: &mut Formatter) {
2222
let args = match parent {
2323
ParentGroup::None => "builder: Builder",
24-
ParentGroup::Shared => "shared: &settings::Flags, builder: &Builder",
24+
ParentGroup::Shared => "shared: &settings::Flags, builder: Builder",
2525
};
2626
fmtln!(fmt, "impl Flags {");
2727
fmt.indent(|fmt| {

cranelift/codegen/src/isa/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,20 +152,20 @@ pub type Builder = IsaBuilder<CodegenResult<OwnedTargetIsa>>;
152152
/// Builder for a `TargetIsa`.
153153
/// Modify the ISA-specific settings before creating the `TargetIsa` trait object with `finish`.
154154
#[derive(Clone)]
155-
pub struct IsaBuilder<T> {
155+
pub struct IsaBuilder<T: Clone> {
156156
triple: Triple,
157157
setup: settings::Builder,
158-
constructor: fn(Triple, settings::Flags, &settings::Builder) -> T,
158+
constructor: fn(Triple, settings::Flags, settings::Builder) -> T,
159159
}
160160

161-
impl<T> IsaBuilder<T> {
161+
impl<T> IsaBuilder<T> where T: Clone {
162162
/// Creates a new ISA-builder from its components, namely the `triple` for
163163
/// the ISA, the ISA-specific settings builder, and a final constructor
164164
/// function to generate the ISA from its components.
165165
pub fn new(
166166
triple: Triple,
167167
setup: settings::Builder,
168-
constructor: fn(Triple, settings::Flags, &settings::Builder) -> T,
168+
constructor: fn(Triple, settings::Flags, settings::Builder) -> T,
169169
) -> Self {
170170
IsaBuilder {
171171
triple,
@@ -190,12 +190,12 @@ impl<T> IsaBuilder<T> {
190190
/// flags are inconsistent or incompatible: for example, some
191191
/// platform-independent features, like general SIMD support, may
192192
/// need certain ISA extensions to be enabled.
193-
pub fn finish(&self, shared_flags: settings::Flags) -> T {
194-
(self.constructor)(self.triple.clone(), shared_flags, &self.setup)
193+
pub fn finish(self, shared_flags: settings::Flags) -> T {
194+
(self.constructor)(self.triple.clone(), shared_flags, self.setup)
195195
}
196196
}
197197

198-
impl<T> settings::Configurable for IsaBuilder<T> {
198+
impl<T> settings::Configurable for IsaBuilder<T> where T: Clone {
199199
fn set(&mut self, name: &str, value: &str) -> SetResult<()> {
200200
self.setup.set(name, value)
201201
}

cranelift/codegen/src/isa/riscv64/inst/emit_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2095,7 +2095,7 @@ fn make_test_flags() -> (settings::Flags, super::super::riscv_settings::Flags) {
20952095
let b = settings::builder();
20962096
let flags = settings::Flags::new(b.clone());
20972097
let b2 = super::super::riscv_settings::builder();
2098-
let isa_flags = super::super::riscv_settings::Flags::new(&flags, &b2);
2098+
let isa_flags = super::super::riscv_settings::Flags::new(&flags, b2);
20992099
(flags, isa_flags)
21002100
}
21012101

cranelift/codegen/src/isa/s390x/inst/emit_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13362,7 +13362,7 @@ fn test_s390x_binemit() {
1336213362
use crate::settings::Configurable;
1336313363
let mut isa_flag_builder = s390x_settings::builder();
1336413364
isa_flag_builder.enable("arch13").unwrap();
13365-
let isa_flags = s390x_settings::Flags::new(&flags, &isa_flag_builder);
13365+
let isa_flags = s390x_settings::Flags::new(&flags, isa_flag_builder);
1336613366

1336713367
let emit_info = EmitInfo::new(isa_flags);
1336813368
for (insn, expected_encoding, expected_printing) in insns {

cranelift/codegen/src/isa/unwind/systemv.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type Register = u16;
1414

1515
/// Enumerate the errors possible in mapping Cranelift registers to their DWARF equivalent.
1616
#[allow(missing_docs)]
17-
#[derive(Debug, PartialEq, Eq)]
17+
#[derive(Debug, PartialEq, Eq, Clone)]
1818
pub enum RegisterMappingError {
1919
MissingBank,
2020
UnsupportedArchitecture,

cranelift/codegen/src/isa/x64/inst/emit_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5155,7 +5155,7 @@ fn test_x64_emit() {
51555155
isa_flag_builder.enable("has_avx512f").unwrap();
51565156
isa_flag_builder.enable("has_avx512vbmi").unwrap();
51575157
isa_flag_builder.enable("has_avx512vl").unwrap();
5158-
let isa_flags = x64::settings::Flags::new(&flags, &isa_flag_builder);
5158+
let isa_flags = x64::settings::Flags::new(&flags, isa_flag_builder);
51595159

51605160
let emit_info = EmitInfo::new(flags, isa_flags);
51615161
for (insn, expected_encoding, expected_printing) in insns {

cranelift/codegen/src/result.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::string::String;
88
/// A compilation error.
99
///
1010
/// When Cranelift fails to compile a function, it will return one of these error codes.
11-
#[derive(Debug)]
11+
#[derive(Debug, Clone)]
1212
pub enum CodegenError {
1313
/// A list of IR verifier errors.
1414
///

crates/cranelift-shared/src/isa_builder.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use wasmtime_environ::{Setting, SettingKind};
99
///
1010
/// Most methods are mirrored from the `wasmtime_environ::CompilerBuilder` trait, so look there for more
1111
/// information.
12-
pub struct IsaBuilder<T> {
12+
pub struct IsaBuilder<T: Clone> {
1313
/// The shared flags that all targets share.
1414
shared_flags: settings::Builder,
1515
/// The internal ISA builder for the current target.
@@ -18,7 +18,7 @@ pub struct IsaBuilder<T> {
1818
pub lookup: fn(Triple) -> Result<Builder<T>>,
1919
}
2020

21-
impl<T> IsaBuilder<T> {
21+
impl<T> IsaBuilder<T> where T: Clone {
2222
/// Create a new ISA builder with the given lookup function.
2323
pub fn new(lookup: fn(Triple) -> Result<Builder<T>>) -> Self {
2424
let mut flags = settings::builder();
@@ -93,7 +93,7 @@ impl<T> IsaBuilder<T> {
9393
}
9494

9595
pub fn build(&self) -> T {
96-
self.inner
96+
self.inner.clone()
9797
.finish(settings::Flags::new(self.shared_flags.clone()))
9898
}
9999

0 commit comments

Comments
 (0)