move-stackless-bytecode 0.3.2

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

[variant baseline]
fun PackUnpack::pack_then_read($t0|a2: address): address {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: &PackUnpack::T
     var $t6: &address
     var $t7: address
  0: $t2 := move($t0)
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := borrow_local($t1)
  5: $t6 := borrow_field<PackUnpack::T>.a2($t5)
  6: $t7 := read_ref($t6)
  7: return $t7
}


[variant baseline]
fun PackUnpack::read_packed_borrow_glob($t0|a2: address): bool {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: &PackUnpack::T
     var $t6: &address
     var $t7: address
     var $t8: &PackUnpack::Glob
     var $t9: &bool
     var $t10: bool
  0: $t2 := move($t0)
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := borrow_local($t1)
  5: $t6 := borrow_field<PackUnpack::T>.a2($t5)
  6: $t7 := read_ref($t6)
  7: $t8 := borrow_global<PackUnpack::Glob>($t7)
  8: $t9 := borrow_field<PackUnpack::Glob>.b($t8)
  9: $t10 := read_ref($t9)
 10: return $t10
}


[variant baseline]
fun PackUnpack::read_unpacked_addr($t0|s: PackUnpack::S): address {
     var $t1|tmp#$1: address
     var $t2|a1: address
     var $t3|a2: address
     var $t4|b: bool
     var $t5: PackUnpack::S
     var $t6: address
     var $t7: PackUnpack::T
     var $t8: u64
     var $t9: address
     var $t10: bool
     var $t11: bool
     var $t12: address
     var $t13: address
     var $t14: address
  0: $t5 := move($t0)
  1: ($t6, $t7, $t8) := unpack PackUnpack::S($t5)
  2: destroy($t8)
  3: ($t9, $t10) := unpack PackUnpack::T($t7)
  4: $t4 := $t10
  5: $t3 := $t9
  6: $t2 := $t6
  7: $t11 := move($t4)
  8: if ($t11) goto 9 else goto 13
  9: label L0
 10: $t12 := move($t2)
 11: $t1 := $t12
 12: goto 17
 13: label L2
 14: $t13 := move($t3)
 15: $t1 := $t13
 16: goto 17
 17: label L3
 18: $t14 := move($t1)
 19: return $t14
}


[variant baseline]
fun PackUnpack::read_unpacked_borrow_glob($t0|s: PackUnpack::S): bool {
     var $t1|a1: address
     var $t2: PackUnpack::S
     var $t3: address
     var $t4: PackUnpack::T
     var $t5: u64
     var $t6: address
     var $t7: &PackUnpack::Glob
     var $t8: &bool
     var $t9: bool
  0: $t2 := move($t0)
  1: ($t3, $t4, $t5) := unpack PackUnpack::S($t2)
  2: destroy($t5)
  3: destroy($t4)
  4: $t1 := $t3
  5: $t6 := move($t1)
  6: $t7 := borrow_global<PackUnpack::Glob>($t6)
  7: $t8 := borrow_field<PackUnpack::Glob>.b($t7)
  8: $t9 := read_ref($t8)
  9: return $t9
}


[variant baseline]
fun PackUnpack::reassign_packed_addr($t0|a2: address): address {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: PackUnpack::T
     var $t6: address
     var $t7: bool
     var $t8: PackUnpack::T
     var $t9: &PackUnpack::T
     var $t10: &address
     var $t11: address
  0: $t2 := 0x7
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := move($t1)
  5: destroy($t5)
  6: $t6 := move($t0)
  7: $t7 := false
  8: $t8 := pack PackUnpack::T($t6, $t7)
  9: $t1 := $t8
 10: $t9 := borrow_local($t1)
 11: $t10 := borrow_field<PackUnpack::T>.a2($t9)
 12: $t11 := read_ref($t10)
 13: return $t11
}


[variant baseline]
fun PackUnpack::use_results($t0|_: u64, $t1|a: address): address {
     var $t2|a1: address
     var $t3|s: PackUnpack::S
     var $t4: address
     var $t5: address
     var $t6: address
     var $t7: address
     var $t8: bool
     var $t9: PackUnpack::T
     var $t10: u64
     var $t11: PackUnpack::S
     var $t12: PackUnpack::S
     var $t13: address
  0: $t4 := move($t1)
  1: $t5 := PackUnpack::pack_then_read($t4)
  2: $t2 := $t5
  3: $t6 := move($t2)
  4: $t7 := 0x7
  5: $t8 := true
  6: $t9 := pack PackUnpack::T($t7, $t8)
  7: $t10 := 10
  8: $t11 := pack PackUnpack::S($t6, $t9, $t10)
  9: $t3 := $t11
 10: $t12 := move($t3)
 11: $t13 := PackUnpack::read_unpacked_addr($t12)
 12: return $t13
}

============ after pipeline `read_write_set` ================

[variant baseline]
fun PackUnpack::pack_then_read($t0|a2: address): address {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: &PackUnpack::T
     var $t6: &address
     var $t7: address
     # Accesses:
     # Formal(0): Read
     #
     # Locals:
     # Ret(0): Formal(0)
     #
  0: $t2 := move($t0)
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := borrow_local($t1)
  5: $t6 := borrow_field<PackUnpack::T>.a2($t5)
  6: $t7 := read_ref($t6)
  7: return $t7
}


[variant baseline]
fun PackUnpack::read_packed_borrow_glob($t0|a2: address): bool {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: &PackUnpack::T
     var $t6: &address
     var $t7: address
     var $t8: &PackUnpack::Glob
     var $t9: &bool
     var $t10: bool
     # Accesses:
     # Formal(0): Read
     # Formal(0)/0x1::PackUnpack::Glob/b: Read
     #
     # Locals:
     # Ret(0): Formal(0)/0x1::PackUnpack::Glob/b
     #
  0: $t2 := move($t0)
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := borrow_local($t1)
  5: $t6 := borrow_field<PackUnpack::T>.a2($t5)
  6: $t7 := read_ref($t6)
  7: $t8 := borrow_global<PackUnpack::Glob>($t7)
  8: $t9 := borrow_field<PackUnpack::Glob>.b($t8)
  9: $t10 := read_ref($t9)
 10: return $t10
}


[variant baseline]
fun PackUnpack::read_unpacked_addr($t0|s: PackUnpack::S): address {
     var $t1|tmp#$1: address
     var $t2|a1: address
     var $t3|a2: address
     var $t4|b: bool
     var $t5: PackUnpack::S
     var $t6: address
     var $t7: PackUnpack::T
     var $t8: u64
     var $t9: address
     var $t10: bool
     var $t11: bool
     var $t12: address
     var $t13: address
     var $t14: address
     # Accesses:
     # Formal(0): Read
     # Formal(0)/a1: Read
     # Formal(0)/t/a2: Read
     #
     # Locals:
     # Ret(0): {Formal(0)/a1, Formal(0)/t/a2, }
     #
  0: $t5 := move($t0)
  1: ($t6, $t7, $t8) := unpack PackUnpack::S($t5)
  2: destroy($t8)
  3: ($t9, $t10) := unpack PackUnpack::T($t7)
  4: $t4 := $t10
  5: $t3 := $t9
  6: $t2 := $t6
  7: $t11 := move($t4)
  8: if ($t11) goto 9 else goto 13
  9: label L0
 10: $t12 := move($t2)
 11: $t1 := $t12
 12: goto 17
 13: label L2
 14: $t13 := move($t3)
 15: $t1 := $t13
 16: goto 17
 17: label L3
 18: $t14 := move($t1)
 19: return $t14
}


[variant baseline]
fun PackUnpack::read_unpacked_borrow_glob($t0|s: PackUnpack::S): bool {
     var $t1|a1: address
     var $t2: PackUnpack::S
     var $t3: address
     var $t4: PackUnpack::T
     var $t5: u64
     var $t6: address
     var $t7: &PackUnpack::Glob
     var $t8: &bool
     var $t9: bool
     # Accesses:
     # Formal(0): Read
     # Formal(0)/a1: Read
     # Formal(0)/a1/0x1::PackUnpack::Glob/b: Read
     #
     # Locals:
     # Ret(0): Formal(0)/a1/0x1::PackUnpack::Glob/b
     #
  0: $t2 := move($t0)
  1: ($t3, $t4, $t5) := unpack PackUnpack::S($t2)
  2: destroy($t5)
  3: destroy($t4)
  4: $t1 := $t3
  5: $t6 := move($t1)
  6: $t7 := borrow_global<PackUnpack::Glob>($t6)
  7: $t8 := borrow_field<PackUnpack::Glob>.b($t7)
  8: $t9 := read_ref($t8)
  9: return $t9
}


[variant baseline]
fun PackUnpack::reassign_packed_addr($t0|a2: address): address {
     var $t1|t: PackUnpack::T
     var $t2: address
     var $t3: bool
     var $t4: PackUnpack::T
     var $t5: PackUnpack::T
     var $t6: address
     var $t7: bool
     var $t8: PackUnpack::T
     var $t9: &PackUnpack::T
     var $t10: &address
     var $t11: address
     # Accesses:
     # Formal(0): Read
     #
     # Locals:
     # Ret(0): Formal(0)
     #
  0: $t2 := 0x7
  1: $t3 := false
  2: $t4 := pack PackUnpack::T($t2, $t3)
  3: $t1 := $t4
  4: $t5 := move($t1)
  5: destroy($t5)
  6: $t6 := move($t0)
  7: $t7 := false
  8: $t8 := pack PackUnpack::T($t6, $t7)
  9: $t1 := $t8
 10: $t9 := borrow_local($t1)
 11: $t10 := borrow_field<PackUnpack::T>.a2($t9)
 12: $t11 := read_ref($t10)
 13: return $t11
}


[variant baseline]
fun PackUnpack::use_results($t0|_: u64, $t1|a: address): address {
     var $t2|a1: address
     var $t3|s: PackUnpack::S
     var $t4: address
     var $t5: address
     var $t6: address
     var $t7: address
     var $t8: bool
     var $t9: PackUnpack::T
     var $t10: u64
     var $t11: PackUnpack::S
     var $t12: PackUnpack::S
     var $t13: address
     # Accesses:
     # Formal(1): Read
     #
     # Locals:
     # Ret(0): {0x7, Formal(1), }
     #
  0: $t4 := move($t1)
  1: $t5 := PackUnpack::pack_then_read($t4)
  2: $t2 := $t5
  3: $t6 := move($t2)
  4: $t7 := 0x7
  5: $t8 := true
  6: $t9 := pack PackUnpack::T($t7, $t8)
  7: $t10 := 10
  8: $t11 := pack PackUnpack::S($t6, $t9, $t10)
  9: $t3 := $t11
 10: $t12 := move($t3)
 11: $t13 := PackUnpack::read_unpacked_addr($t12)
 12: return $t13
}