move-stackless-bytecode 0.3.2

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

[variant baseline]
public fun Test::incr($t0|a: address) {
     var $t1|r: &mut Test::R
     var $t2: address
     var $t3: &mut Test::R
     var $t4: &mut Test::R
     var $t5: &u64
     var $t6: u64
     var $t7: u64
     var $t8: u64
     var $t9: &mut Test::R
     var $t10: &mut u64
  0: $t2 := move($t0)
  1: $t3 := borrow_global<Test::R>($t2)
  2: $t1 := $t3
  3: $t4 := copy($t1)
  4: $t5 := borrow_field<Test::R>.x($t4)
  5: $t6 := read_ref($t5)
  6: $t7 := 1
  7: $t8 := +($t6, $t7)
  8: $t9 := move($t1)
  9: $t10 := borrow_field<Test::R>.x($t9)
 10: write_ref($t10, $t8)
 11: return ()
}

============ after pipeline `global_invariant_instrumentation` ================

[variant verification]
public fun Test::incr($t0|a: address) {
     var $t1|r: &mut Test::R
     var $t2: &mut Test::R
     var $t3: num
     var $t4: u64
     var $t5: u64
     var $t6: u64
     var $t7: &mut u64
  0: $t2 := borrow_global<Test::R>($t0) on_abort goto 12 with $t3
  1: $t4 := get_field<Test::R>.x($t2)
  2: $t5 := 1
  3: $t6 := +($t4, $t5) on_abort goto 12 with $t3
  4: $t7 := borrow_field<Test::R>.x($t2)
  5: write_ref($t7, $t6)
  6: write_back[Reference($t2).x (u64)]($t7)
     # state save for global update invariants
  7: @1 := save_mem(Test::R)
  8: write_back[Test::R@]($t2)
     # global invariant at tests/global_invariant_instrumentation/update.move:7:9+82
     # VC: global memory invariant does not hold at tests/global_invariant_instrumentation/update.move:7:9+82
  9: assert forall a: TypeDomain<address>(): Lt(select Test::R.x(global[@1]<Test::R>(a)), select Test::R.x(global<Test::R>(a)))
 10: label L1
 11: return ()
 12: label L2
 13: abort($t3)
}