============ 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.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.a2($t5) 6: $t7 := read_ref($t6) 7: $t8 := borrow_global($t7) 8: $t9 := borrow_field.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($t6) 7: $t8 := borrow_field.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.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.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.a2($t5) 6: $t7 := read_ref($t6) 7: $t8 := borrow_global($t7) 8: $t9 := borrow_field.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($t6) 7: $t8 := borrow_field.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.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 }