MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / backwards_layout

Function backwards_layout

cranelift/codegen/src/dominator_tree.rs:710–776  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

708
709 #[test]
710 fn backwards_layout() {
711 let mut func = Function::new();
712 let block0 = func.dfg.make_block();
713 let block1 = func.dfg.make_block();
714 let block2 = func.dfg.make_block();
715
716 let mut cur = FuncCursor::new(&mut func);
717
718 cur.insert_block(block0);
719 let jmp02 = cur.ins().jump(block2, &[]);
720
721 cur.insert_block(block1);
722 let trap = cur.ins().trap(TrapCode::unwrap_user(5));
723
724 cur.insert_block(block2);
725 let jmp21 = cur.ins().jump(block1, &[]);
726
727 let cfg = ControlFlowGraph::with_function(cur.func);
728 let dt = DominatorTree::with_function(cur.func, &cfg);
729
730 assert_eq!(cur.func.layout.entry_block(), Some(block0));
731 assert_eq!(dt.idom(block0), None);
732 assert_eq!(dt.idom(block1), Some(block2));
733 assert_eq!(dt.idom(block2), Some(block0));
734
735 assert!(dt.dominates(block0, block0, &cur.func.layout));
736 assert!(dt.dominates(block0, jmp02, &cur.func.layout));
737 assert!(dt.dominates(block0, block1, &cur.func.layout));
738 assert!(dt.dominates(block0, trap, &cur.func.layout));
739 assert!(dt.dominates(block0, block2, &cur.func.layout));
740 assert!(dt.dominates(block0, jmp21, &cur.func.layout));
741
742 assert!(!dt.dominates(jmp02, block0, &cur.func.layout));
743 assert!(dt.dominates(jmp02, jmp02, &cur.func.layout));
744 assert!(dt.dominates(jmp02, block1, &cur.func.layout));
745 assert!(dt.dominates(jmp02, trap, &cur.func.layout));
746 assert!(dt.dominates(jmp02, block2, &cur.func.layout));
747 assert!(dt.dominates(jmp02, jmp21, &cur.func.layout));
748
749 assert!(!dt.dominates(block1, block0, &cur.func.layout));
750 assert!(!dt.dominates(block1, jmp02, &cur.func.layout));
751 assert!(dt.dominates(block1, block1, &cur.func.layout));
752 assert!(dt.dominates(block1, trap, &cur.func.layout));
753 assert!(!dt.dominates(block1, block2, &cur.func.layout));
754 assert!(!dt.dominates(block1, jmp21, &cur.func.layout));
755
756 assert!(!dt.dominates(trap, block0, &cur.func.layout));
757 assert!(!dt.dominates(trap, jmp02, &cur.func.layout));
758 assert!(!dt.dominates(trap, block1, &cur.func.layout));
759 assert!(dt.dominates(trap, trap, &cur.func.layout));
760 assert!(!dt.dominates(trap, block2, &cur.func.layout));
761 assert!(!dt.dominates(trap, jmp21, &cur.func.layout));
762
763 assert!(!dt.dominates(block2, block0, &cur.func.layout));
764 assert!(!dt.dominates(block2, jmp02, &cur.func.layout));
765 assert!(dt.dominates(block2, block1, &cur.func.layout));
766 assert!(dt.dominates(block2, trap, &cur.func.layout));
767 assert!(dt.dominates(block2, block2, &cur.func.layout));

Callers

nothing calls this directly

Calls 6

make_blockMethod · 0.80
jumpMethod · 0.80
newFunction · 0.50
insert_blockMethod · 0.45
insMethod · 0.45
trapMethod · 0.45

Tested by

no test coverage detected