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

Function append_inst

cranelift/codegen/src/ir/layout.rs:987–1059  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

985
986 #[test]
987 fn append_inst() {
988 let mut layout = Layout::new();
989 let e1 = Block::new(1);
990
991 layout.append_block(e1);
992 let v: Vec<Inst> = layout.block_insts(e1).collect();
993 assert_eq!(v, []);
994
995 let i0 = Inst::new(0);
996 let i1 = Inst::new(1);
997 let i2 = Inst::new(2);
998
999 assert_eq!(layout.inst_block(i0), None);
1000 assert_eq!(layout.inst_block(i1), None);
1001 assert_eq!(layout.inst_block(i2), None);
1002
1003 layout.append_inst(i1, e1);
1004 assert_eq!(layout.inst_block(i0), None);
1005 assert_eq!(layout.inst_block(i1), Some(e1));
1006 assert_eq!(layout.inst_block(i2), None);
1007 let v: Vec<Inst> = layout.block_insts(e1).collect();
1008 assert_eq!(v, [i1]);
1009
1010 layout.append_inst(i2, e1);
1011 assert_eq!(layout.inst_block(i0), None);
1012 assert_eq!(layout.inst_block(i1), Some(e1));
1013 assert_eq!(layout.inst_block(i2), Some(e1));
1014 let v: Vec<Inst> = layout.block_insts(e1).collect();
1015 assert_eq!(v, [i1, i2]);
1016
1017 // Test double-ended instruction iterator.
1018 let v: Vec<Inst> = layout.block_insts(e1).rev().collect();
1019 assert_eq!(v, [i2, i1]);
1020
1021 layout.append_inst(i0, e1);
1022 verify(&mut layout, &[(e1, &[i1, i2, i0])]);
1023
1024 // Test cursor positioning.
1025 let mut cur = LayoutCursor::new(&mut layout).at_top(e1);
1026 assert_eq!(cur.position(), CursorPosition::Before(e1));
1027 assert_eq!(cur.prev_inst(), None);
1028 assert_eq!(cur.position(), CursorPosition::Before(e1));
1029 assert_eq!(cur.next_inst(), Some(i1));
1030 assert_eq!(cur.position(), CursorPosition::At(i1));
1031 assert_eq!(cur.next_inst(), Some(i2));
1032 assert_eq!(cur.next_inst(), Some(i0));
1033 assert_eq!(cur.prev_inst(), Some(i2));
1034 assert_eq!(cur.position(), CursorPosition::At(i2));
1035 assert_eq!(cur.next_inst(), Some(i0));
1036 assert_eq!(cur.position(), CursorPosition::At(i0));
1037 assert_eq!(cur.next_inst(), None);
1038 assert_eq!(cur.position(), CursorPosition::After(e1));
1039 assert_eq!(cur.next_inst(), None);
1040 assert_eq!(cur.position(), CursorPosition::After(e1));
1041 assert_eq!(cur.prev_inst(), Some(i0));
1042 assert_eq!(cur.prev_inst(), Some(i2));
1043 assert_eq!(cur.prev_inst(), Some(i1));
1044 assert_eq!(cur.prev_inst(), None);

Callers

nothing calls this directly

Calls 9

append_blockMethod · 0.80
collectMethod · 0.80
block_instsMethod · 0.80
append_instMethod · 0.80
at_topMethod · 0.80
goto_instMethod · 0.80
verifyFunction · 0.70
newFunction · 0.50
remove_instMethod · 0.45

Tested by

no test coverage detected