move-stackless-bytecode 0.3.2

Move stackless bytecode
Documentation
============ initial translation from Move ================

[variant baseline]
fun TestLiveVars::test1($t0|r_ref: &TestLiveVars::R): u64 {
     var $t1|x_ref: &u64
     var $t2: &TestLiveVars::R
     var $t3: &u64
     var $t4: &u64
     var $t5: u64
  0: $t2 := move($t0)
  1: $t3 := borrow_field<TestLiveVars::R>.x($t2)
  2: $t1 := $t3
  3: $t4 := move($t1)
  4: $t5 := read_ref($t4)
  5: return $t5
}


[variant baseline]
fun TestLiveVars::test2($t0|b: bool): u64 {
     var $t1|r1: TestLiveVars::R
     var $t2|r2: TestLiveVars::R
     var $t3|r_ref: &TestLiveVars::R
     var $t4: u64
     var $t5: TestLiveVars::R
     var $t6: u64
     var $t7: TestLiveVars::R
     var $t8: &TestLiveVars::R
     var $t9: bool
     var $t10: &TestLiveVars::R
     var $t11: &TestLiveVars::R
     var $t12: &TestLiveVars::R
     var $t13: u64
  0: $t4 := 3
  1: $t5 := pack TestLiveVars::R($t4)
  2: $t1 := $t5
  3: $t6 := 4
  4: $t7 := pack TestLiveVars::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 := TestLiveVars::test1($t12)
 19: return $t13
}


[variant baseline]
fun TestLiveVars::test3($t0|n: u64, $t1|r_ref: &TestLiveVars::R): u64 {
     var $t2|r1: TestLiveVars::R
     var $t3|r2: TestLiveVars::R
     var $t4: u64
     var $t5: TestLiveVars::R
     var $t6: u64
     var $t7: TestLiveVars::R
     var $t8: u64
     var $t9: u64
     var $t10: bool
     var $t11: &TestLiveVars::R
     var $t12: u64
     var $t13: u64
     var $t14: u64
     var $t15: u64
     var $t16: bool
     var $t17: &TestLiveVars::R
     var $t18: &TestLiveVars::R
     var $t19: u64
     var $t20: u64
     var $t21: u64
     var $t22: &TestLiveVars::R
     var $t23: u64
  0: $t4 := 3
  1: $t5 := pack TestLiveVars::R($t4)
  2: $t2 := $t5
  3: $t6 := 4
  4: $t7 := pack TestLiveVars::R($t6)
  5: $t3 := $t7
  6: goto 7
  7: label L7
  8: $t8 := 0
  9: $t9 := copy($t0)
 10: $t10 := <($t8, $t9)
 11: if ($t10) goto 12 else goto 35
 12: label L0
 13: $t11 := move($t1)
 14: destroy($t11)
 15: $t12 := copy($t0)
 16: $t13 := 2
 17: $t14 := /($t12, $t13)
 18: $t15 := 0
 19: $t16 := ==($t14, $t15)
 20: if ($t16) goto 21 else goto 25
 21: label L3
 22: $t17 := borrow_local($t2)
 23: $t1 := $t17
 24: goto 29
 25: label L5
 26: $t18 := borrow_local($t3)
 27: $t1 := $t18
 28: goto 29
 29: label L6
 30: $t19 := move($t0)
 31: $t20 := 1
 32: $t21 := -($t19, $t20)
 33: $t0 := $t21
 34: goto 7
 35: label L2
 36: $t22 := move($t1)
 37: $t23 := TestLiveVars::test1($t22)
 38: return $t23
}

============ after pipeline `livevar` ================

[variant baseline]
fun TestLiveVars::test1($t0|r_ref: TestLiveVars::R): u64 {
     var $t1|x_ref: u64
     var $t2: u64
     # live vars: r_ref
  0: $t2 := get_field<TestLiveVars::R>.x($t0)
     # live vars: $t2
  1: return $t2
}


[variant baseline]
fun TestLiveVars::test2($t0|b: bool): u64 {
     var $t1|r1: TestLiveVars::R
     var $t2|r2: TestLiveVars::R
     var $t3|r_ref: TestLiveVars::R
     var $t4: u64
     var $t5: TestLiveVars::R
     var $t6: u64
     var $t7: TestLiveVars::R
     var $t8: u64
     # live vars: b
  0: $t4 := 3
     # live vars: b, $t4
  1: $t5 := pack TestLiveVars::R($t4)
     # live vars: b, $t5
  2: $t6 := 4
     # live vars: b, $t5, $t6
  3: $t7 := pack TestLiveVars::R($t6)
     # live vars: b, $t5, $t7
  4: $t3 := $t5
     # live vars: b, r_ref, $t7
  5: if ($t0) goto 6 else goto 8
     # live vars: $t7
  6: label L0
     # live vars: $t7
  7: $t3 := $t7
     # live vars: r_ref
  8: label L2
     # live vars: r_ref
  9: $t8 := TestLiveVars::test1($t3)
     # live vars: $t8
 10: return $t8
}


[variant baseline]
fun TestLiveVars::test3($t0|n: u64, $t1|r_ref: TestLiveVars::R): u64 {
     var $t2|r1: TestLiveVars::R
     var $t3|r2: TestLiveVars::R
     var $t4: u64
     var $t5: TestLiveVars::R
     var $t6: u64
     var $t7: TestLiveVars::R
     var $t8: u64
     var $t9: bool
     var $t10: u64
     var $t11: u64
     var $t12: u64
     var $t13: bool
     var $t14: u64
     var $t15: u64
     # live vars: n, r_ref
  0: $t4 := 3
     # live vars: n, r_ref, $t4
  1: $t5 := pack TestLiveVars::R($t4)
     # live vars: n, r_ref, $t5
  2: $t6 := 4
     # live vars: n, r_ref, $t5, $t6
  3: $t7 := pack TestLiveVars::R($t6)
     # live vars: n, r_ref, $t5, $t7
  4: label L7
     # live vars: n, r_ref, $t5, $t7
  5: $t8 := 0
     # live vars: n, r_ref, $t5, $t7, $t8
  6: $t9 := <($t8, $t0)
     # live vars: n, r_ref, $t5, $t7, $t9
  7: if ($t9) goto 8 else goto 23
     # live vars: n, $t5, $t7
  8: label L0
     # live vars: n, $t5, $t7
  9: $t10 := 2
     # live vars: n, $t5, $t7, $t10
 10: $t11 := /($t0, $t10)
     # live vars: n, $t5, $t7, $t11
 11: $t12 := 0
     # live vars: n, $t5, $t7, $t11, $t12
 12: $t13 := ==($t11, $t12)
     # live vars: n, $t5, $t7, $t13
 13: if ($t13) goto 14 else goto 17
     # live vars: n, $t5, $t7
 14: label L3
     # live vars: n, $t5, $t7
 15: $t1 := $t5
     # live vars: n, r_ref, $t5, $t7
 16: goto 19
     # live vars: n, $t5, $t7
 17: label L5
     # live vars: n, $t5, $t7
 18: $t1 := $t7
     # live vars: n, r_ref, $t5, $t7
 19: label L6
     # live vars: n, r_ref, $t5, $t7
 20: $t14 := 1
     # live vars: n, r_ref, $t5, $t7, $t14
 21: $t0 := -($t0, $t14)
     # live vars: n, r_ref, $t5, $t7
 22: goto 4
     # live vars: r_ref
 23: label L2
     # live vars: r_ref
 24: $t15 := TestLiveVars::test1($t1)
     # live vars: $t15
 25: return $t15
}