============ initial translation from Move ================
[variant baseline]
fun TestPackref::test1(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2|x_ref: &mut u64
var $t3: u64
var $t4: TestPackref::R
var $t5: &mut TestPackref::R
var $t6: &mut TestPackref::R
var $t7: &mut u64
var $t8: u64
var $t9: &mut u64
var $t10: TestPackref::R
0: $t3 := 3
1: $t4 := pack TestPackref::R($t3)
2: $t0 := $t4
3: $t5 := borrow_local($t0)
4: $t1 := $t5
5: $t6 := move($t1)
6: $t7 := borrow_field<TestPackref::R>.x($t6)
7: $t2 := $t7
8: $t8 := 0
9: $t9 := move($t2)
10: write_ref($t9, $t8)
11: $t10 := move($t0)
12: return $t10
}
[variant baseline]
fun TestPackref::test2($t0|x_ref: &mut u64, $t1|v: u64) {
var $t2: u64
var $t3: &mut u64
0: $t2 := move($t1)
1: $t3 := move($t0)
2: write_ref($t3, $t2)
3: return ()
}
[variant baseline]
public fun TestPackref::test3($t0|r_ref: &mut TestPackref::R, $t1|v: u64) {
var $t2|x_ref: &mut u64
var $t3: &mut TestPackref::R
var $t4: &mut u64
var $t5: &mut u64
var $t6: u64
0: $t3 := move($t0)
1: $t4 := borrow_field<TestPackref::R>.x($t3)
2: $t2 := $t4
3: $t5 := move($t2)
4: $t6 := move($t1)
5: TestPackref::test2($t5, $t6)
6: return ()
}
[variant baseline]
fun TestPackref::test4(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2: u64
var $t3: TestPackref::R
var $t4: &mut TestPackref::R
var $t5: &mut TestPackref::R
var $t6: u64
var $t7: TestPackref::R
0: $t2 := 3
1: $t3 := pack TestPackref::R($t2)
2: $t0 := $t3
3: $t4 := borrow_local($t0)
4: $t1 := $t4
5: $t5 := move($t1)
6: $t6 := 0
7: TestPackref::test3($t5, $t6)
8: $t7 := move($t0)
9: return $t7
}
[variant baseline]
public fun TestPackref::test5($t0|r_ref: &mut TestPackref::R): &mut u64 {
var $t1: &mut TestPackref::R
var $t2: &mut u64
0: $t1 := move($t0)
1: $t2 := borrow_field<TestPackref::R>.x($t1)
2: return $t2
}
[variant baseline]
fun TestPackref::test6(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2|x_ref: &mut u64
var $t3: u64
var $t4: TestPackref::R
var $t5: &mut TestPackref::R
var $t6: &mut TestPackref::R
var $t7: &mut u64
var $t8: &mut u64
var $t9: u64
var $t10: TestPackref::R
0: $t3 := 3
1: $t4 := pack TestPackref::R($t3)
2: $t0 := $t4
3: $t5 := borrow_local($t0)
4: $t1 := $t5
5: $t6 := move($t1)
6: $t7 := TestPackref::test5($t6)
7: $t2 := $t7
8: $t8 := move($t2)
9: $t9 := 0
10: TestPackref::test2($t8, $t9)
11: $t10 := move($t0)
12: return $t10
}
[variant baseline]
fun TestPackref::test7($t0|b: bool) {
var $t1|r1: TestPackref::R
var $t2|r2: TestPackref::R
var $t3|r_ref: &mut TestPackref::R
var $t4: u64
var $t5: TestPackref::R
var $t6: u64
var $t7: TestPackref::R
var $t8: &mut TestPackref::R
var $t9: bool
var $t10: &mut TestPackref::R
var $t11: &mut TestPackref::R
var $t12: &mut TestPackref::R
var $t13: u64
0: $t4 := 3
1: $t5 := pack TestPackref::R($t4)
2: $t1 := $t5
3: $t6 := 4
4: $t7 := pack TestPackref::R($t6)
5: $t2 := $t7
6: $t8 := borrow_local($t1)
7: $t3 := $t8
8: $t9 := move($t0)
9: if ($t9) goto 10 else goto 16
10: label L0
11: $t10 := move($t3)
12: destroy($t10)
13: $t11 := borrow_local($t2)
14: $t3 := $t11
15: goto 16
16: label L2
17: $t12 := move($t3)
18: $t13 := 0
19: TestPackref::test3($t12, $t13)
20: return ()
}
[variant baseline]
fun TestPackref::test8($t0|b: bool, $t1|n: u64, $t2|r_ref: &mut TestPackref::R) {
var $t3|r1: TestPackref::R
var $t4|r2: TestPackref::R
var $t5|t_ref: &mut TestPackref::R
var $t6: u64
var $t7: TestPackref::R
var $t8: u64
var $t9: TestPackref::R
var $t10: &mut TestPackref::R
var $t11: u64
var $t12: u64
var $t13: bool
var $t14: &mut TestPackref::R
var $t15: u64
var $t16: u64
var $t17: u64
var $t18: u64
var $t19: bool
var $t20: &mut TestPackref::R
var $t21: &mut TestPackref::R
var $t22: u64
var $t23: u64
var $t24: u64
var $t25: bool
var $t26: &mut TestPackref::R
var $t27: &mut TestPackref::R
var $t28: u64
var $t29: &mut TestPackref::R
var $t30: &mut TestPackref::R
var $t31: u64
0: $t6 := 3
1: $t7 := pack TestPackref::R($t6)
2: $t3 := $t7
3: $t8 := 4
4: $t9 := pack TestPackref::R($t8)
5: $t4 := $t9
6: $t10 := borrow_local($t4)
7: $t5 := $t10
8: goto 9
9: label L7
10: $t11 := 0
11: $t12 := copy($t1)
12: $t13 := <($t11, $t12)
13: if ($t13) goto 14 else goto 37
14: label L0
15: $t14 := move($t5)
16: destroy($t14)
17: $t15 := copy($t1)
18: $t16 := 2
19: $t17 := /($t15, $t16)
20: $t18 := 0
21: $t19 := ==($t17, $t18)
22: if ($t19) goto 23 else goto 27
23: label L3
24: $t20 := borrow_local($t3)
25: $t5 := $t20
26: goto 31
27: label L5
28: $t21 := borrow_local($t4)
29: $t5 := $t21
30: goto 31
31: label L6
32: $t22 := move($t1)
33: $t23 := 1
34: $t24 := -($t22, $t23)
35: $t1 := $t24
36: goto 9
37: label L2
38: $t25 := move($t0)
39: if ($t25) goto 40 else goto 47
40: label L8
41: $t26 := move($t5)
42: destroy($t26)
43: $t27 := move($t2)
44: $t28 := 0
45: TestPackref::test3($t27, $t28)
46: goto 54
47: label L10
48: $t29 := move($t2)
49: destroy($t29)
50: $t30 := move($t5)
51: $t31 := 0
52: TestPackref::test3($t30, $t31)
53: goto 54
54: label L11
55: return ()
}
============ after pipeline `memory_instr` ================
[variant baseline]
fun TestPackref::test1(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2|x_ref: &mut u64
var $t3: u64
var $t4: &mut TestPackref::R
var $t5: &mut u64
var $t6: u64
var $t7: TestPackref::R
0: $t3 := 3
1: $t0 := pack TestPackref::R($t3)
2: $t4 := borrow_local($t0)
3: $t5 := borrow_field<TestPackref::R>.x($t4)
4: $t6 := 0
5: write_ref($t5, $t6)
6: write_back[Reference($t4).x (u64)]($t5)
7: write_back[LocalRoot($t0)@]($t4)
8: trace_local[r]($t0)
9: $t7 := move($t0)
10: return $t7
}
[variant baseline]
fun TestPackref::test2($t0|x_ref: &mut u64, $t1|v: u64) {
0: write_ref($t0, $t1)
1: trace_local[x_ref]($t0)
2: return ()
}
[variant baseline]
public fun TestPackref::test3($t0|r_ref: &mut TestPackref::R, $t1|v: u64) {
var $t2|x_ref: &mut u64
var $t3: &mut u64
0: $t3 := borrow_field<TestPackref::R>.x($t0)
1: TestPackref::test2($t3, $t1)
2: write_back[Reference($t0).x (u64)]($t3)
3: trace_local[r_ref]($t0)
4: trace_local[r_ref]($t0)
5: return ()
}
[variant baseline]
fun TestPackref::test4(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2: u64
var $t3: &mut TestPackref::R
var $t4: u64
var $t5: TestPackref::R
0: $t2 := 3
1: $t0 := pack TestPackref::R($t2)
2: $t3 := borrow_local($t0)
3: $t4 := 0
4: TestPackref::test3($t3, $t4)
5: write_back[LocalRoot($t0)@]($t3)
6: trace_local[r]($t0)
7: $t5 := move($t0)
8: return $t5
}
[variant baseline]
public fun TestPackref::test5($t0|r_ref: &mut TestPackref::R): &mut u64 {
var $t1: &mut u64
0: $t1 := borrow_field<TestPackref::R>.x($t0)
1: trace_local[r_ref]($t0)
2: write_back[Reference($t0).x (u64)]($t1)
3: trace_local[r_ref]($t0)
4: return $t1
}
[variant baseline]
fun TestPackref::test6(): TestPackref::R {
var $t0|r: TestPackref::R
var $t1|r_ref: &mut TestPackref::R
var $t2|x_ref: &mut u64
var $t3: u64
var $t4: &mut TestPackref::R
var $t5: &mut u64
var $t6: u64
var $t7: TestPackref::R
0: $t3 := 3
1: $t0 := pack TestPackref::R($t3)
2: $t4 := borrow_local($t0)
3: $t5 := TestPackref::test5($t4)
4: $t6 := 0
5: TestPackref::test2($t5, $t6)
6: write_back[Reference($t4).x (u64)]($t5)
7: write_back[LocalRoot($t0)@]($t4)
8: trace_local[r]($t0)
9: $t7 := move($t0)
10: return $t7
}
[variant baseline]
fun TestPackref::test7($t0|b: bool) {
var $t1|r1: TestPackref::R
var $t2|r2: TestPackref::R
var $t3|r_ref: &mut TestPackref::R
var $t4: u64
var $t5: u64
var $t6: &mut TestPackref::R
var $t7: u64
0: $t4 := 3
1: $t1 := pack TestPackref::R($t4)
2: $t5 := 4
3: $t2 := pack TestPackref::R($t5)
4: $t6 := borrow_local($t1)
5: $t3 := $t6
6: write_back[LocalRoot($t1)@]($t6)
7: trace_local[r1]($t1)
8: if ($t0) goto 20 else goto 25
9: label L0
10: destroy($t6)
11: $t3 := borrow_local($t2)
12: label L2
13: $t7 := 0
14: TestPackref::test3($t3, $t7)
15: write_back[LocalRoot($t1)@]($t3)
16: trace_local[r1]($t1)
17: write_back[LocalRoot($t2)@]($t3)
18: trace_local[r2]($t2)
19: return ()
20: label L3
21: write_back[LocalRoot($t1)@]($t3)
22: trace_local[r1]($t1)
23: destroy($t3)
24: goto 9
25: label L4
26: destroy($t6)
27: goto 12
}
[variant baseline]
fun TestPackref::test8($t0|b: bool, $t1|n: u64, $t2|r_ref: &mut TestPackref::R) {
var $t3|r1: TestPackref::R
var $t4|r2: TestPackref::R
var $t5|t_ref: &mut TestPackref::R
var $t6: u64
var $t7: u64
var $t8: u64
var $t9: bool
var $t10: u64
var $t11: u64
var $t12: u64
var $t13: bool
var $t14: u64
var $t15: u64
var $t16: u64
0: $t6 := 3
1: $t3 := pack TestPackref::R($t6)
2: $t7 := 4
3: $t4 := pack TestPackref::R($t7)
4: $t5 := borrow_local($t4)
5: label L7
6: $t8 := 0
7: $t9 := <($t8, $t1)
8: if ($t9) goto 9 else goto 29
9: label L0
10: write_back[LocalRoot($t3)@]($t5)
11: trace_local[r1]($t3)
12: write_back[LocalRoot($t4)@]($t5)
13: trace_local[r2]($t4)
14: destroy($t5)
15: $t10 := 2
16: $t11 := /($t1, $t10)
17: $t12 := 0
18: $t13 := ==($t11, $t12)
19: if ($t13) goto 20 else goto 23
20: label L3
21: $t5 := borrow_local($t3)
22: goto 25
23: label L5
24: $t5 := borrow_local($t4)
25: label L6
26: $t14 := 1
27: $t1 := -($t1, $t14)
28: goto 5
29: label L2
30: if ($t0) goto 31 else goto 40
31: label L8
32: write_back[LocalRoot($t3)@]($t5)
33: trace_local[r1]($t3)
34: write_back[LocalRoot($t4)@]($t5)
35: trace_local[r2]($t4)
36: destroy($t5)
37: $t15 := 0
38: TestPackref::test3($t2, $t15)
39: goto 48
40: label L10
41: destroy($t2)
42: $t16 := 0
43: TestPackref::test3($t5, $t16)
44: write_back[LocalRoot($t3)@]($t5)
45: trace_local[r1]($t3)
46: write_back[LocalRoot($t4)@]($t5)
47: trace_local[r2]($t4)
48: label L11
49: trace_local[r_ref]($t2)
50: return ()
}