[meta] Make Builders build() instead of finish();

This commit is contained in:
Benjamin Bouvier
2019-05-28 15:01:14 +02:00
parent d9277f249b
commit 70f79d23bf
19 changed files with 156 additions and 159 deletions

View File

@@ -135,7 +135,7 @@ impl InstructionFormatBuilder {
self
}
pub fn finish(self) -> InstructionFormat {
pub fn build(self) -> InstructionFormat {
let typevar_operand = if self.typevar_operand.is_some() {
self.typevar_operand
} else if self.has_value_list || self.num_value_operands > 0 {
@@ -213,7 +213,7 @@ impl FormatRegistry {
);
}
let format = inst_format.finish();
let format = inst_format.build();
// Compute key.
let imm_keys = format

View File

@@ -34,10 +34,10 @@ impl<'format_reg> InstructionGroupBuilder<'format_reg> {
}
pub fn push(&mut self, builder: InstructionBuilder) {
self.instructions.push(builder.finish(self.format_registry));
self.instructions.push(builder.build(self.format_registry));
}
pub fn finish(self) -> InstructionGroup {
pub fn build(self) -> InstructionGroup {
InstructionGroup {
_name: self._name,
_doc: self._doc,
@@ -300,7 +300,7 @@ impl InstructionBuilder {
self
}
fn finish(self, format_registry: &FormatRegistry) -> Instruction {
fn build(self, format_registry: &FormatRegistry) -> Instruction {
let operands_in = self.operands_in.unwrap_or_else(Vec::new);
let operands_out = self.operands_out.unwrap_or_else(Vec::new);

View File

@@ -95,7 +95,7 @@ impl OperandBuilder {
self.doc = Some(doc.into());
self
}
pub fn finish(self) -> Operand {
pub fn build(self) -> Operand {
let doc = match self.doc {
Some(doc) => Some(doc),
None => match &self.kind.fields {
@@ -215,7 +215,7 @@ impl OperandKindBuilder {
self
}
pub fn finish(self) -> OperandKind {
pub fn build(self) -> OperandKind {
let default_member = match self.default_member {
Some(default_member) => Some(default_member),
None => match &self.fields {
@@ -261,7 +261,7 @@ impl OperandKindBuilder {
impl Into<OperandKind> for &TypeVar {
fn into(self) -> OperandKind {
OperandKindBuilder::new("value", OperandKindFields::TypeVar(self.into())).finish()
OperandKindBuilder::new("value", OperandKindFields::TypeVar(self.into())).build()
}
}
impl Into<OperandKind> for &OperandKind {
@@ -272,7 +272,7 @@ impl Into<OperandKind> for &OperandKind {
/// Helper to create an operand in definitions files.
pub fn create_operand(name: &'static str, kind: impl Into<OperandKind>) -> Operand {
OperandBuilder::new(name, kind.into()).finish()
OperandBuilder::new(name, kind.into()).build()
}
/// Helper to create an operand with a documentation in definitions files.
@@ -281,5 +281,5 @@ pub fn create_operand_doc(
kind: impl Into<OperandKind>,
doc: &'static str,
) -> Operand {
OperandBuilder::new(name, kind.into()).doc(doc).finish()
OperandBuilder::new(name, kind.into()).doc(doc).build()
}

View File

@@ -273,7 +273,7 @@ impl IsaRegsBuilder {
/// 2. There are no identical classes under different names.
/// 3. Classes are sorted topologically such that all subclasses have a
/// higher index that the superclass.
pub fn finish(self) -> IsaRegs {
pub fn build(self) -> IsaRegs {
for reg_bank in self.banks.values() {
for i1 in reg_bank.classes.iter() {
for i2 in reg_bank.classes.iter() {

View File

@@ -315,7 +315,7 @@ impl SettingGroupBuilder {
/// 2. in the list above.
///
/// Assign `byte_offset` and `bit_offset` fields in all settings.
pub fn finish(self) -> SettingGroup {
pub fn build(self) -> SettingGroup {
let mut group = SettingGroup {
name: self.name,
settings: Vec::new(),

View File

@@ -59,10 +59,10 @@ impl TypeVar {
let (scalar_type, num_lanes) = match value_type {
ValueType::BV(bitvec_type) => {
let bits = bitvec_type.lane_bits() as RangeBound;
return TypeVar::new(name, doc, builder.bitvecs(bits..bits).finish());
return TypeVar::new(name, doc, builder.bitvecs(bits..bits).build());
}
ValueType::Special(special_type) => {
return TypeVar::new(name, doc, builder.specials(vec![special_type]).finish());
return TypeVar::new(name, doc, builder.specials(vec![special_type]).build());
}
ValueType::Lane(lane_type) => (lane_type, 1),
ValueType::Vector(vec_type) => {
@@ -86,7 +86,7 @@ impl TypeVar {
builder.bools(bits..bits)
}
};
TypeVar::new(name, doc, builder.finish())
TypeVar::new(name, doc, builder.build())
}
/// Get a fresh copy of self, named after `name`. Can only be called on non-derived typevars.
@@ -814,7 +814,7 @@ impl TypeSetBuilder {
self
}
pub fn finish(self) -> TypeSet {
pub fn build(self) -> TypeSet {
let min_lanes = if self.includes_scalars { 1 } else { 2 };
;
let bools = range_to_set(self.bools.to_range(1..MAX_BITS, None))
@@ -841,7 +841,7 @@ impl TypeSetBuilder {
.bitvecs(Interval::All)
.specials(ValueType::all_special_types().collect())
.includes_scalars(true)
.finish()
.build()
}
}
@@ -911,7 +911,7 @@ fn range_to_set(range: Option<Range>) -> NumSet {
#[test]
fn test_typevar_builder() {
let type_set = TypeSetBuilder::new().ints(Interval::All).finish();
let type_set = TypeSetBuilder::new().ints(Interval::All).build();
assert_eq!(type_set.lanes, num_set![1]);
assert!(type_set.floats.is_empty());
assert_eq!(type_set.ints, num_set![8, 16, 32, 64]);
@@ -919,7 +919,7 @@ fn test_typevar_builder() {
assert!(type_set.bitvecs.is_empty());
assert!(type_set.specials.is_empty());
let type_set = TypeSetBuilder::new().bools(Interval::All).finish();
let type_set = TypeSetBuilder::new().bools(Interval::All).build();
assert_eq!(type_set.lanes, num_set![1]);
assert!(type_set.floats.is_empty());
assert!(type_set.ints.is_empty());
@@ -927,7 +927,7 @@ fn test_typevar_builder() {
assert!(type_set.bitvecs.is_empty());
assert!(type_set.specials.is_empty());
let type_set = TypeSetBuilder::new().floats(Interval::All).finish();
let type_set = TypeSetBuilder::new().floats(Interval::All).build();
assert_eq!(type_set.lanes, num_set![1]);
assert_eq!(type_set.floats, num_set![32, 64]);
assert!(type_set.ints.is_empty());
@@ -939,7 +939,7 @@ fn test_typevar_builder() {
.floats(Interval::All)
.simd_lanes(Interval::All)
.includes_scalars(false)
.finish();
.build();
assert_eq!(type_set.lanes, num_set![2, 4, 8, 16, 32, 64, 128, 256]);
assert_eq!(type_set.floats, num_set![32, 64]);
assert!(type_set.ints.is_empty());
@@ -951,7 +951,7 @@ fn test_typevar_builder() {
.floats(Interval::All)
.simd_lanes(Interval::All)
.includes_scalars(true)
.finish();
.build();
assert_eq!(type_set.lanes, num_set![1, 2, 4, 8, 16, 32, 64, 128, 256]);
assert_eq!(type_set.floats, num_set![32, 64]);
assert!(type_set.ints.is_empty());
@@ -959,7 +959,7 @@ fn test_typevar_builder() {
assert!(type_set.bitvecs.is_empty());
assert!(type_set.specials.is_empty());
let type_set = TypeSetBuilder::new().ints(16..64).finish();
let type_set = TypeSetBuilder::new().ints(16..64).build();
assert_eq!(type_set.lanes, num_set![1]);
assert_eq!(type_set.ints, num_set![16, 32, 64]);
assert!(type_set.floats.is_empty());
@@ -971,13 +971,13 @@ fn test_typevar_builder() {
#[test]
#[should_panic]
fn test_typevar_builder_too_high_bound_panic() {
TypeSetBuilder::new().ints(16..2 * MAX_BITS).finish();
TypeSetBuilder::new().ints(16..2 * MAX_BITS).build();
}
#[test]
#[should_panic]
fn test_typevar_builder_inverted_bounds_panic() {
TypeSetBuilder::new().ints(32..16).finish();
TypeSetBuilder::new().ints(32..16).build();
}
#[test]
@@ -986,14 +986,14 @@ fn test_as_bool() {
.simd_lanes(2..8)
.ints(8..8)
.floats(32..32)
.finish();
.build();
assert_eq!(
a.lane_of(),
TypeSetBuilder::new().ints(8..8).floats(32..32).finish()
TypeSetBuilder::new().ints(8..8).floats(32..32).build()
);
// Test as_bool with disjoint intervals.
let mut a_as_bool = TypeSetBuilder::new().simd_lanes(2..8).finish();
let mut a_as_bool = TypeSetBuilder::new().simd_lanes(2..8).build();
a_as_bool.bools = num_set![8, 32];
assert_eq!(a.as_bool(), a_as_bool);
@@ -1001,93 +1001,93 @@ fn test_as_bool() {
.simd_lanes(1..8)
.ints(8..8)
.floats(32..32)
.finish();
let mut b_as_bool = TypeSetBuilder::new().simd_lanes(1..8).finish();
.build();
let mut b_as_bool = TypeSetBuilder::new().simd_lanes(1..8).build();
b_as_bool.bools = num_set![1, 8, 32];
assert_eq!(b.as_bool(), b_as_bool);
}
#[test]
fn test_forward_images() {
let empty_set = TypeSetBuilder::new().finish();
let empty_set = TypeSetBuilder::new().build();
// Half vector.
assert_eq!(
TypeSetBuilder::new()
.simd_lanes(1..32)
.finish()
.build()
.half_vector(),
TypeSetBuilder::new().simd_lanes(1..16).finish()
TypeSetBuilder::new().simd_lanes(1..16).build()
);
// Double vector.
assert_eq!(
TypeSetBuilder::new()
.simd_lanes(1..32)
.finish()
.build()
.double_vector(),
TypeSetBuilder::new().simd_lanes(2..64).finish()
TypeSetBuilder::new().simd_lanes(2..64).build()
);
assert_eq!(
TypeSetBuilder::new()
.simd_lanes(128..256)
.finish()
.build()
.double_vector(),
TypeSetBuilder::new().simd_lanes(256..256).finish()
TypeSetBuilder::new().simd_lanes(256..256).build()
);
// Half width.
assert_eq!(
TypeSetBuilder::new().ints(8..32).finish().half_width(),
TypeSetBuilder::new().ints(8..16).finish()
TypeSetBuilder::new().ints(8..32).build().half_width(),
TypeSetBuilder::new().ints(8..16).build()
);
assert_eq!(
TypeSetBuilder::new().floats(32..32).finish().half_width(),
TypeSetBuilder::new().floats(32..32).build().half_width(),
empty_set
);
assert_eq!(
TypeSetBuilder::new().floats(32..64).finish().half_width(),
TypeSetBuilder::new().floats(32..32).finish()
TypeSetBuilder::new().floats(32..64).build().half_width(),
TypeSetBuilder::new().floats(32..32).build()
);
assert_eq!(
TypeSetBuilder::new().bools(1..8).finish().half_width(),
TypeSetBuilder::new().bools(1..8).build().half_width(),
empty_set
);
assert_eq!(
TypeSetBuilder::new().bools(1..32).finish().half_width(),
TypeSetBuilder::new().bools(8..16).finish()
TypeSetBuilder::new().bools(1..32).build().half_width(),
TypeSetBuilder::new().bools(8..16).build()
);
// Double width.
assert_eq!(
TypeSetBuilder::new().ints(8..32).finish().double_width(),
TypeSetBuilder::new().ints(16..64).finish()
TypeSetBuilder::new().ints(8..32).build().double_width(),
TypeSetBuilder::new().ints(16..64).build()
);
assert_eq!(
TypeSetBuilder::new().ints(32..64).finish().double_width(),
TypeSetBuilder::new().ints(64..64).finish()
TypeSetBuilder::new().ints(32..64).build().double_width(),
TypeSetBuilder::new().ints(64..64).build()
);
assert_eq!(
TypeSetBuilder::new().floats(32..32).finish().double_width(),
TypeSetBuilder::new().floats(64..64).finish()
TypeSetBuilder::new().floats(32..32).build().double_width(),
TypeSetBuilder::new().floats(64..64).build()
);
assert_eq!(
TypeSetBuilder::new().floats(32..64).finish().double_width(),
TypeSetBuilder::new().floats(64..64).finish()
TypeSetBuilder::new().floats(32..64).build().double_width(),
TypeSetBuilder::new().floats(64..64).build()
);
assert_eq!(
TypeSetBuilder::new().bools(1..16).finish().double_width(),
TypeSetBuilder::new().bools(16..32).finish()
TypeSetBuilder::new().bools(1..16).build().double_width(),
TypeSetBuilder::new().bools(16..32).build()
);
assert_eq!(
TypeSetBuilder::new().bools(32..64).finish().double_width(),
TypeSetBuilder::new().bools(64..64).finish()
TypeSetBuilder::new().bools(32..64).build().double_width(),
TypeSetBuilder::new().bools(64..64).build()
);
}
#[test]
fn test_backward_images() {
let empty_set = TypeSetBuilder::new().finish();
let empty_set = TypeSetBuilder::new().build();
// LaneOf.
assert_eq!(
@@ -1095,13 +1095,13 @@ fn test_backward_images() {
.simd_lanes(1..1)
.ints(8..8)
.floats(32..32)
.finish()
.build()
.preimage(DerivedFunc::LaneOf),
TypeSetBuilder::new()
.simd_lanes(Interval::All)
.ints(8..8)
.floats(32..32)
.finish()
.build()
);
assert_eq!(empty_set.preimage(DerivedFunc::LaneOf), empty_set);
@@ -1110,14 +1110,14 @@ fn test_backward_images() {
TypeSetBuilder::new()
.simd_lanes(1..4)
.bools(1..64)
.finish()
.build()
.preimage(DerivedFunc::AsBool),
TypeSetBuilder::new()
.simd_lanes(1..4)
.ints(Interval::All)
.bools(Interval::All)
.floats(Interval::All)
.finish()
.build()
);
// Double vector.
@@ -1125,7 +1125,7 @@ fn test_backward_images() {
TypeSetBuilder::new()
.simd_lanes(1..1)
.ints(8..8)
.finish()
.build()
.preimage(DerivedFunc::DoubleVector)
.size(),
0
@@ -1135,13 +1135,13 @@ fn test_backward_images() {
.simd_lanes(1..16)
.ints(8..16)
.floats(32..32)
.finish()
.build()
.preimage(DerivedFunc::DoubleVector),
TypeSetBuilder::new()
.simd_lanes(1..8)
.ints(8..16)
.floats(32..32)
.finish(),
.build(),
);
// Half vector.
@@ -1149,7 +1149,7 @@ fn test_backward_images() {
TypeSetBuilder::new()
.simd_lanes(256..256)
.ints(8..8)
.finish()
.build()
.preimage(DerivedFunc::HalfVector)
.size(),
0
@@ -1158,12 +1158,12 @@ fn test_backward_images() {
TypeSetBuilder::new()
.simd_lanes(64..128)
.bools(1..32)
.finish()
.build()
.preimage(DerivedFunc::HalfVector),
TypeSetBuilder::new()
.simd_lanes(128..256)
.bools(1..32)
.finish(),
.build(),
);
// Half width.
@@ -1172,7 +1172,7 @@ fn test_backward_images() {
.ints(64..64)
.floats(64..64)
.bools(64..64)
.finish()
.build()
.preimage(DerivedFunc::HalfWidth)
.size(),
0
@@ -1181,12 +1181,12 @@ fn test_backward_images() {
TypeSetBuilder::new()
.simd_lanes(64..256)
.bools(1..64)
.finish()
.build()
.preimage(DerivedFunc::HalfWidth),
TypeSetBuilder::new()
.simd_lanes(64..256)
.bools(16..64)
.finish(),
.build(),
);
// Double width.
@@ -1195,7 +1195,7 @@ fn test_backward_images() {
.ints(8..8)
.floats(32..32)
.bools(1..8)
.finish()
.build()
.preimage(DerivedFunc::DoubleWidth)
.size(),
0
@@ -1205,13 +1205,13 @@ fn test_backward_images() {
.simd_lanes(1..16)
.ints(8..16)
.floats(32..64)
.finish()
.build()
.preimage(DerivedFunc::DoubleWidth),
TypeSetBuilder::new()
.simd_lanes(1..16)
.ints(8..8)
.floats(32..32)
.finish()
.build()
);
}
@@ -1221,7 +1221,7 @@ fn test_typeset_singleton_panic_nonsingleton_types() {
TypeSetBuilder::new()
.ints(8..8)
.floats(32..32)
.finish()
.build()
.get_singleton();
}
@@ -1231,7 +1231,7 @@ fn test_typeset_singleton_panic_nonsingleton_lanes() {
TypeSetBuilder::new()
.simd_lanes(1..2)
.floats(32..32)
.finish()
.build()
.get_singleton();
}
@@ -1239,25 +1239,22 @@ fn test_typeset_singleton_panic_nonsingleton_lanes() {
fn test_typeset_singleton() {
use crate::shared::types as shared_types;
assert_eq!(
TypeSetBuilder::new().ints(16..16).finish().get_singleton(),
TypeSetBuilder::new().ints(16..16).build().get_singleton(),
ValueType::Lane(shared_types::Int::I16.into())
);
assert_eq!(
TypeSetBuilder::new()
.floats(64..64)
.finish()
.get_singleton(),
TypeSetBuilder::new().floats(64..64).build().get_singleton(),
ValueType::Lane(shared_types::Float::F64.into())
);
assert_eq!(
TypeSetBuilder::new().bools(1..1).finish().get_singleton(),
TypeSetBuilder::new().bools(1..1).build().get_singleton(),
ValueType::Lane(shared_types::Bool::B1.into())
);
assert_eq!(
TypeSetBuilder::new()
.simd_lanes(4..4)
.ints(32..32)
.finish()
.build()
.get_singleton(),
LaneType::from(shared_types::Int::I32).by(4)
);
@@ -1268,7 +1265,7 @@ fn test_typevar_functions() {
let x = TypeVar::new(
"x",
"i16 and up",
TypeSetBuilder::new().ints(16..64).finish(),
TypeSetBuilder::new().ints(16..64).build(),
);
assert_eq!(x.half_width().name, "half_width(x)");
assert_eq!(
@@ -1276,7 +1273,7 @@ fn test_typevar_functions() {
"double_width(half_width(x))"
);
let x = TypeVar::new("x", "up to i32", TypeSetBuilder::new().ints(8..32).finish());
let x = TypeVar::new("x", "up to i32", TypeSetBuilder::new().ints(8..32).build());
assert_eq!(x.double_width().name, "double_width(x)");
}

View File

@@ -348,7 +348,7 @@ impl TransformGroupBuilder {
self.transforms.push(transform);
}
pub fn finish_and_add_to(self, owner: &mut TransformGroups) -> TransformGroupIndex {
pub fn build_and_add_to(self, owner: &mut TransformGroups) -> TransformGroupIndex {
let next_id = owner.next_key();
owner.add(TransformGroup {
name: self.name,
@@ -410,7 +410,7 @@ fn test_double_custom_legalization() {
format.insert(InstructionFormatBuilder::new("nullary"));
let mut inst_group = InstructionGroupBuilder::new("test", "", &format);
inst_group.push(InstructionBuilder::new("dummy", "doc"));
let inst_group = inst_group.finish();
let inst_group = inst_group.build();
let dummy_inst = inst_group.by_name("dummy");
let mut transform_group = TransformGroupBuilder::new("test", "doc");

View File

@@ -8,7 +8,7 @@ use crate::shared::Definitions as SharedDefinitions;
fn define_settings(_shared: &SettingGroup) -> SettingGroup {
let setting = SettingGroupBuilder::new("arm32");
setting.finish()
setting.build()
}
fn define_regs() -> IsaRegs {
@@ -45,7 +45,7 @@ fn define_regs() -> IsaRegs {
let builder = RegClassBuilder::new_toplevel("FLAG", flag_reg);
regs.add_class(builder);
regs.finish()
regs.build()
}
pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
@@ -57,7 +57,7 @@ pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
"arm32 specific instruction set",
&shared_defs.format_registry,
)
.finish();
.build();
// CPU modes for 32-bit ARM and Thumb2.
let mut a32 = CpuMode::new("A32");

View File

@@ -8,7 +8,7 @@ use crate::shared::Definitions as SharedDefinitions;
fn define_settings(_shared: &SettingGroup) -> SettingGroup {
let setting = SettingGroupBuilder::new("arm64");
setting.finish()
setting.build()
}
fn define_registers() -> IsaRegs {
@@ -41,7 +41,7 @@ fn define_registers() -> IsaRegs {
let builder = RegClassBuilder::new_toplevel("FLAG", flag_reg);
regs.add_class(builder);
regs.finish()
regs.build()
}
pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
@@ -53,7 +53,7 @@ pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
"arm64 specific instruction set",
&shared_defs.format_registry,
)
.finish();
.build();
let mut a64 = CpuMode::new("A64");

View File

@@ -57,7 +57,7 @@ fn define_settings(shared: &SettingGroup) -> SettingGroup {
predicate!(shared_enable_simd && supports_f && supports_d),
);
setting.finish()
setting.build()
}
fn define_registers() -> IsaRegs {
@@ -79,7 +79,7 @@ fn define_registers() -> IsaRegs {
let builder = RegClassBuilder::new_toplevel("FPR", float_regs);
regs.add_class(builder);
regs.finish()
regs.build()
}
pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
@@ -91,7 +91,7 @@ pub fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
"riscv specific instruction set",
&shared_defs.format_registry,
)
.finish();
.build();
// CPU modes for 32-bit and 64-bit operation.
let mut rv_32 = CpuMode::new("RV32");

View File

@@ -18,7 +18,7 @@ pub fn define(format_registry: &FormatRegistry) -> InstructionGroup {
let iWord = &TypeVar::new(
"iWord",
"A scalar integer machine word",
TypeSetBuilder::new().ints(32..64).finish(),
TypeSetBuilder::new().ints(32..64).build(),
);
let nlo = &operand_doc("nlo", iWord, "Low part of numerator");
let nhi = &operand_doc("nhi", iWord, "High part of numerator");
@@ -103,7 +103,7 @@ pub fn define(format_registry: &FormatRegistry) -> InstructionGroup {
TypeSetBuilder::new()
.floats(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let IntTo = &TypeVar::new(
"IntTo",
@@ -111,7 +111,7 @@ pub fn define(format_registry: &FormatRegistry) -> InstructionGroup {
TypeSetBuilder::new()
.ints(32..64)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Float);
let a = &operand("a", IntTo);
@@ -242,5 +242,5 @@ pub fn define(format_registry: &FormatRegistry) -> InstructionGroup {
.operands_out(vec![y, rflags]),
);
ig.finish()
ig.build()
}

View File

@@ -289,5 +289,5 @@ pub fn define(shared: &mut SharedDefinitions, x86_instructions: &InstructionGrou
],
);
group.finish_and_add_to(&mut shared.transform_groups);
group.build_and_add_to(&mut shared.transform_groups);
}

View File

@@ -38,5 +38,5 @@ pub fn define() -> IsaRegs {
let builder = RegClassBuilder::subclass_of("FPR8", fpr, 0, 8);
regs.add_class(builder);
regs.finish()
regs.build()
}

View File

@@ -83,5 +83,5 @@ pub fn define(shared: &SettingGroup) -> SettingGroup {
),
);
settings.finish()
settings.build()
}

View File

@@ -12,39 +12,39 @@ pub fn define() -> Vec<OperandKind> {
// This is primarliy used in control flow instructions.
let ebb = create("ebb", "An extended basic block in the same function.")
.default_member("destination")
.finish();
.build();
kinds.push(ebb);
// A reference to a stack slot declared in the function preamble.
let stack_slot = create("stack_slot", "A stack slot").finish();
let stack_slot = create("stack_slot", "A stack slot").build();
kinds.push(stack_slot);
// A reference to a global value.
let global_value = create("global_value", "A global value.").finish();
let global_value = create("global_value", "A global value.").build();
kinds.push(global_value);
// A reference to a function signature declared in the function preamble.
// This is used to provide the call signature in a call_indirect instruction.
let sig_ref = create("sig_ref", "A function signature.").finish();
let sig_ref = create("sig_ref", "A function signature.").build();
kinds.push(sig_ref);
// A reference to an external function declared in the function preamble.
// This is used to provide the callee and signature in a call instruction.
let func_ref = create("func_ref", "An external function.").finish();
let func_ref = create("func_ref", "An external function.").build();
kinds.push(func_ref);
// A reference to a jump table declared in the function preamble.
let jump_table = create("jump_table", "A jump table.")
.default_member("table")
.finish();
.build();
kinds.push(jump_table);
// A reference to a heap declared in the function preamble.
let heap = create("heap", "A heap.").finish();
let heap = create("heap", "A heap.").build();
kinds.push(heap);
// A reference to a table declared in the function preamble.
let table = create("table", "A table.").finish();
let table = create("table", "A table.").build();
kinds.push(table);
// A variable-sized list of value operands. Use for Ebb and function call arguments.
@@ -58,7 +58,7 @@ pub fn define() -> Vec<OperandKind> {
returned from an instruction.
"#,
)
.finish();
.build();
kinds.push(varargs);
return kinds;

View File

@@ -11,7 +11,7 @@ pub fn define() -> Vec<OperandKind> {
// IntType type.
let imm64 = Builder::new_imm("imm64")
.doc("A 64-bit immediate integer.")
.finish();
.build();
kinds.push(imm64);
// An unsigned 8-bit immediate integer operand.
@@ -20,13 +20,13 @@ pub fn define() -> Vec<OperandKind> {
// immediate bit counts on shift instructions.
let uimm8 = Builder::new_imm("uimm8")
.doc("An 8-bit immediate unsigned integer.")
.finish();
.build();
kinds.push(uimm8);
// An unsigned 32-bit immediate integer operand.
let uimm32 = Builder::new_imm("uimm32")
.doc("A 32-bit immediate unsigned integer.")
.finish();
.build();
kinds.push(uimm32);
// A 32-bit immediate signed offset.
@@ -36,7 +36,7 @@ pub fn define() -> Vec<OperandKind> {
let offset32 = Builder::new_imm("offset32")
.doc("A 32-bit immediate signed offset.")
.default_member("offset")
.finish();
.build();
kinds.push(offset32);
// A 32-bit immediate floating point operand.
@@ -44,7 +44,7 @@ pub fn define() -> Vec<OperandKind> {
// IEEE 754-2008 binary32 interchange format.
let ieee32 = Builder::new_imm("ieee32")
.doc("A 32-bit immediate floating point number.")
.finish();
.build();
kinds.push(ieee32);
// A 64-bit immediate floating point operand.
@@ -52,7 +52,7 @@ pub fn define() -> Vec<OperandKind> {
// IEEE 754-2008 binary64 interchange format.
let ieee64 = Builder::new_imm("ieee64")
.doc("A 64-bit immediate floating point number.")
.finish();
.build();
kinds.push(ieee64);
// An immediate boolean operand.
@@ -62,7 +62,7 @@ pub fn define() -> Vec<OperandKind> {
let boolean = Builder::new_imm("boolean")
.doc("An immediate boolean.")
.rust_type("bool")
.finish();
.build();
kinds.push(boolean);
// A condition code for comparing integer values.
@@ -83,7 +83,7 @@ pub fn define() -> Vec<OperandKind> {
.doc("An integer comparison condition code.")
.default_member("cond")
.rust_type("ir::condcodes::IntCC")
.finish();
.build();
kinds.push(intcc);
// A condition code for comparing floating point values. This enumerated operand kind is used
@@ -107,7 +107,7 @@ pub fn define() -> Vec<OperandKind> {
.doc("A floating point comparison condition code")
.default_member("cond")
.rust_type("ir::condcodes::FloatCC")
.finish();
.build();
kinds.push(floatcc);
// Flags for memory operations like :clif:inst:`load` and :clif:inst:`store`.
@@ -115,14 +115,14 @@ pub fn define() -> Vec<OperandKind> {
.doc("Memory operation flags")
.default_member("flags")
.rust_type("ir::MemFlags")
.finish();
.build();
kinds.push(memflags);
// A register unit in the current target ISA.
let regunit = Builder::new_imm("regunit")
.doc("A register unit in the target ISA")
.rust_type("isa::RegUnit")
.finish();
.build();
kinds.push(regunit);
// A trap code indicating the reason for trapping.
@@ -138,7 +138,7 @@ pub fn define() -> Vec<OperandKind> {
.doc("A trap reason code.")
.default_member("code")
.rust_type("ir::TrapCode")
.finish();
.build();
kinds.push(trapcode);
return kinds;

View File

@@ -56,7 +56,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let Bool = &TypeVar::new(
@@ -65,19 +65,19 @@ pub fn define(
TypeSetBuilder::new()
.bools(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let iB = &TypeVar::new(
"iB",
"A scalar integer type",
TypeSetBuilder::new().ints(Interval::All).finish(),
TypeSetBuilder::new().ints(Interval::All).build(),
);
let iAddr = &TypeVar::new(
"iAddr",
"An integer address type",
TypeSetBuilder::new().ints(32..64).finish(),
TypeSetBuilder::new().ints(32..64).build(),
);
let Testable = &TypeVar::new(
@@ -86,7 +86,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.bools(Interval::All)
.finish(),
.build(),
);
let TxN = &TypeVar::new(
@@ -98,7 +98,7 @@ pub fn define(
.bools(Interval::All)
.simd_lanes(Interval::All)
.includes_scalars(false)
.finish(),
.build(),
);
let Any = &TypeVar::new(
@@ -110,7 +110,7 @@ pub fn define(
.bools(Interval::All)
.simd_lanes(Interval::All)
.includes_scalars(true)
.finish(),
.build(),
);
let Mem = &TypeVar::new(
@@ -120,7 +120,7 @@ pub fn define(
.ints(Interval::All)
.floats(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let MemTo = &TypeVar::new(
@@ -130,7 +130,7 @@ pub fn define(
.ints(Interval::All)
.floats(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let addr = &operand("addr", iAddr);
@@ -261,7 +261,7 @@ pub fn define(
let Entry = &TypeVar::new(
"Entry",
"A scalar integer type",
TypeSetBuilder::new().ints(Interval::All).finish(),
TypeSetBuilder::new().ints(Interval::All).build(),
);
let entry = &operand_doc("entry", Entry, "entry of jump table");
@@ -589,7 +589,7 @@ pub fn define(
let iExt8 = &TypeVar::new(
"iExt8",
"An integer type with more than 8 bits",
TypeSetBuilder::new().ints(16..64).finish(),
TypeSetBuilder::new().ints(16..64).build(),
);
let x = &operand("x", iExt8);
let a = &operand("a", iExt8);
@@ -679,7 +679,7 @@ pub fn define(
let iExt16 = &TypeVar::new(
"iExt16",
"An integer type with more than 16 bits",
TypeSetBuilder::new().ints(32..64).finish(),
TypeSetBuilder::new().ints(32..64).build(),
);
let x = &operand("x", iExt16);
let a = &operand("a", iExt16);
@@ -769,7 +769,7 @@ pub fn define(
let iExt32 = &TypeVar::new(
"iExt32",
"An integer type with more than 32 bits",
TypeSetBuilder::new().ints(64..64).finish(),
TypeSetBuilder::new().ints(64..64).build(),
);
let x = &operand("x", iExt32);
let a = &operand("a", iExt32);
@@ -939,7 +939,7 @@ pub fn define(
let HeapOffset = &TypeVar::new(
"HeapOffset",
"An unsigned heap offset",
TypeSetBuilder::new().ints(32..64).finish(),
TypeSetBuilder::new().ints(32..64).build(),
);
let H = &operand("H", heap);
@@ -968,7 +968,7 @@ pub fn define(
let TableOffset = &TypeVar::new(
"TableOffset",
"An unsigned table offset",
TypeSetBuilder::new().ints(32..64).finish(),
TypeSetBuilder::new().ints(32..64).build(),
);
let T = &operand("T", table);
let p = &operand("p", TableOffset);
@@ -1337,7 +1337,7 @@ pub fn define(
.bools(Interval::All)
.simd_lanes(1..128)
.includes_scalars(true)
.finish(),
.build(),
);
let x = &operand_doc("x", Any128, "Low-numbered lanes");
@@ -1903,7 +1903,7 @@ pub fn define(
.bools(Interval::All)
.simd_lanes(Interval::All)
.includes_scalars(true)
.finish(),
.build(),
);
let x = &operand("x", bits);
let y = &operand("y", bits);
@@ -2272,7 +2272,7 @@ pub fn define(
TypeSetBuilder::new()
.floats(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let Cond = &operand("Cond", floatcc);
let x = &operand("x", Float);
@@ -2628,7 +2628,7 @@ pub fn define(
TypeSetBuilder::new()
.bools(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let BoolTo = &TypeVar::new(
@@ -2637,7 +2637,7 @@ pub fn define(
TypeSetBuilder::new()
.bools(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Bool);
@@ -2665,7 +2665,7 @@ pub fn define(
TypeSetBuilder::new()
.bools(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Bool);
let a = &operand("a", BoolTo);
@@ -2692,7 +2692,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Bool);
let a = &operand("a", IntTo);
@@ -2731,7 +2731,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let IntTo = &TypeVar::new(
@@ -2740,7 +2740,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Int);
let a = &operand("a", IntTo);
@@ -2771,7 +2771,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Int);
let a = &operand("a", IntTo);
@@ -2822,7 +2822,7 @@ pub fn define(
TypeSetBuilder::new()
.floats(Interval::All)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", Float);
let a = &operand("a", FloatTo);
@@ -2976,7 +2976,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(16..64)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let x = &operand("x", WideInt);
let lo = &operand_doc("lo", &WideInt.half_width(), "The low bits of `x`");
@@ -3006,7 +3006,7 @@ pub fn define(
TypeSetBuilder::new()
.ints(8..32)
.simd_lanes(Interval::All)
.finish(),
.build(),
);
let lo = &operand("lo", NarrowInt);
@@ -3033,5 +3033,5 @@ pub fn define(
.is_ghost(true),
);
ig.finish()
ig.build()
}

View File

@@ -766,8 +766,8 @@ pub fn define(insts: &InstructionGroup, immediates: &OperandKinds) -> TransformG
let mut groups = TransformGroups::new();
narrow.finish_and_add_to(&mut groups);
let expand_id = expand.finish_and_add_to(&mut groups);
narrow.build_and_add_to(&mut groups);
let expand_id = expand.build_and_add_to(&mut groups);
// Expansions using CPU flags.
let mut expand_flags = TransformGroupBuilder::new(
@@ -802,12 +802,12 @@ pub fn define(insts: &InstructionGroup, immediates: &OperandKinds) -> TransformG
],
);
expand_flags.finish_and_add_to(&mut groups);
expand_flags.build_and_add_to(&mut groups);
// XXX The order of declarations unfortunately matters to be compatible with the Python code.
// When it's all migrated, we can put this next to the narrow/expand finish_and_add_to calls
// When it's all migrated, we can put this next to the narrow/expand build_and_add_to calls
// above.
widen.finish_and_add_to(&mut groups);
widen.build_and_add_to(&mut groups);
groups
}

View File

@@ -160,5 +160,5 @@ pub fn define() -> SettingGroup {
true,
);
settings.finish()
settings.build()
}