diff --git a/src/libcretonne/tests/cfg.rs b/src/libcretonne/tests/cfg_traversal.rs similarity index 71% rename from src/libcretonne/tests/cfg.rs rename to src/libcretonne/tests/cfg_traversal.rs index 3024b8a8fb..056b72dc15 100644 --- a/src/libcretonne/tests/cfg.rs +++ b/src/libcretonne/tests/cfg_traversal.rs @@ -11,11 +11,10 @@ fn test_reverse_postorder_traversal(function_source: &str, ebb_order: Vec) let ebbs = ebb_order.iter().map(|n| Ebb::with_number(*n).unwrap()) .collect::>(); - let reverse_order_ebbs = cfg.reverse_postorder_ebbs(); + let reverse_postorder_ebbs = cfg.reverse_postorder_ebbs(); - assert_eq!(reverse_order_ebbs.len(), ebbs.len()); - - for (ebb, key) in reverse_order_ebbs { + assert_eq!(reverse_postorder_ebbs.len(), ebbs.len()); + for (ebb, key) in reverse_postorder_ebbs { assert_eq!(ebb, ebbs[ebbs.len() - key]); } } @@ -88,3 +87,32 @@ fn loops_two() { } ", vec![0, 2, 1, 3, 4, 5]); } + +#[test] +fn loops_three() { + test_reverse_postorder_traversal(" + function test(i32) { + ebb0(v0: i32): + brz v0, ebb1 + jump ebb2 + ebb1: + jump ebb3 + ebb2: + brz v0, ebb4 + jump ebb5 + ebb3: + jump ebb4 + ebb4: + brz v0, ebb3 + jump ebb6 + brz v0, ebb5 + ebb5: + brz v0, ebb4 + trap + ebb6: + jump ebb7 + ebb7: + return + } + ", vec![0, 2, 1, 3, 4, 5, 6, 7]); +} diff --git a/src/libcretonne/tests/lib.rs b/src/libcretonne/tests/lib.rs index 26cb1041ac..70d0709a9c 100644 --- a/src/libcretonne/tests/lib.rs +++ b/src/libcretonne/tests/lib.rs @@ -1 +1 @@ -pub mod cfg; +pub mod cfg_traversal;