From 218959ff654446cc3c84e0867ae33912fe91f3bd Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Thu, 21 Sep 2017 13:29:45 -0700 Subject: [PATCH] Convert more tests to FuncCursor. --- lib/cretonne/src/ir/builder.rs | 41 +++++++++++++++++----------------- lib/cretonne/src/ir/dfg.rs | 38 +++++++++++++++---------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/lib/cretonne/src/ir/builder.rs b/lib/cretonne/src/ir/builder.rs index fa0b5c69c8..4a662d9d14 100644 --- a/lib/cretonne/src/ir/builder.rs +++ b/lib/cretonne/src/ir/builder.rs @@ -214,53 +214,52 @@ impl<'f> InstBuilderBase<'f> for ReplaceBuilder<'f> { #[cfg(test)] mod tests { - use ir::{Function, Cursor, CursorBase, InstBuilder, ValueDef}; + use cursor::{Cursor, FuncCursor}; + use ir::{Function, InstBuilder, ValueDef}; use ir::types::*; use ir::condcodes::*; #[test] fn types() { let mut func = Function::new(); - let dfg = &mut func.dfg; - let ebb0 = dfg.make_ebb(); - let arg0 = dfg.append_ebb_arg(ebb0, I32); - let pos = &mut Cursor::new(&mut func.layout); + let ebb0 = func.dfg.make_ebb(); + let arg0 = func.dfg.append_ebb_arg(ebb0, I32); + let mut pos = FuncCursor::new(&mut func); pos.insert_ebb(ebb0); // Explicit types. - let v0 = dfg.ins(pos).iconst(I32, 3); - assert_eq!(dfg.value_type(v0), I32); + let v0 = pos.ins().iconst(I32, 3); + assert_eq!(pos.func.dfg.value_type(v0), I32); // Inferred from inputs. - let v1 = dfg.ins(pos).iadd(arg0, v0); - assert_eq!(dfg.value_type(v1), I32); + let v1 = pos.ins().iadd(arg0, v0); + assert_eq!(pos.func.dfg.value_type(v1), I32); // Formula. - let cmp = dfg.ins(pos).icmp(IntCC::Equal, arg0, v0); - assert_eq!(dfg.value_type(cmp), B1); + let cmp = pos.ins().icmp(IntCC::Equal, arg0, v0); + assert_eq!(pos.func.dfg.value_type(cmp), B1); } #[test] fn reuse_results() { let mut func = Function::new(); - let dfg = &mut func.dfg; - let ebb0 = dfg.make_ebb(); - let arg0 = dfg.append_ebb_arg(ebb0, I32); - let pos = &mut Cursor::new(&mut func.layout); + let ebb0 = func.dfg.make_ebb(); + let arg0 = func.dfg.append_ebb_arg(ebb0, I32); + let mut pos = FuncCursor::new(&mut func); pos.insert_ebb(ebb0); - let v0 = dfg.ins(pos).iadd_imm(arg0, 17); - assert_eq!(dfg.value_type(v0), I32); + let v0 = pos.ins().iadd_imm(arg0, 17); + assert_eq!(pos.func.dfg.value_type(v0), I32); let iadd = pos.prev_inst().unwrap(); - assert_eq!(dfg.value_def(v0), ValueDef::Res(iadd, 0)); + assert_eq!(pos.func.dfg.value_def(v0), ValueDef::Res(iadd, 0)); // Detach v0 and reuse it for a different instruction. - dfg.clear_results(iadd); - let v0b = dfg.ins(pos).with_result(v0).iconst(I32, 3); + pos.func.dfg.clear_results(iadd); + let v0b = pos.ins().with_result(v0).iconst(I32, 3); assert_eq!(v0, v0b); assert_eq!(pos.current_inst(), Some(iadd)); let iconst = pos.prev_inst().unwrap(); assert!(iadd != iconst); - assert_eq!(dfg.value_def(v0), ValueDef::Res(iconst, 0)); + assert_eq!(pos.func.dfg.value_def(v0), ValueDef::Res(iconst, 0)); } } diff --git a/lib/cretonne/src/ir/dfg.rs b/lib/cretonne/src/ir/dfg.rs index 47c53100cf..25859535bc 100644 --- a/lib/cretonne/src/ir/dfg.rs +++ b/lib/cretonne/src/ir/dfg.rs @@ -897,8 +897,9 @@ impl<'a> fmt::Display for DisplayInst<'a> { #[cfg(test)] mod tests { use super::*; + use cursor::{Cursor, FuncCursor}; use ir::types; - use ir::{Function, Cursor, CursorBase, Opcode, InstructionData, TrapCode}; + use ir::{Function, Opcode, InstructionData, TrapCode}; #[test] fn make_inst() { @@ -1056,41 +1057,40 @@ mod tests { use ir::condcodes::IntCC; let mut func = Function::new(); - let dfg = &mut func.dfg; - let ebb0 = dfg.make_ebb(); - let pos = &mut Cursor::new(&mut func.layout); + let ebb0 = func.dfg.make_ebb(); + let mut pos = FuncCursor::new(&mut func); pos.insert_ebb(ebb0); // Build a little test program. - let v1 = dfg.ins(pos).iconst(types::I32, 42); + let v1 = pos.ins().iconst(types::I32, 42); // Make sure we can resolve value aliases even when values is empty. - assert_eq!(dfg.resolve_aliases(v1), v1); + assert_eq!(pos.func.dfg.resolve_aliases(v1), v1); - let arg0 = dfg.append_ebb_arg(ebb0, types::I32); - let (s, c) = dfg.ins(pos).iadd_cout(v1, arg0); - let iadd = match dfg.value_def(s) { + let arg0 = pos.func.dfg.append_ebb_arg(ebb0, types::I32); + let (s, c) = pos.ins().iadd_cout(v1, arg0); + let iadd = match pos.func.dfg.value_def(s) { ValueDef::Res(i, 0) => i, _ => panic!(), }; // Remove `c` from the result list. - dfg.clear_results(iadd); - dfg.attach_result(iadd, s); + pos.func.dfg.clear_results(iadd); + pos.func.dfg.attach_result(iadd, s); // Replace `iadd_cout` with a normal `iadd` and an `icmp`. - dfg.replace(iadd).iadd(v1, arg0); - let c2 = dfg.ins(pos).icmp(IntCC::UnsignedLessThan, s, v1); - dfg.change_to_alias(c, c2); + pos.func.dfg.replace(iadd).iadd(v1, arg0); + let c2 = pos.ins().icmp(IntCC::UnsignedLessThan, s, v1); + pos.func.dfg.change_to_alias(c, c2); - assert_eq!(dfg.resolve_aliases(c2), c2); - assert_eq!(dfg.resolve_aliases(c), c2); + assert_eq!(pos.func.dfg.resolve_aliases(c2), c2); + assert_eq!(pos.func.dfg.resolve_aliases(c), c2); // Make a copy of the alias. - let c3 = dfg.ins(pos).copy(c); + let c3 = pos.ins().copy(c); // This does not see through copies. - assert_eq!(dfg.resolve_aliases(c3), c3); + assert_eq!(pos.func.dfg.resolve_aliases(c3), c3); // But this goes through both copies and aliases. - assert_eq!(dfg.resolve_copies(c3), c2); + assert_eq!(pos.func.dfg.resolve_copies(c3), c2); } }