diff --git a/src/libcretonne/Cargo.toml b/src/libcretonne/Cargo.toml index e6158af94f..cfd886391c 100644 --- a/src/libcretonne/Cargo.toml +++ b/src/libcretonne/Cargo.toml @@ -12,4 +12,7 @@ build = "build.rs" name = "cretonne" path = "lib.rs" +[dev-dependencies] +cretonne-reader = { path = "../libreader" } + [dependencies] diff --git a/src/libcretonne/cfg.rs b/src/libcretonne/cfg.rs index 696c364af2..d30262e4cd 100644 --- a/src/libcretonne/cfg.rs +++ b/src/libcretonne/cfg.rs @@ -256,125 +256,4 @@ mod tests { assert_eq!(ebb1_successors.contains(&ebb1), true); assert_eq!(ebb1_successors.contains(&ebb2), true); } - - #[test] - fn postorder_traversal() { - let mut func = Function::new(); - let ebb0 = func.dfg.make_ebb(); - let ebb1 = func.dfg.make_ebb(); - let ebb2 = func.dfg.make_ebb(); - let ebb3 = func.dfg.make_ebb(); - let ebb4 = func.dfg.make_ebb(); - let ebb5 = func.dfg.make_ebb(); - - func.layout.append_ebb(ebb0); - func.layout.append_ebb(ebb1); - func.layout.append_ebb(ebb2); - func.layout.append_ebb(ebb3); - func.layout.append_ebb(ebb4); - func.layout.append_ebb(ebb5); - - let br_ebb0_ebb1 = make_inst::branch(&mut func, ebb1); - func.layout.append_inst(br_ebb0_ebb1, ebb0); - - let jmp_ebb0_ebb2 = make_inst::jump(&mut func, ebb2); - func.layout.append_inst(jmp_ebb0_ebb2, ebb0); - - let br_ebb2_ebb2 = make_inst::branch(&mut func, ebb2); - func.layout.append_inst(br_ebb2_ebb2, ebb2); - - let br_ebb2_ebb1 = make_inst::branch(&mut func, ebb1); - func.layout.append_inst(br_ebb2_ebb1, ebb2); - - let jmp_ebb1_ebb3 = make_inst::jump(&mut func, ebb3); - func.layout.append_inst(jmp_ebb1_ebb3, ebb1); - - let br_ebb2_ebb4 = make_inst::branch(&mut func, ebb4); - func.layout.append_inst(br_ebb2_ebb4, ebb2); - - let jmp_ebb2_ebb5 = make_inst::jump(&mut func, ebb5); - func.layout.append_inst(jmp_ebb2_ebb5, ebb2); - - let cfg = ControlFlowGraph::new(&func); - let mut postorder = vec![ebb3, ebb1, ebb4, ebb5, ebb2, ebb0]; - postorder.reverse(); - for (ebb, key) in cfg.reverse_postorder_ebbs() { - assert_eq!(ebb, postorder[key]); - } - } - - #[test] - fn loops_one() { - let mut func = Function::new(); - let ebb0 = func.dfg.make_ebb(); - let ebb1 = func.dfg.make_ebb(); - let ebb2 = func.dfg.make_ebb(); - let ebb3 = func.dfg.make_ebb(); - func.layout.append_ebb(ebb0); - func.layout.append_ebb(ebb1); - func.layout.append_ebb(ebb2); - func.layout.append_ebb(ebb3); - - let jmp_ebb0_ebb1 = make_inst::jump(&mut func, ebb1); - let br_ebb1_ebb3 = make_inst::branch(&mut func, ebb3); - let jmp_ebb1_ebb2 = make_inst::jump(&mut func, ebb2); - let jmp_ebb2_ebb3 = make_inst::jump(&mut func, ebb3); - - func.layout.append_inst(jmp_ebb0_ebb1, ebb0); - func.layout.append_inst(br_ebb1_ebb3, ebb1); - func.layout.append_inst(jmp_ebb1_ebb2, ebb1); - func.layout.append_inst(jmp_ebb2_ebb3, ebb2); - - let cfg = ControlFlowGraph::new(&func); - let mut postorder = vec![ebb3, ebb2, ebb1, ebb0]; - postorder.reverse(); - for (ebb, key) in cfg.reverse_postorder_ebbs() { - assert_eq!(ebb, postorder[key]); - } - } - - #[test] - fn loops_two() { - let mut func = Function::new(); - let ebb0 = func.dfg.make_ebb(); - let ebb1 = func.dfg.make_ebb(); - let ebb2 = func.dfg.make_ebb(); - let ebb3 = func.dfg.make_ebb(); - let ebb4 = func.dfg.make_ebb(); - let ebb5 = func.dfg.make_ebb(); - - func.layout.append_ebb(ebb0); - func.layout.append_ebb(ebb1); - func.layout.append_ebb(ebb2); - func.layout.append_ebb(ebb3); - func.layout.append_ebb(ebb4); - func.layout.append_ebb(ebb5); - - let jmp_ebb0_ebb1 = make_inst::jump(&mut func, ebb1); - let jmp_ebb0_ebb2 = make_inst::jump(&mut func, ebb2); - let jmp_ebb1_ebb3 = make_inst::jump(&mut func, ebb3); - let br_ebb2_ebb4 = make_inst::jump(&mut func, ebb4); - let jmp_ebb2_ebb5 = make_inst::jump(&mut func, ebb5); - let jmp_ebb3_ebb4 = make_inst::jump(&mut func, ebb4); - let br_ebb4_ebb3 = make_inst::branch(&mut func, ebb3); - let jmp_ebb4_ebb5 = make_inst::jump(&mut func, ebb5); - let jmp_ebb5_ebb4 = make_inst::jump(&mut func, ebb4); - - func.layout.append_inst(jmp_ebb0_ebb1, ebb0); - func.layout.append_inst(jmp_ebb0_ebb2, ebb0); - func.layout.append_inst(jmp_ebb1_ebb3, ebb1); - func.layout.append_inst(br_ebb2_ebb4, ebb2); - func.layout.append_inst(jmp_ebb2_ebb5, ebb2); - func.layout.append_inst(jmp_ebb3_ebb4, ebb3); - func.layout.append_inst(br_ebb4_ebb3, ebb4); - func.layout.append_inst(jmp_ebb4_ebb5, ebb4); - func.layout.append_inst(jmp_ebb5_ebb4, ebb5); - - let cfg = ControlFlowGraph::new(&func); - let mut postorder = vec![ebb1, ebb3, ebb4, ebb5, ebb2, ebb0]; - postorder.reverse(); - for (ebb, key) in cfg.reverse_postorder_ebbs() { - assert_eq!(ebb, postorder[key]); - } - } }