============ initial translation from Move ================ [variant baseline] fun SecondaryIndex::call_two_secondary_indexes($t0|s: &SecondaryIndex::S): address { var $t1: &SecondaryIndex::S var $t2: bool var $t3: address 0: $t1 := move($t0) 1: $t2 := true 2: $t3 := SecondaryIndex::two_secondary_indexes($t1, $t2) 3: return $t3 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_formal($t0|a: &SecondaryIndex::A): address { var $t1: &SecondaryIndex::A var $t2: &address var $t3: address var $t4: &SecondaryIndex::B var $t5: &address var $t6: address 0: $t1 := move($t0) 1: $t2 := borrow_field.a_addr($t1) 2: $t3 := read_ref($t2) 3: $t4 := borrow_global($t3) 4: $t5 := borrow_field.b_addr($t4) 5: $t6 := read_ref($t5) 6: return $t6 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_formal_interproc($t0|a_addr: address): address { var $t1|a: SecondaryIndex::A var $t2: address var $t3: SecondaryIndex::A var $t4: &SecondaryIndex::A var $t5: address 0: $t2 := move($t0) 1: $t3 := pack SecondaryIndex::A($t2) 2: $t1 := $t3 3: $t4 := borrow_local($t1) 4: $t5 := SecondaryIndex::read_secondary_index_from_formal($t4) 5: return $t5 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_global($t0|a: address): address { var $t1|addr: address var $t2: address var $t3: &SecondaryIndex::A var $t4: &address var $t5: address var $t6: address var $t7: &SecondaryIndex::B var $t8: &address var $t9: address 0: $t2 := move($t0) 1: $t3 := borrow_global($t2) 2: $t4 := borrow_field.a_addr($t3) 3: $t5 := read_ref($t4) 4: $t1 := $t5 5: $t6 := move($t1) 6: $t7 := borrow_global($t6) 7: $t8 := borrow_field.b_addr($t7) 8: $t9 := read_ref($t8) 9: return $t9 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_global_interproc($t0|a: address): address { var $t1: address var $t2: &SecondaryIndex::A var $t3: address 0: $t1 := move($t0) 1: $t2 := borrow_global($t1) 2: $t3 := SecondaryIndex::read_secondary_index_from_formal($t2) 3: return $t3 } [variant baseline] fun SecondaryIndex::two_secondary_indexes($t0|s: &SecondaryIndex::S, $t1|b: bool): address { var $t2|tmp#$2: address var $t3: bool var $t4: &SecondaryIndex::S var $t5: &address var $t6: address var $t7: &SecondaryIndex::A var $t8: &address var $t9: address var $t10: &SecondaryIndex::S var $t11: &address var $t12: address var $t13: &SecondaryIndex::A var $t14: &address var $t15: address var $t16: address 0: $t3 := move($t1) 1: if ($t3) goto 2 else goto 11 2: label L0 3: $t4 := move($t0) 4: $t5 := borrow_field.f($t4) 5: $t6 := read_ref($t5) 6: $t7 := borrow_global($t6) 7: $t8 := borrow_field.a_addr($t7) 8: $t9 := read_ref($t8) 9: $t2 := $t9 10: goto 20 11: label L2 12: $t10 := move($t0) 13: $t11 := borrow_field.g($t10) 14: $t12 := read_ref($t11) 15: $t13 := borrow_global($t12) 16: $t14 := borrow_field.a_addr($t13) 17: $t15 := read_ref($t14) 18: $t2 := $t15 19: goto 20 20: label L3 21: $t16 := move($t2) 22: return $t16 } [variant baseline] fun SecondaryIndex::write_both_fields($t0|c: &mut SecondaryIndex::C, $t1|b: SecondaryIndex::B, $t2|addr: address, $t3|flag: bool) { var $t4: bool var $t5: SecondaryIndex::B var $t6: &mut SecondaryIndex::C var $t7: &mut SecondaryIndex::B var $t8: bool var $t9: address var $t10: &mut SecondaryIndex::C var $t11: &mut SecondaryIndex::B var $t12: &mut address var $t13: &mut SecondaryIndex::C 0: $t4 := copy($t3) 1: if ($t4) goto 2 else goto 8 2: label L0 3: $t5 := move($t1) 4: $t6 := copy($t0) 5: $t7 := borrow_field.b($t6) 6: write_ref($t7, $t5) 7: goto 8 8: label L2 9: $t8 := move($t3) 10: if ($t8) goto 11 else goto 18 11: label L3 12: $t9 := move($t2) 13: $t10 := move($t0) 14: $t11 := borrow_field.b($t10) 15: $t12 := borrow_field.b_addr($t11) 16: write_ref($t12, $t9) 17: goto 22 18: label L5 19: $t13 := move($t0) 20: destroy($t13) 21: goto 22 22: label L6 23: return () } ============ after pipeline `read_write_set` ================ [variant baseline] fun SecondaryIndex::call_two_secondary_indexes($t0|s: &SecondaryIndex::S): address { var $t1: &SecondaryIndex::S var $t2: bool var $t3: address # Accesses: # Formal(0): Read # Formal(0)/f: Read # Formal(0)/f/0x1::SecondaryIndex::A/a_addr: Read # Formal(0)/g: Read # Formal(0)/g/0x1::SecondaryIndex::A/a_addr: Read # # Locals: # Ret(0): {Formal(0)/f/0x1::SecondaryIndex::A/a_addr, Formal(0)/g/0x1::SecondaryIndex::A/a_addr, } # 0: $t1 := move($t0) 1: $t2 := true 2: $t3 := SecondaryIndex::two_secondary_indexes($t1, $t2) 3: return $t3 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_formal($t0|a: &SecondaryIndex::A): address { var $t1: &SecondaryIndex::A var $t2: &address var $t3: address var $t4: &SecondaryIndex::B var $t5: &address var $t6: address # Accesses: # Formal(0): Read # Formal(0)/a_addr: Read # Formal(0)/a_addr/0x1::SecondaryIndex::B/b_addr: Read # # Locals: # Ret(0): Formal(0)/a_addr/0x1::SecondaryIndex::B/b_addr # 0: $t1 := move($t0) 1: $t2 := borrow_field.a_addr($t1) 2: $t3 := read_ref($t2) 3: $t4 := borrow_global($t3) 4: $t5 := borrow_field.b_addr($t4) 5: $t6 := read_ref($t5) 6: return $t6 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_formal_interproc($t0|a_addr: address): address { var $t1|a: SecondaryIndex::A var $t2: address var $t3: SecondaryIndex::A var $t4: &SecondaryIndex::A var $t5: address # Accesses: # Formal(0): Read # Formal(0)/0x1::SecondaryIndex::B/b_addr: Read # # Locals: # Ret(0): Formal(0)/0x1::SecondaryIndex::B/b_addr # 0: $t2 := move($t0) 1: $t3 := pack SecondaryIndex::A($t2) 2: $t1 := $t3 3: $t4 := borrow_local($t1) 4: $t5 := SecondaryIndex::read_secondary_index_from_formal($t4) 5: return $t5 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_global($t0|a: address): address { var $t1|addr: address var $t2: address var $t3: &SecondaryIndex::A var $t4: &address var $t5: address var $t6: address var $t7: &SecondaryIndex::B var $t8: &address var $t9: address # Accesses: # Formal(0): Read # Formal(0)/0x1::SecondaryIndex::A/a_addr: Read # Formal(0)/0x1::SecondaryIndex::A/a_addr/0x1::SecondaryIndex::B/b_addr: Read # # Locals: # Ret(0): Formal(0)/0x1::SecondaryIndex::A/a_addr/0x1::SecondaryIndex::B/b_addr # 0: $t2 := move($t0) 1: $t3 := borrow_global($t2) 2: $t4 := borrow_field.a_addr($t3) 3: $t5 := read_ref($t4) 4: $t1 := $t5 5: $t6 := move($t1) 6: $t7 := borrow_global($t6) 7: $t8 := borrow_field.b_addr($t7) 8: $t9 := read_ref($t8) 9: return $t9 } [variant baseline] fun SecondaryIndex::read_secondary_index_from_global_interproc($t0|a: address): address { var $t1: address var $t2: &SecondaryIndex::A var $t3: address # Accesses: # Formal(0): Read # Formal(0)/0x1::SecondaryIndex::A: Read # Formal(0)/0x1::SecondaryIndex::A/a_addr: Read # Formal(0)/0x1::SecondaryIndex::A/a_addr/0x1::SecondaryIndex::B/b_addr: Read # # Locals: # Ret(0): Formal(0)/0x1::SecondaryIndex::A/a_addr/0x1::SecondaryIndex::B/b_addr # 0: $t1 := move($t0) 1: $t2 := borrow_global($t1) 2: $t3 := SecondaryIndex::read_secondary_index_from_formal($t2) 3: return $t3 } [variant baseline] fun SecondaryIndex::two_secondary_indexes($t0|s: &SecondaryIndex::S, $t1|b: bool): address { var $t2|tmp#$2: address var $t3: bool var $t4: &SecondaryIndex::S var $t5: &address var $t6: address var $t7: &SecondaryIndex::A var $t8: &address var $t9: address var $t10: &SecondaryIndex::S var $t11: &address var $t12: address var $t13: &SecondaryIndex::A var $t14: &address var $t15: address var $t16: address # Accesses: # Formal(0): Read # Formal(0)/f: Read # Formal(0)/f/0x1::SecondaryIndex::A/a_addr: Read # Formal(0)/g: Read # Formal(0)/g/0x1::SecondaryIndex::A/a_addr: Read # Formal(1): Read # # Locals: # Ret(0): {Formal(0)/f/0x1::SecondaryIndex::A/a_addr, Formal(0)/g/0x1::SecondaryIndex::A/a_addr, } # 0: $t3 := move($t1) 1: if ($t3) goto 2 else goto 11 2: label L0 3: $t4 := move($t0) 4: $t5 := borrow_field.f($t4) 5: $t6 := read_ref($t5) 6: $t7 := borrow_global($t6) 7: $t8 := borrow_field.a_addr($t7) 8: $t9 := read_ref($t8) 9: $t2 := $t9 10: goto 20 11: label L2 12: $t10 := move($t0) 13: $t11 := borrow_field.g($t10) 14: $t12 := read_ref($t11) 15: $t13 := borrow_global($t12) 16: $t14 := borrow_field.a_addr($t13) 17: $t15 := read_ref($t14) 18: $t2 := $t15 19: goto 20 20: label L3 21: $t16 := move($t2) 22: return $t16 } [variant baseline] fun SecondaryIndex::write_both_fields($t0|c: &mut SecondaryIndex::C, $t1|b: SecondaryIndex::B, $t2|addr: address, $t3|flag: bool) { var $t4: bool var $t5: SecondaryIndex::B var $t6: &mut SecondaryIndex::C var $t7: &mut SecondaryIndex::B var $t8: bool var $t9: address var $t10: &mut SecondaryIndex::C var $t11: &mut SecondaryIndex::B var $t12: &mut address var $t13: &mut SecondaryIndex::C # Accesses: # Formal(0): Read # Formal(0)/b: Write # Formal(0)/b/b_addr: Write # Formal(1): Read # Formal(2): Read # Formal(3): Read # # Locals: # Formal(0)/b: {Formal(0)/b, Formal(1), } # Formal(0)/b/b_addr: {Formal(0)/b/b_addr, Formal(2), } # 0: $t4 := copy($t3) 1: if ($t4) goto 2 else goto 8 2: label L0 3: $t5 := move($t1) 4: $t6 := copy($t0) 5: $t7 := borrow_field.b($t6) 6: write_ref($t7, $t5) 7: goto 8 8: label L2 9: $t8 := move($t3) 10: if ($t8) goto 11 else goto 18 11: label L3 12: $t9 := move($t2) 13: $t10 := move($t0) 14: $t11 := borrow_field.b($t10) 15: $t12 := borrow_field.b_addr($t11) 16: write_ref($t12, $t9) 17: goto 22 18: label L5 19: $t13 := move($t0) 20: destroy($t13) 21: goto 22 22: label L6 23: return () }