diff --git a/lib/cretonne/meta/gen_instr.py b/lib/cretonne/meta/gen_instr.py index 073891807f..f5d5d07b74 100644 --- a/lib/cretonne/meta/gen_instr.py +++ b/lib/cretonne/meta/gen_instr.py @@ -67,7 +67,7 @@ def gen_arguments_method(fmt, is_mut): with fmt.indented( 'pub fn {f}<\'a>(&\'a {m}self, pool: &\'a {m}ValueListPool) -> ' - '[&{m}[Value]; 2] {{' + '&{m}[Value] {{' .format(f=method, m=mut), '}'): with fmt.indented('match *self {', '}'): for f in InstructionFormat.all_formats: @@ -79,9 +79,8 @@ def gen_arguments_method(fmt, is_mut): if f.has_value_list: arg = ''.format(mut) fmt.line( - '{} {{ ref {}args, .. }} => ' - '[ &{}[], args.{}(pool) ],' - .format(n, mut, mut, as_slice)) + '{} {{ ref {}args, .. }} => args.{}(pool),' + .format(n, mut, as_slice)) continue # Fixed args. @@ -103,8 +102,8 @@ def gen_arguments_method(fmt, is_mut): capture = 'ref {}args, '.format(mut) arg = 'args' fmt.line( - '{} {{ {} .. }} => [{}, &{}[]],' - .format(n, capture, arg, mut)) + '{} {{ {} .. }} => {},' + .format(n, capture, arg)) def gen_instruction_data_impl(fmt): diff --git a/lib/cretonne/src/ir/instructions.rs b/lib/cretonne/src/ir/instructions.rs index a3cd4509da..4cabfe6698 100644 --- a/lib/cretonne/src/ir/instructions.rs +++ b/lib/cretonne/src/ir/instructions.rs @@ -336,30 +336,6 @@ impl Display for TernaryOverflowData { /// Avoid large matches on instruction formats by using the methods defined here to examine /// instructions. impl InstructionData { - /// Execute a closure once for each argument to this instruction. - /// See also the `arguments()` method. - pub fn each_arg(&self, pool: &ValueListPool, mut func: F) - where F: FnMut(Value) - { - for part in &self.arguments(pool) { - for &arg in part.iter() { - func(arg); - } - } - } - - /// Execute a closure with a mutable reference to each argument to this instruction. - /// See also the `arguments_mut()` method. - pub fn each_arg_mut(&mut self, pool: &mut ValueListPool, mut func: F) - where F: FnMut(&mut Value) - { - for part in &mut self.arguments_mut(pool) { - for arg in part.iter_mut() { - func(arg); - } - } - } - /// Return information about the destination of a branch or jump instruction. /// /// Any instruction that can transfer control to another EBB reveals its possible destinations diff --git a/lib/cretonne/src/regalloc/coloring.rs b/lib/cretonne/src/regalloc/coloring.rs index 6549c4356f..24f8c0c7e1 100644 --- a/lib/cretonne/src/regalloc/coloring.rs +++ b/lib/cretonne/src/regalloc/coloring.rs @@ -299,7 +299,7 @@ impl<'a> Context<'a> { } ConstraintKind::Tied(arg_index) => { // This def must use the same register as a fixed instruction argument. - let arg = dfg[inst].arguments(&dfg.value_lists)[0][arg_index as usize]; + let arg = dfg[inst].arguments(&dfg.value_lists)[arg_index as usize]; let loc = locations[arg]; *locations.ensure(lv.value) = loc; // Mark the reused register. It's not really clear if we support tied diff --git a/lib/cretonne/src/regalloc/liveness.rs b/lib/cretonne/src/regalloc/liveness.rs index 49db4a04cd..582cbae48a 100644 --- a/lib/cretonne/src/regalloc/liveness.rs +++ b/lib/cretonne/src/regalloc/liveness.rs @@ -318,7 +318,7 @@ impl Liveness { let mut operand_constraints = recipe_constraints.get(recipe).map(|c| c.ins).unwrap_or(&[]).iter(); - func.dfg[inst].each_arg(&func.dfg.value_lists, |arg| { + for &arg in func.dfg[inst].arguments(&func.dfg.value_lists) { // Get the live range, create it as a dead range if necessary. let lr = get_or_create(&mut self.ranges, arg, func, recipe_constraints); @@ -333,7 +333,7 @@ impl Liveness { if let Some(constraint) = operand_constraints.next() { lr.affinity.merge(constraint, ®_info); } - }); + } } } } diff --git a/lib/cretonne/src/write.rs b/lib/cretonne/src/write.rs index 59c97d9283..8f120f447a 100644 --- a/lib/cretonne/src/write.rs +++ b/lib/cretonne/src/write.rs @@ -157,7 +157,7 @@ fn type_suffix(func: &Function, inst: Inst) -> Option { // Write out any value aliases appearing in `inst`. fn write_value_aliases(w: &mut Write, func: &Function, inst: Inst, indent: usize) -> Result { - for &arg in func.dfg[inst].arguments(&func.dfg.value_lists).iter().flat_map(|x| x.iter()) { + for &arg in func.dfg[inst].arguments(&func.dfg.value_lists) { let resolved = func.dfg.resolve_aliases(arg); if resolved != arg { writeln!(w, "{1:0$}{2} -> {3}", indent, "", arg, resolved)?;